From e22d8dea12cf6f7ec0360a06bdca78f321749dc5 Mon Sep 17 00:00:00 2001 From: Akshit Patel Date: Wed, 21 Jan 2026 09:16:49 -0800 Subject: [PATCH 01/67] [PromiseFilters] Add API changes PiperOrigin-RevId: 859131244 --- BUILD | 1 + .../chttp2/transport/chttp2_transport.cc | 27 ++++++++++++------- .../ext/transport/chttp2/transport/internal.h | 7 +++-- src/core/lib/channel/promise_based_filter.cc | 15 ++++++----- src/core/lib/channel/promise_based_filter.h | 5 ++-- src/core/lib/transport/transport.h | 5 ++++ 6 files changed, 41 insertions(+), 19 deletions(-) diff --git a/BUILD b/BUILD index 9d76923a50574..05964b3b03190 100644 --- a/BUILD +++ b/BUILD @@ -5106,6 +5106,7 @@ grpc_cc_library( "//src/core:json", "//src/core:match", "//src/core:memory_quota", + "//src/core:metadata", "//src/core:metadata_batch", "//src/core:metadata_info", "//src/core:notification", diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc index c2cef6c4d741d..11d600671b15f 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc @@ -44,6 +44,7 @@ #include #include +#include "src/core/call/metadata.h" #include "src/core/call/metadata_batch.h" #include "src/core/call/metadata_info.h" #include "src/core/channelz/property_list.h" @@ -169,8 +170,9 @@ static void read_action_locked(grpc_core::RefCountedPtr, static void continue_read_action_locked( grpc_core::RefCountedPtr t); -static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s, - grpc_error_handle error, bool tarpit); +static void close_from_api( + grpc_chttp2_transport* t, grpc_chttp2_stream* s, grpc_error_handle error, + bool tarpit, grpc_core::ServerMetadataHandle send_trailing_metadata); // Start new streams that have been created if we can static void maybe_start_some_streams(grpc_chttp2_transport* t); @@ -1842,8 +1844,10 @@ static void perform_stream_op_locked(void* stream_op, } if (op->cancel_stream) { - grpc_chttp2_cancel_stream(t, s, op_payload->cancel_stream.cancel_error, - op_payload->cancel_stream.tarpit); + grpc_chttp2_cancel_stream( + t, s, op_payload->cancel_stream.cancel_error, + op_payload->cancel_stream.tarpit, + std::move(op_payload->cancel_stream.send_trailing_metadata)); } if (op->send_initial_metadata) { @@ -2456,12 +2460,15 @@ void MaybeTarpit(grpc_chttp2_transport* t, bool tarpit, F fn) { } // namespace } // namespace grpc_core -void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s, - grpc_error_handle due_to_error, bool tarpit) { +void grpc_chttp2_cancel_stream( + grpc_chttp2_transport* t, grpc_chttp2_stream* s, + grpc_error_handle due_to_error, bool tarpit, + grpc_core::ServerMetadataHandle send_trailing_metadata) { if (!t->is_client && !s->sent_trailing_metadata && grpc_error_has_clear_grpc_status(due_to_error) && !(s->read_closed && s->write_closed)) { - close_from_api(t, s, due_to_error, tarpit); + close_from_api(t, s, due_to_error, tarpit, + std::move(send_trailing_metadata)); return; } @@ -2650,8 +2657,10 @@ grpc_chttp2_transport::RemovedStreamHandle grpc_chttp2_mark_stream_closed( return rsh; } -static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s, - grpc_error_handle error, bool tarpit) { +static void close_from_api( + grpc_chttp2_transport* t, grpc_chttp2_stream* s, grpc_error_handle error, + bool tarpit, + GRPC_UNUSED grpc_core::ServerMetadataHandle send_trailing_metadata) { grpc_status_code grpc_status; std::string message; grpc_error_get_status(error, s->deadline, &grpc_status, &message, nullptr, diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h index 4735af46a529e..205e3752f46f1 100644 --- a/src/core/ext/transport/chttp2/transport/internal.h +++ b/src/core/ext/transport/chttp2/transport/internal.h @@ -34,6 +34,7 @@ #include #include +#include "src/core/call/metadata.h" #include "src/core/call/metadata_batch.h" #include "src/core/channelz/channelz.h" #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h" @@ -892,8 +893,10 @@ void grpc_chttp2_reset_ping_clock(grpc_chttp2_transport* t); void grpc_chttp2_mark_stream_writable(grpc_chttp2_transport* t, grpc_chttp2_stream* s); -void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s, - grpc_error_handle due_to_error, bool tarpit); +void grpc_chttp2_cancel_stream( + grpc_chttp2_transport* t, grpc_chttp2_stream* s, + grpc_error_handle due_to_error, bool tarpit, + grpc_core::ServerMetadataHandle send_trailing_metadata = nullptr); void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t, grpc_chttp2_stream* s); diff --git a/src/core/lib/channel/promise_based_filter.cc b/src/core/lib/channel/promise_based_filter.cc index ea3c73eb32fd8..8686ccaa77852 100644 --- a/src/core/lib/channel/promise_based_filter.cc +++ b/src/core/lib/channel/promise_based_filter.cc @@ -23,6 +23,7 @@ #include #include +#include "src/core/call/metadata.h" #include "src/core/lib/channel/channel_stack.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/iomgr/error.h" @@ -2040,6 +2041,7 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) { !batch->recv_trailing_metadata); PollContext poll_ctx(this, &flusher); Completed(batch->payload->cancel_stream.cancel_error, + std::move(batch->payload->cancel_stream.send_trailing_metadata), batch->payload->cancel_stream.tarpit, &flusher); if (is_last()) { batch.CompleteWith(&flusher); @@ -2159,8 +2161,9 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) { } // Handle cancellation. -void ServerCallData::Completed(grpc_error_handle error, - bool tarpit_cancellation, Flusher* flusher) { +void ServerCallData::Completed( + grpc_error_handle error, GRPC_UNUSED ServerMetadataHandle trailing_metadata, + bool tarpit_cancellation, Flusher* flusher) { GRPC_TRACE_VLOG(channel, 2) << LogTag() << "ServerCallData::Completed: send_trailing_state=" << StateString(send_trailing_state_) << " send_initial_state=" @@ -2319,8 +2322,8 @@ void ServerCallData::RecvTrailingMetadataReady(grpc_error_handle error) { << " md=" << recv_trailing_metadata_->DebugString(); Flusher flusher(this); PollContext poll_ctx(this, &flusher); - Completed(error, recv_trailing_metadata_->get(GrpcTarPit()).has_value(), - &flusher); + Completed(error, /*trailing_metadata=*/nullptr, + recv_trailing_metadata_->get(GrpcTarPit()).has_value(), &flusher); flusher.AddClosure(original_recv_trailing_metadata_ready_, std::move(error), "continue recv trailing"); } @@ -2527,8 +2530,8 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) { break; case SendTrailingState::kInitial: { GRPC_CHECK(*md->get_pointer(GrpcStatusMetadata()) != GRPC_STATUS_OK); - Completed(StatusFromMetadata(*md), md->get(GrpcTarPit()).has_value(), - flusher); + Completed(StatusFromMetadata(*md), /*trailing_metadata=*/nullptr, + md->get(GrpcTarPit()).has_value(), flusher); } break; case SendTrailingState::kCancelled: // Nothing to do. diff --git a/src/core/lib/channel/promise_based_filter.h b/src/core/lib/channel/promise_based_filter.h index fa8c7c3429463..a285b11ef6a7f 100644 --- a/src/core/lib/channel/promise_based_filter.h +++ b/src/core/lib/channel/promise_based_filter.h @@ -1843,8 +1843,9 @@ class ServerCallData : public BaseCallData { struct SendInitialMetadata; // Shut things down when the call completes. - void Completed(grpc_error_handle error, bool tarpit_cancellation, - Flusher* flusher); + void Completed(grpc_error_handle error, + ServerMetadataHandle trailing_metadata, + bool tarpit_cancellation, Flusher* flusher); // Construct a promise that will "call" the next filter. // Effectively: // - put the modified initial metadata into the batch being sent up. diff --git a/src/core/lib/transport/transport.h b/src/core/lib/transport/transport.h index 0a071de6e8cf2..896a2974c9586 100644 --- a/src/core/lib/transport/transport.h +++ b/src/core/lib/transport/transport.h @@ -409,6 +409,11 @@ struct grpc_transport_stream_op_batch_payload { // This should be set for cancellations that result from malformed client // initial metadata. bool tarpit = false; + // Server-side only: If non-null, the transport sends this trailing + // metadata to the client. + // NOTE: This metadata bypasses subsequent filters and is sent directly + // to the client. Ensure it contains only fields intended for the client. + grpc_core::ServerMetadataHandle send_trailing_metadata = nullptr; } cancel_stream; }; From 0a3681052b03fc3a2275cf4a93a7d26c76212009 Mon Sep 17 00:00:00 2001 From: Sergii Tkachenko Date: Wed, 21 Jan 2026 11:12:37 -0800 Subject: [PATCH 02/67] gRPC test DNS server: Synchronize shutdown to prevent data races To avoid data races and use-after-free on shutdown in Python 3.13. It seems to have worked before due to unintended guarantees of the Python interpreter that are gone with the new version. Uses `threading.Event` and `threading.Lock` to coordinate between the main thread handling signals and the `flush_stdout_loop` thread. The `_quit_on_signal` handler now signals the flush thread to exit, and waits for the flush thread to complete its current sleep cycle before calling `sys.exit()`. This prevents a use-after-free that shows up as a data race. Ref b/474047558 PiperOrigin-RevId: 859182150 --- test/cpp/naming/utils/dns_server.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/test/cpp/naming/utils/dns_server.py b/test/cpp/naming/utils/dns_server.py index a6692a63dbc97..4f01dce256361 100755 --- a/test/cpp/naming/utils/dns_server.py +++ b/test/cpp/naming/utils/dns_server.py @@ -44,6 +44,10 @@ ) _SERVER_HEALTH_CHECK_RECORD_DATA = "123.123.123.123" +_shutdown_event = threading.Event() +_thread_sleep_lock = threading.Lock() +_SLEEP_TIME = 1.0 + class NoFileAuthority(authority.FileAuthority): def __init__(self, soa, records): @@ -140,6 +144,14 @@ def _maybe_split_up_txt_data(name, txt_data, r_ttl): def _quit_on_signal(signum, _frame): print("Received SIGNAL %d. Quitting with exit code 0" % signum) + # Allow the flush thread to exit gracefully. + # This prevents a data race when the flush thread is sleeping and the main + # thread calls sys.exit(). See b/474047558. + _shutdown_event.set() + # Instead of just sleeping for _SLEEP_TIME, to exit faster we use a lock + # to signal from the flush thread that it's ready to exit. + _thread_sleep_lock.acquire(timeout=_SLEEP_TIME + 0.1) + twisted.internet.reactor.stop() sys.stdout.flush() sys.exit(0) @@ -147,12 +159,18 @@ def _quit_on_signal(signum, _frame): def flush_stdout_loop(): num_timeouts_so_far = 0 - sleep_time = 1 # Prevent zombies. Tests that use this server are short-lived. max_timeouts = 60 * 10 while num_timeouts_so_far < max_timeouts: + if _shutdown_event.is_set(): + # Allow the flush thread to exit gracefully to prevent data races + # with the main thread during shutdown. + print("Shutting down the stdout flush thread.", flush=True) + return + sys.stdout.flush() - time.sleep(sleep_time) + with _thread_sleep_lock: + time.sleep(_SLEEP_TIME) num_timeouts_so_far += 1 print("Process timeout reached, or cancelled. Exiting 0.") os.kill(os.getpid(), signal.SIGTERM) From 0111e45a641a17ffba65015e4b052d33e6e4767f Mon Sep 17 00:00:00 2001 From: yuanweiz Date: Wed, 21 Jan 2026 14:54:19 -0800 Subject: [PATCH 03/67] [Bzlmod] Add --nobuild to bzlmod build test for cheaper validation. (#41431) https://github.com/grpc/grpc/pull/41309 caused timeout because a full build is too expensive. This PR changes the new bazel command to use the --nobuild option. This triggers bazel's "static" dependency analysis without compiling C++ code. This test does NOT detect issues caused by module incompatibilities (e.g. some package doesn't build with new version of absl). --------- Co-authored-by: Mark D. Roth --- tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh b/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh index cf74be40c666c..0f69e4883cf2b 100755 --- a/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh +++ b/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh @@ -43,9 +43,14 @@ tools/bazel \ //test/core/util:all \ //test/cpp/common:all +# Use --nobuild flag to trigger bazel dependency analysis but skip C++ +# compilation. +# TODO(weizheyuan): Re-enable the full build (by removing --nobuild) +# once it no longer causes CI timeouts. tools/bazel \ --bazelrc=tools/remote_build/linux_bzlmod.bazelrc \ build \ + --nobuild \ --ignore_dev_dependency=false \ -- \ //test/... \ From c11767fda5516f9d02ba96e9d8dac82769a5ef02 Mon Sep 17 00:00:00 2001 From: Laramie Leavitt Date: Wed, 21 Jan 2026 17:18:46 -0800 Subject: [PATCH 04/67] No public description COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41069 from laramiel:laramiel-patch-1 6c14dc354014df55def4e217e1b9bb51c75d0c3b PiperOrigin-RevId: 859328344 --- src/core/util/function_signature.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/util/function_signature.h b/src/core/util/function_signature.h index 9cb5d99e2be5a..cacbd98a800ec 100644 --- a/src/core/util/function_signature.h +++ b/src/core/util/function_signature.h @@ -31,7 +31,9 @@ #elif defined(__GNUC__) #define GRPC_FUNCTION_SIGNATURE __PRETTY_FUNCTION__ #else -#define GRPC_FUNCTION_SIGNATURE "???()" +#define GRPC_FUNCTION_SIGNATURE \ + "??" \ + "?()" #endif namespace grpc_core { From d7f3d36f683cc872b4a66d23ff1a6270941c2808 Mon Sep 17 00:00:00 2001 From: Antony Polukhin Date: Wed, 21 Jan 2026 20:40:30 -0800 Subject: [PATCH 05/67] [cleanup] Move strings if possible in grpc::Status (#40443) Closes #40443 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40443 from apolukhin:status-optimize d53b7ad8901d0b0d5ef53c356d79e45433ebbcf6 PiperOrigin-RevId: 859387690 --- include/grpcpp/impl/status.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/include/grpcpp/impl/status.h b/include/grpcpp/impl/status.h index 94c0e80a9b652..ef18aa73fb021 100644 --- a/include/grpcpp/impl/status.h +++ b/include/grpcpp/impl/status.h @@ -95,17 +95,16 @@ class GRPC_MUST_USE_RESULT_WHEN_USE_STRICT_WARNING GRPCXX_DLL Status { /// instead of a value (which results in a copy instead of a move) to allow /// for easy transition to absl::Status in the future which accepts an /// absl::string_view as a parameter. - Status(StatusCode code, const std::string& error_message) - : code_(code), error_message_(error_message) {} + Status(StatusCode code, std::string error_message) + : code_(code), error_message_(std::move(error_message)) {} /// Construct an instance with \a code, \a error_message and /// \a error_details. It is an error to construct an OK status with non-empty /// \a error_message and/or \a error_details. - Status(StatusCode code, const std::string& error_message, - const std::string& error_details) + Status(StatusCode code, std::string error_message, std::string error_details) : code_(code), - error_message_(error_message), - binary_error_details_(error_details) {} + error_message_(std::move(error_message)), + binary_error_details_(std::move(error_details)) {} // Pre-defined special status objects. /// An OK pre-defined instance. From e0eeeb76e283684caa2db6860f1ab5e8ed42e1e4 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Thu, 22 Jan 2026 08:27:34 -0800 Subject: [PATCH 06/67] [C++] Add SNI override option to C++ channel credentials options API (#41460) This option was added to the core credentials API in #41051. Now we add the same option to the corresponding C++ API. b/203822267 Closes #41460 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41460 from murgatroid99:c++_creds_sni_override 7241f2afeb56dd1c5fb35b21981c4b585f298bb8 PiperOrigin-RevId: 859620187 --- include/grpcpp/security/tls_credentials_options.h | 5 +++++ src/cpp/common/tls_credentials_options.cc | 8 ++++++++ test/cpp/client/credentials_test.cc | 14 ++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/include/grpcpp/security/tls_credentials_options.h b/include/grpcpp/security/tls_credentials_options.h index b509af05c69a1..d55d2c6d655fb 100644 --- a/include/grpcpp/security/tls_credentials_options.h +++ b/include/grpcpp/security/tls_credentials_options.h @@ -157,6 +157,11 @@ class TlsChannelCredentialsOptions final : public TlsCredentialsOptions { // The default is true. void set_verify_server_certs(bool verify_server_certs); + // Overrides the SNI that the client sends in the TLS handshake. nullopt + // indicates that SNI should not be overridden. An empty string value + // indicates that SNI should not be sent at all. The default is nullopt. + void set_sni_override(std::optional sni_override); + private: }; diff --git a/src/cpp/common/tls_credentials_options.cc b/src/cpp/common/tls_credentials_options.cc index 7fa9d685e9fda..7bfb8df91f138 100644 --- a/src/cpp/common/tls_credentials_options.cc +++ b/src/cpp/common/tls_credentials_options.cc @@ -17,6 +17,7 @@ // #include +#include #include #include #include @@ -134,6 +135,13 @@ void TlsChannelCredentialsOptions::set_verify_server_certs( verify_server_certs); } +void TlsChannelCredentialsOptions::set_sni_override( + std::optional sni_override) { + grpc_tls_credentials_options* options = mutable_c_credentials_options(); + GRPC_CHECK_NE(options, nullptr); + grpc_tls_credentials_options_set_sni_override(options, sni_override); +} + void TlsServerCredentialsOptions::set_cert_request_type( grpc_ssl_client_certificate_request_type cert_request_type) { grpc_tls_credentials_options* options = mutable_c_credentials_options(); diff --git a/test/cpp/client/credentials_test.cc b/test/cpp/client/credentials_test.cc index 9f5a92a3fc16c..c054ae768fdf8 100644 --- a/test/cpp/client/credentials_test.cc +++ b/test/cpp/client/credentials_test.cc @@ -319,6 +319,20 @@ TEST(CredentialsTest, TlsChannelCredentialsWithDefaultRootsAndDefaultVerifier) { GRPC_CHECK_NE(channel_credentials.get(), nullptr); } +TEST(CredentialsTest, TlsChannelCredentialsWithDefaultRootsAndEmptySni) { + grpc::experimental::TlsChannelCredentialsOptions options; + options.set_sni_override(""); + auto channel_credentials = grpc::experimental::TlsCredentials(options); + GRPC_CHECK_NE(channel_credentials.get(), nullptr); +} + +TEST(CredentialsTest, TlsChannelCredentialsWithDefaultRootsAndSni) { + grpc::experimental::TlsChannelCredentialsOptions options; + options.set_sni_override("test"); + auto channel_credentials = grpc::experimental::TlsCredentials(options); + GRPC_CHECK_NE(channel_credentials.get(), nullptr); +} + TEST( CredentialsTest, TlsChannelCredentialsWithStaticDataCertificateProviderLoadingRootAndIdentity) { From 8795a52e76c1423c172bcde928d7172a4a8c9ee2 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Thu, 22 Jan 2026 11:00:29 -0800 Subject: [PATCH 07/67] [xDS] Remove env var protection for SNI feature (#41459) We decided that existing interop tests are sufficient for this. Closes #41459 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41459 from murgatroid99:xds_sni_remove_env_var 96bd6c99ff4f4e2b7c57a51e6b8bd8fec2830bad PiperOrigin-RevId: 859686823 --- src/core/xds/grpc/xds_cluster_parser.cc | 4 ++-- test/core/xds/xds_cluster_resource_type_test.cc | 3 +-- test/cpp/end2end/xds/xds_security_end2end_test.cc | 8 -------- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/core/xds/grpc/xds_cluster_parser.cc b/src/core/xds/grpc/xds_cluster_parser.cc index 4a26dec91689c..716d0a83cf7de 100644 --- a/src/core/xds/grpc/xds_cluster_parser.cc +++ b/src/core/xds/grpc/xds_cluster_parser.cc @@ -77,10 +77,10 @@ bool XdsHttpConnectEnabled() { namespace { -// TODO(mlumish): Remove this once the feature passes interop tests. +// TODO(mlumish): Remove this after the 1.81 release. bool XdsSniEnabled() { auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_SNI"); - if (!value.has_value()) return false; + if (!value.has_value()) return true; bool parsed_value; bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value); return parse_succeeded && parsed_value; diff --git a/test/core/xds/xds_cluster_resource_type_test.cc b/test/core/xds/xds_cluster_resource_type_test.cc index bf5ab36a94e82..7b7f1655afbbb 100644 --- a/test/core/xds/xds_cluster_resource_type_test.cc +++ b/test/core/xds/xds_cluster_resource_type_test.cc @@ -973,7 +973,6 @@ TEST_F(TlsConfigTest, SystemRootCerts) { } TEST_F(TlsConfigTest, UpstreamTlsContextSni) { - ScopedExperimentalEnvVar env_var("GRPC_EXPERIMENTAL_XDS_SNI"); Cluster cluster; cluster.set_name("foo"); cluster.set_type(cluster.EDS); @@ -1007,6 +1006,7 @@ TEST_F(TlsConfigTest, UpstreamTlsContextSni) { } TEST_F(TlsConfigTest, UpstreamTlsContextSniNoEnv) { + testing::ScopedEnvVar env("GRPC_EXPERIMENTAL_XDS_SNI", "false"); Cluster cluster; cluster.set_name("foo"); cluster.set_type(cluster.EDS); @@ -1183,7 +1183,6 @@ TEST_F(TlsConfigTest, CaCertProviderUnset) { } TEST_F(TlsConfigTest, SniTooLong) { - ScopedExperimentalEnvVar env_var("GRPC_EXPERIMENTAL_XDS_SNI"); Cluster cluster; cluster.set_name("foo"); cluster.set_type(cluster.EDS); diff --git a/test/cpp/end2end/xds/xds_security_end2end_test.cc b/test/cpp/end2end/xds/xds_security_end2end_test.cc index ddf7fb3992683..ce2cb97e973cf 100644 --- a/test/cpp/end2end/xds/xds_security_end2end_test.cc +++ b/test/cpp/end2end/xds/xds_security_end2end_test.cc @@ -934,7 +934,6 @@ TEST_P(XdsSniSecurityTest, LegacySniBehavior) { } TEST_P(XdsSniSecurityTest, NoSniGetsFirstCertificate) { - grpc_core::testing::ScopedExperimentalEnvVar env("GRPC_EXPERIMENTAL_XDS_SNI"); g_fake1_cert_data_map->Set({{"", {root_cert_, identity_pair_}}}); EdsResourceArgs args({ {"locality0", CreateEndpointsForBackends(0, 1)}, @@ -957,7 +956,6 @@ TEST_P(XdsSniSecurityTest, FixedSni) { // This test effectively tests for two different things at once: // 1. That the client sends the SNI "foo" when configured to do so. // 2. That the client successfully validates the SAN "foo" with a SAN matcher. - grpc_core::testing::ScopedExperimentalEnvVar env("GRPC_EXPERIMENTAL_XDS_SNI"); g_fake1_cert_data_map->Set({{"", {root_cert_, identity_pair_}}}); EdsResourceArgs args({ {"locality0", CreateEndpointsForBackends(0, 1)}, @@ -977,7 +975,6 @@ TEST_P(XdsSniSecurityTest, FixedSni) { } TEST_P(XdsSniSecurityTest, AutoHostSniNoOpWhenEndpointHasNoHostname) { - grpc_core::testing::ScopedExperimentalEnvVar env("GRPC_EXPERIMENTAL_XDS_SNI"); g_fake1_cert_data_map->Set({{"", {root_cert_, identity_pair_}}}); EdsResourceArgs args({ {"locality0", CreateEndpointsForBackends(0, 1)}, @@ -998,7 +995,6 @@ TEST_P(XdsSniSecurityTest, AutoHostSniNoOpWhenEndpointHasNoHostname) { } TEST_P(XdsSniSecurityTest, EdsAutoHostSni) { - grpc_core::testing::ScopedExperimentalEnvVar env("GRPC_EXPERIMENTAL_XDS_SNI"); g_fake1_cert_data_map->Set({{"", {root_cert_, identity_pair_}}}); EdsResourceArgs args({ {"locality0", @@ -1021,7 +1017,6 @@ TEST_P(XdsSniSecurityTest, EdsAutoHostSni) { } TEST_P(XdsSniSecurityTest, LogicalDNSAutoHostSni) { - grpc_core::testing::ScopedExperimentalEnvVar env("GRPC_EXPERIMENTAL_XDS_SNI"); g_fake1_cert_data_map->Set({{"", {root_cert_, identity_pair_}}}); auto cluster = default_cluster_; cluster.set_type(Cluster::LOGICAL_DNS); @@ -1055,7 +1050,6 @@ TEST_P(XdsSniSecurityTest, LogicalDNSAutoHostSni) { } TEST_P(XdsSniSecurityTest, AutoSniSanValidation) { - grpc_core::testing::ScopedExperimentalEnvVar env("GRPC_EXPERIMENTAL_XDS_SNI"); g_fake1_cert_data_map->Set({{"", {root_cert_, identity_pair_}}}); EdsResourceArgs args({ {"locality0", CreateEndpointsForBackends(0, 1)}, @@ -1076,7 +1070,6 @@ TEST_P(XdsSniSecurityTest, AutoSniSanValidation) { } TEST_P(XdsSniSecurityTest, AutoSniSanValidationWithAutoHostSni) { - grpc_core::testing::ScopedExperimentalEnvVar env("GRPC_EXPERIMENTAL_XDS_SNI"); g_fake1_cert_data_map->Set({{"", {root_cert_, identity_pair_}}}); EdsResourceArgs args({ {"locality0", @@ -1099,7 +1092,6 @@ TEST_P(XdsSniSecurityTest, AutoSniSanValidationWithAutoHostSni) { } TEST_P(XdsSniSecurityTest, SanValidationFailure) { - grpc_core::testing::ScopedExperimentalEnvVar env("GRPC_EXPERIMENTAL_XDS_SNI"); g_fake1_cert_data_map->Set({{"", {root_cert_, identity_pair_}}}); EdsResourceArgs args({ {"locality0", CreateEndpointsForBackends(0, 1)}, From abc7f59643ace22562304d7d7d880aed447a34f6 Mon Sep 17 00:00:00 2001 From: Sergii Tkachenko Date: Thu, 22 Jan 2026 11:40:36 -0800 Subject: [PATCH 08/67] [CI][Python] Get remove all usages of `six` (#41040) - Removes all usages of `six`. - Refactors the code to assume py3-style iterables. - Other minor fixes related to getting rid of Python 2 syntax. - Minor unrelated change: adds `repr` to `run_tests.Config`. Note: This just removes the usages of `six` in code. I'll clean up CI dependencies in a separate PR. Closes #41040 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41040 from sergiitk:feat/py/remove-six 1e43aceef3afdece51c434ce6b03997391f668ca PiperOrigin-RevId: 859704528 --- .../python_utils/filter_pull_request_tests.py | 6 +---- tools/run_tests/python_utils/port_server.py | 9 +++---- tools/run_tests/python_utils/report_utils.py | 6 ++--- .../python_utils/start_port_server.py | 5 +--- .../python_utils/upload_test_results.py | 10 +++----- tools/run_tests/python_utils/watch_dirs.py | 4 +--- tools/run_tests/run_grpclb_interop_tests.py | 10 +------- tools/run_tests/run_interop_tests.py | 16 ++++--------- tools/run_tests/run_performance_tests.py | 14 ++++------- tools/run_tests/run_tests.py | 24 +++++++++---------- 10 files changed, 33 insertions(+), 71 deletions(-) diff --git a/tools/run_tests/python_utils/filter_pull_request_tests.py b/tools/run_tests/python_utils/filter_pull_request_tests.py index 2ae2d04dfbaa0..9edc416028a60 100644 --- a/tools/run_tests/python_utils/filter_pull_request_tests.py +++ b/tools/run_tests/python_utils/filter_pull_request_tests.py @@ -13,13 +13,9 @@ # limitations under the License. """Filter out tests based on file differences compared to merge target branch""" -from __future__ import print_function - import re import subprocess -import six - class TestSuite: """ @@ -124,7 +120,7 @@ def add_trigger(self, trigger): _ALL_TRIGGERS = "(" + ")|(".join(list(_ALLOWLIST_DICT.keys())) + ")" # Add all triggers to their respective test suites -for trigger, test_suites in six.iteritems(_ALLOWLIST_DICT): +for trigger, test_suites in _ALLOWLIST_DICT.items(): for test_suite in test_suites: test_suite.add_trigger(trigger) diff --git a/tools/run_tests/python_utils/port_server.py b/tools/run_tests/python_utils/port_server.py index 1ab3c73d59fb7..7f58180e76c9a 100755 --- a/tools/run_tests/python_utils/port_server.py +++ b/tools/run_tests/python_utils/port_server.py @@ -14,21 +14,18 @@ # limitations under the License. """Manage TCP ports for unit tests; started by run_tests.py""" -from __future__ import print_function - import argparse import errno +from http.server import BaseHTTPRequestHandler +from http.server import HTTPServer import platform import random import socket +from socketserver import ThreadingMixIn import sys import threading import time -from six.moves.BaseHTTPServer import BaseHTTPRequestHandler -from six.moves.BaseHTTPServer import HTTPServer -from six.moves.socketserver import ThreadingMixIn - # increment this number whenever making a change to ensure that # the changes are picked up by running CI servers # note that all changes must be backwards compatible diff --git a/tools/run_tests/python_utils/report_utils.py b/tools/run_tests/python_utils/report_utils.py index 2f0e0b15988ec..e37ba2a0f306f 100644 --- a/tools/run_tests/python_utils/report_utils.py +++ b/tools/run_tests/python_utils/report_utils.py @@ -24,8 +24,6 @@ import string import xml.etree.cElementTree as ET -import six - def _filter_msg(msg, output_format): """Filters out nonprintable and illegal characters from the message.""" @@ -71,7 +69,7 @@ def render_junit_xml_report( else: # To have each test result displayed as a separate target by the Resultstore/Sponge UI, # we generate a separate XML report file for each test result - for shortname, results in six.iteritems(resultset): + for shortname, results in resultset.items(): one_result = {shortname: results} tree = new_junit_xml_tree() append_junit_xml_results( @@ -122,7 +120,7 @@ def append_junit_xml_results( ) failure_count = 0 error_count = 0 - for shortname, results in six.iteritems(resultset): + for shortname, results in resultset.items(): for result in results: xml_test = ET.SubElement(testsuite, "testcase", name=shortname) if result.elapsed_time: diff --git a/tools/run_tests/python_utils/start_port_server.py b/tools/run_tests/python_utils/start_port_server.py index 9d9f0b1045082..c68a0368a13ae 100644 --- a/tools/run_tests/python_utils/start_port_server.py +++ b/tools/run_tests/python_utils/start_port_server.py @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from __future__ import print_function - import logging import os import socket @@ -21,8 +19,7 @@ import sys import tempfile import time - -import six.moves.urllib.request as request +from urllib import request sys.path.append(os.path.dirname(os.path.abspath(__file__))) import jobset diff --git a/tools/run_tests/python_utils/upload_test_results.py b/tools/run_tests/python_utils/upload_test_results.py index 752ffac469016..996428dccca90 100644 --- a/tools/run_tests/python_utils/upload_test_results.py +++ b/tools/run_tests/python_utils/upload_test_results.py @@ -14,15 +14,11 @@ # limitations under the License. """Helper to upload Jenkins test results to BQ""" -from __future__ import print_function - import os import sys import time import uuid -import six - gcp_utils_dir = os.path.abspath( os.path.join(os.path.dirname(__file__), "../../gcp/utils") ) @@ -140,7 +136,7 @@ def upload_results_to_bq(resultset, bq_table, extra_fields): ) bq_rows = [] - for shortname, results in six.iteritems(resultset): + for shortname, results in resultset.items(): for result in results: test_results = {} _get_build_metadata(test_results) @@ -151,7 +147,7 @@ def upload_results_to_bq(resultset, bq_table, extra_fields): test_results["return_code"] = result.returncode test_results["test_name"] = shortname test_results["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S") - for field_name, field_value in six.iteritems(extra_fields): + for field_name, field_value in extra_fields.items(): test_results[field_name] = field_value row = big_query_utils.make_row(str(uuid.uuid4()), test_results) bq_rows.append(row) @@ -178,7 +174,7 @@ def upload_interop_results_to_bq(resultset, bq_table): ) bq_rows = [] - for shortname, results in six.iteritems(resultset): + for shortname, results in resultset.items(): for result in results: test_results = {} _get_build_metadata(test_results) diff --git a/tools/run_tests/python_utils/watch_dirs.py b/tools/run_tests/python_utils/watch_dirs.py index 409f46d8c0fc0..7d1a3be43d38d 100755 --- a/tools/run_tests/python_utils/watch_dirs.py +++ b/tools/run_tests/python_utils/watch_dirs.py @@ -16,14 +16,12 @@ import os import time -from six import string_types - class DirWatcher(object): """Helper to watch a (set) of directories for modifications.""" def __init__(self, paths): - if isinstance(paths, string_types): + if isinstance(paths, str): paths = [paths] self._done = False self.paths = list(paths) diff --git a/tools/run_tests/run_grpclb_interop_tests.py b/tools/run_tests/run_grpclb_interop_tests.py index 43068901c8f1a..f0915b0c38524 100755 --- a/tools/run_tests/run_grpclb_interop_tests.py +++ b/tools/run_tests/run_grpclb_interop_tests.py @@ -14,24 +14,16 @@ # limitations under the License. """Run interop (cross-language) tests in parallel.""" -from __future__ import print_function - import argparse import atexit -import itertools import json import multiprocessing import os -import re import subprocess import sys -import tempfile import time -import traceback import uuid -import six - import python_utils.dockerjob as dockerjob import python_utils.jobset as jobset import python_utils.report_utils as report_utils @@ -676,7 +668,7 @@ def run_one_scenario(scenario_config): print('Server "%s" has exited prematurely.' % server) suppress_failure = suppress_server_logs and not args.verbose dockerjob.finish_jobs( - [j for j in six.itervalues(server_jobs)], + [j for j in server_jobs.values()], suppress_failure=suppress_failure, ) diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 010f20fd38045..52b1af133df9e 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -14,8 +14,6 @@ # limitations under the License. """Run interop (cross-language) tests in parallel.""" -from __future__ import print_function - import argparse import atexit import itertools @@ -25,13 +23,9 @@ import re import subprocess import sys -import tempfile import time -import traceback import uuid -import six - import python_utils.dockerjob as dockerjob import python_utils.jobset as jobset import python_utils.report_utils as report_utils @@ -1470,7 +1464,7 @@ def aggregate_http2_results(stdout): # we want to include everything but objc in 'all' # because objc won't run on non-mac platforms -all_but_objc = set(six.iterkeys(_LANGUAGES)) - set(["objc"]) +all_but_objc = set(_LANGUAGES) - set(["objc"]) languages = set( _LANGUAGES[l] for l in itertools.chain.from_iterable( @@ -1546,7 +1540,7 @@ def aggregate_http2_results(stdout): "Failed to build interop docker images.", do_newline=True, ) - for image in six.itervalues(docker_images): + for image in docker_images.values(): dockerjob.remove_image(image, skip_nonexistent=True) sys.exit(1) @@ -1801,7 +1795,7 @@ def aggregate_http2_results(stdout): if not jobs: print("No jobs to run.") - for image in six.itervalues(docker_images): + for image in docker_images.values(): dockerjob.remove_image(image, skip_nonexistent=True) sys.exit(1) @@ -1847,9 +1841,9 @@ def aggregate_http2_results(stdout): if not job.is_running(): print('Server "%s" has exited prematurely.' % server) - dockerjob.finish_jobs([j for j in six.itervalues(server_jobs)]) + dockerjob.finish_jobs([j for j in server_jobs.values()]) - for image in six.itervalues(docker_images): + for image in docker_images.values(): if not args.manual_run: print("Removing docker image %s" % image) dockerjob.remove_image(image) diff --git a/tools/run_tests/run_performance_tests.py b/tools/run_tests/run_performance_tests.py index 754298e47b7b4..820d0d47ce66d 100755 --- a/tools/run_tests/run_performance_tests.py +++ b/tools/run_tests/run_performance_tests.py @@ -14,8 +14,6 @@ # limitations under the License. """Run performance tests locally or remotely.""" -from __future__ import print_function - import argparse import collections import itertools @@ -26,8 +24,6 @@ import sys import time -import six - import performance.scenario_config as scenario_config import python_utils.jobset as jobset import python_utils.report_utils as report_utils @@ -274,7 +270,7 @@ def prepare_remote_hosts(hosts, prepare_local=False): def build_on_remote_hosts( - hosts, languages=list(scenario_config.LANGUAGES.keys()), build_local=False + hosts, languages=list(scenario_config.LANGUAGES), build_local=False ): """Builds performance worker on remote hosts (and maybe also locally).""" build_timeout = 45 * 60 @@ -564,7 +560,7 @@ def main(): argp.add_argument( "-l", "--language", - choices=["all"] + sorted(scenario_config.LANGUAGES.keys()), + choices=["all"] + sorted(scenario_config.LANGUAGES), nargs="+", required=True, help="Languages to benchmark.", @@ -692,7 +688,7 @@ def main(): languages = set( scenario_config.LANGUAGES[l] for l in itertools.chain.from_iterable( - six.iterkeys(scenario_config.LANGUAGES) if x == "all" else [x] + scenario_config.LANGUAGES if x == "all" else [x] for x in args.language ) ) @@ -782,8 +778,8 @@ def main(): total_scenario_failures += scenario_failures merged_resultset = dict( itertools.chain( - six.iteritems(merged_resultset), - six.iteritems(resultset), + merged_resultset.items(), + resultset.items(), ) ) finally: diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index af4cc0780a406..8c30dd08ca10b 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -14,12 +14,9 @@ # limitations under the License. """Run tests in parallel.""" -from __future__ import print_function - import argparse import ast import collections -import glob import itertools import json import logging @@ -30,21 +27,14 @@ import random import re import shlex -import socket import subprocess import sys -import tempfile import time -import traceback -import uuid - -import six -from six.moves import urllib +import urllib import python_utils.jobset as jobset import python_utils.report_utils as report_utils import python_utils.start_port_server as start_port_server -import python_utils.watch_dirs as watch_dirs try: from python_utils.upload_test_results import upload_results_to_bq @@ -112,7 +102,7 @@ def _print_debug_info_epilogue(dockerfile_dir=None): # SimpleConfig: just compile with CONFIG=config, and run the binary to test -class Config(object): +class Config: def __init__( self, config, @@ -166,6 +156,14 @@ def job_spec( timeout_retries=1 if flaky or args.allow_flakes else 0, ) + def __repr__(self): + return ( + f"" + ) + def get_c_tests(travis, test_lang): out = [] @@ -1090,7 +1088,7 @@ def test_specs(self): else: raise Exception('Illegal runtime "%s" was specified.') - for assembly in six.iterkeys(tests_by_assembly): + for assembly in tests_by_assembly: assembly_file = "src/csharp/%s/%s/%s%s" % ( assembly, assembly_subdir, From 8713acf3a6266b8e9d117583286079cc52a15428 Mon Sep 17 00:00:00 2001 From: yuanweiz Date: Thu, 22 Jan 2026 14:03:50 -0800 Subject: [PATCH 09/67] [bzlmod] Support repo @google_cloud_cpp in bzlmod (#41311) This change should enable us to build most C/C++ tests with bzlmod. `googleapis` is also updated because google_cloud_cpp 2.35.0 uses a modified version of googleapis. This requires us to copy some boilerplate code from upstream (BCR and google_cloud_cpp respectively). Alternatively we could also use google_cloud_cpp from BCR, it takes less coding work but the lowest version available is 3.0.0 and requires a bunch of version bumps to other modules, so it might be more risky. `rules_proto` version is increase to 7.1.0 (requested by google_cloud_cpp) Closes #41311 PiperOrigin-RevId: 859764899 --- MODULE.bazel | 23 ++++++++++++++++- .../patches/fix_google_cloud_cpp.patch | 25 +++++++++++++++++++ templates/MODULE.bazel.inja | 23 ++++++++++++++++- .../test/bazel_build_with_bzlmod_linux.sh | 9 +++---- tools/remote_build/linux_bzlmod.bazelrc | 2 +- 5 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 bazel/googleapis/patches/fix_google_cloud_cpp.patch diff --git a/MODULE.bazel b/MODULE.bazel index dbb69536c05f0..be8a380122f53 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -28,7 +28,6 @@ bazel_dep(name = "bazel_skylib", version = "1.8.1") bazel_dep(name = "boringssl", version = "0.20241024.0") # mistmatched 20241211 bazel_dep(name = "c-ares", version = "1.19.1", repo_name = "com_github_cares_cares") bazel_dep(name = "envoy_api", version = "0.0.0-20251216-6ef568c") -bazel_dep(name = "googleapis", version = "0.0.0-20251003-2193a2bf", repo_name = "com_google_googleapis") bazel_dep(name = "googleapis-cc", version = "1.0.0") bazel_dep(name = "googleapis-grpc-cc", version = "1.0.0") bazel_dep(name = "googleapis-python", version = "1.0.0") @@ -105,3 +104,25 @@ include("//bazel:com_google_fuzztest.MODULE.bazel") # Provides repo @grpc_custom_exec_properties. include("//bazel:grpc_custom_exec_properties.MODULE.bazel") + +# -- google_cloud_cpp 2.35.0 related repos, which requires a modified version of googleapis, hence the version pinning. +bazel_dep(name = "googleapis", version = "0.0.0-20251003-2193a2bf", repo_name = "com_google_googleapis") +single_version_override( + module_name = "googleapis", + patch_strip = 1, + patches = [ + "//bazel:googleapis/patches/fix_google_cloud_cpp.patch", + ], + version = "0.0.0-20251003-2193a2bf", +) + +bazel_dep(name = "google_cloud_cpp", version = "2.35.0", dev_dependency = True) +archive_override( + module_name = "google_cloud_cpp", + integrity = "sha256-geooz55bsDLTVrAYdAnzCxA1+OpbUwZ16iSMimwAcKo=", + strip_prefix = "google-cloud-cpp-2.35.0", + urls = [ + "https://storage.googleapis.com/grpc-bazel-mirror/github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.35.0.tar.gz", + "https://github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.35.0.tar.gz", + ], +) diff --git a/bazel/googleapis/patches/fix_google_cloud_cpp.patch b/bazel/googleapis/patches/fix_google_cloud_cpp.patch new file mode 100644 index 0000000000000..4b5506ea037d5 --- /dev/null +++ b/bazel/googleapis/patches/fix_google_cloud_cpp.patch @@ -0,0 +1,25 @@ +# Inspired by https://github.com/googleapis/google-cloud-cpp/blob/2839e9dba793ca023e11ea67f201f66f74fa7d3e/bazel/googleapis.BUILD +diff --git a/BUILD.bazel b/BUILD.bazel +index 026553f5c..7c7bc0419 100644 +--- a/BUILD.bazel ++++ b/BUILD.bazel +@@ -1,3 +1,19 @@ ++package(default_visibility = ["//visibility:public"]) ++ ++licenses(["notice"]) # Apache 2.0 ++ ++# This build file overlays on top of the BUILD files for the googleapis repo, ++# and it adds a target that lets us include their header files using ++# angle-brackets, thus treating their headers as system includes. This allows ++# us to dial-up the warnings in our own code, without seeing compiler warnings ++# from their headers, which we do not own. ++cc_library( ++ name = "googleapis_system_includes", ++ includes = [ ++ ".", ++ ], ++) ++ + genrule( + name = "build_gen", + srcs = glob( diff --git a/templates/MODULE.bazel.inja b/templates/MODULE.bazel.inja index 7ef537f9e1a87..80127173df8b1 100644 --- a/templates/MODULE.bazel.inja +++ b/templates/MODULE.bazel.inja @@ -28,7 +28,6 @@ bazel_dep(name = "bazel_skylib", version = "1.8.1") bazel_dep(name = "boringssl", version = "0.20241024.0") # mistmatched 20241211 bazel_dep(name = "c-ares", version = "1.19.1", repo_name = "com_github_cares_cares") bazel_dep(name = "envoy_api", version = "0.0.0-20251216-6ef568c") -bazel_dep(name = "googleapis", version = "0.0.0-20251003-2193a2bf", repo_name = "com_google_googleapis") bazel_dep(name = "googleapis-cc", version = "1.0.0") bazel_dep(name = "googleapis-grpc-cc", version = "1.0.0") bazel_dep(name = "googleapis-python", version = "1.0.0") @@ -105,3 +104,25 @@ include("//bazel:com_google_fuzztest.MODULE.bazel") # Provides repo @grpc_custom_exec_properties. include("//bazel:grpc_custom_exec_properties.MODULE.bazel") + +# -- google_cloud_cpp 2.35.0 related repos, which requires a modified version of googleapis, hence the version pinning. +bazel_dep(name = "googleapis", version = "0.0.0-20251003-2193a2bf", repo_name = "com_google_googleapis") +single_version_override( + module_name = "googleapis", + patch_strip = 1, + patches = [ + "//bazel:googleapis/patches/fix_google_cloud_cpp.patch", + ], + version = "0.0.0-20251003-2193a2bf", +) + +bazel_dep(name = "google_cloud_cpp", version = "2.35.0", dev_dependency = True) +archive_override( + module_name = "google_cloud_cpp", + integrity = "sha256-geooz55bsDLTVrAYdAnzCxA1+OpbUwZ16iSMimwAcKo=", + strip_prefix = "google-cloud-cpp-2.35.0", + urls = [ + "https://storage.googleapis.com/grpc-bazel-mirror/github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.35.0.tar.gz", + "https://github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.35.0.tar.gz", + ], +) diff --git a/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh b/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh index 0f69e4883cf2b..d5ce4145eb7f6 100755 --- a/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh +++ b/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh @@ -20,16 +20,14 @@ tools/bazel \ --bazelrc=tools/remote_build/linux_bzlmod.bazelrc \ build \ -- \ - :all \ - -:grpcpp_csm_observability # Needs google_cloud_cpp to be added to BCR + :all # Test if examples are buildable without dev dependencies. tools/bazel \ --bazelrc=tools/remote_build/linux_bzlmod.bazelrc \ build \ -- \ - //examples/cpp/... \ - -//examples/cpp/csm/... # Needs grpcpp_csm_observability + //examples/cpp/... # Test if a few basic tests can pass. # This is a temporary sanity check covering essential features, @@ -64,5 +62,4 @@ tools/bazel \ build \ --define=//third_party:grpc_use_openssl=true \ -- \ - :all \ - -:grpcpp_csm_observability # Needs google_cloud_cpp to be added to BCR + :all diff --git a/tools/remote_build/linux_bzlmod.bazelrc b/tools/remote_build/linux_bzlmod.bazelrc index a1cf0863fd5ea..2da01a11255cd 100644 --- a/tools/remote_build/linux_bzlmod.bazelrc +++ b/tools/remote_build/linux_bzlmod.bazelrc @@ -22,6 +22,6 @@ common --enable_workspace=false # TODO(weizheyuan): Re-enable this check once we upgrade all of the # transitive dependencies that are currently at mismatched versions. #common --check_direct_dependencies=error -common --ignore_dev_dependency +common --ignore_dev_dependency=false build --jobs=200 From a1e64a2ed6a81c2f51b65c4d28b265db5892dfec Mon Sep 17 00:00:00 2001 From: Marcel Date: Thu, 22 Jan 2026 14:09:40 -0800 Subject: [PATCH 10/67] Prefer language rules (#41304) The native rules are disabled by default in Bazel 9 via [`--incompatible_autoload_externally=`](https://github.com/bazelbuild/bazel/issues/23043) (empty list). Closes #41304 PiperOrigin-RevId: 859767890 --- bazel/cc_grpc_library.bzl | 3 ++- bazel/cython_library.bzl | 3 ++- bazel/grpc_build_system.bzl | 19 ++++++++++++------- tools/bazelify_tests/build_defs.bzl | 3 ++- .../test/bazel_build_with_bzlmod_linux.sh | 1 - 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/bazel/cc_grpc_library.bzl b/bazel/cc_grpc_library.bzl index 3f4f5347fbab3..9f7e21be00d22 100644 --- a/bazel/cc_grpc_library.bzl +++ b/bazel/cc_grpc_library.bzl @@ -14,6 +14,7 @@ """Generates and compiles C++ grpc stubs from proto_library rules.""" load("@com_google_protobuf//bazel:cc_proto_library.bzl", "cc_proto_library") +load("@rules_cc//cc:cc_library.bzl", "cc_library") load("@rules_proto//proto:defs.bzl", "proto_library") load("//bazel:generate_cc.bzl", "generate_cc") load("//bazel:protobuf.bzl", "well_known_proto_libs") @@ -112,7 +113,7 @@ def cc_grpc_library( **kwargs ) - native.cc_library( + cc_library( name = name, srcs = [":" + codegen_grpc_target], hdrs = [":" + codegen_grpc_target], diff --git a/bazel/cython_library.bzl b/bazel/cython_library.bzl index ed6ccc34acb7b..dc7f518e1105a 100644 --- a/bazel/cython_library.bzl +++ b/bazel/cython_library.bzl @@ -13,6 +13,7 @@ # limitations under the License. """Custom rules for gRPC Python""" +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") load("@rules_python//python:defs.bzl", "py_library") # Adapted with modifications from @@ -71,7 +72,7 @@ def pyx_library(name, deps = [], py_deps = [], srcs = [], **kwargs): for src in pyx_srcs: stem = src.split(".")[0] shared_object_name = stem + ".so" - native.cc_binary( + cc_binary( name = shared_object_name, srcs = [stem + ".cpp"], deps = deps + ["@local_config_python//:python_headers"], diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl index 6ee535f85814f..66d6368325c81 100644 --- a/bazel/grpc_build_system.bzl +++ b/bazel/grpc_build_system.bzl @@ -32,8 +32,13 @@ load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test") load("@build_bazel_rules_apple//apple/testing/default_runner:ios_test_runner.bzl", "ios_test_runner") load("@com_google_protobuf//bazel:cc_proto_library.bzl", "cc_proto_library") load("@com_google_protobuf//bazel:upb_proto_library.bzl", "upb_proto_library", "upb_proto_reflection_library") +load("@rules_cc//cc:cc_binary.bzl", "cc_binary") +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") load("@rules_proto//proto:defs.bzl", "proto_library") load("@rules_python//python:defs.bzl", "py_binary") +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") +load("@rules_shell//shell:sh_test.bzl", "sh_test") load("//bazel:cc_grpc_library.bzl", "cc_grpc_library") load("//bazel:copts.bzl", "GRPC_DEFAULT_COPTS") load("//bazel:experiments.bzl", "EXPERIMENTS", "EXPERIMENT_ENABLES", "EXPERIMENT_POLLERS") @@ -151,7 +156,7 @@ def grpc_cc_library( # See b/391433873. if "fuzztest" in external_deps and "grpc-fuzztest" not in tags: tags = tags + ["grpc-fuzztest"] - native.cc_library( + cc_library( name = name, srcs = srcs, defines = defines + @@ -186,7 +191,7 @@ def grpc_cc_library( ) def grpc_proto_plugin(name, srcs = [], deps = []): - native.cc_binary( + cc_binary( name = name + "_native", srcs = srcs, deps = deps, @@ -582,7 +587,7 @@ def grpc_cc_test(name, srcs = [], deps = [], external_deps = [], args = [], data **test_args ) - native.cc_library( + cc_library( name = "%s_TEST_LIBRARY" % name, testonly = 1, srcs = srcs, @@ -596,7 +601,7 @@ def grpc_cc_test(name, srcs = [], deps = [], external_deps = [], args = [], data fail("srcs changed") if poller_config["deps"] != core_deps: fail("deps changed: %r --> %r" % (deps, poller_config["deps"])) - native.cc_test( + cc_test( name = poller_config["name"], deps = ["%s_TEST_LIBRARY" % name], tags = poller_config["tags"], @@ -626,7 +631,7 @@ def grpc_cc_binary(name, srcs = [], deps = [], external_deps = [], args = [], da """ visibility = _update_visibility(visibility) copts = [] - native.cc_binary( + cc_binary( name = name, srcs = srcs, args = args, @@ -693,7 +698,7 @@ def grpc_sh_test(name, srcs = [], args = [], data = [], uses_polling = True, siz } for poller_config in expand_tests(name, srcs, [], tags, args, exclude_pollers, uses_polling, uses_event_engine, flaky): - native.sh_test( + sh_test( name = poller_config["name"], srcs = poller_config["srcs"], deps = poller_config["deps"], @@ -705,7 +710,7 @@ def grpc_sh_test(name, srcs = [], args = [], data = [], uses_polling = True, siz ) def grpc_sh_binary(name, srcs, data = []): - native.sh_binary( + sh_binary( name = name, srcs = srcs, data = data, diff --git a/tools/bazelify_tests/build_defs.bzl b/tools/bazelify_tests/build_defs.bzl index 05755816c3d26..0dbc37d0bcd33 100644 --- a/tools/bazelify_tests/build_defs.bzl +++ b/tools/bazelify_tests/build_defs.bzl @@ -17,6 +17,7 @@ Contains macros used for running bazelified tests. """ load("@bazel_toolchains//rules/exec_properties:exec_properties.bzl", "create_rbe_exec_properties_dict") +load("@rules_shell//shell:sh_test.bzl", "sh_test") load(":dockerimage_current_versions.bzl", "DOCKERIMAGE_CURRENT_VERSIONS") def _dockerized_sh_test(name, srcs = [], args = [], data = [], size = "medium", timeout = None, tags = [], exec_compatible_with = [], flaky = None, docker_image_version = None, docker_run_as_root = False, env = {}): @@ -59,7 +60,7 @@ def _dockerized_sh_test(name, srcs = [], args = [], data = [], size = "medium", "exec_properties": exec_properties, } - native.sh_test( + sh_test( **test_args ) diff --git a/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh b/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh index d5ce4145eb7f6..77b0d4abcc410 100755 --- a/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh +++ b/tools/bazelify_tests/test/bazel_build_with_bzlmod_linux.sh @@ -35,7 +35,6 @@ tools/bazel \ tools/bazel \ --bazelrc=tools/remote_build/linux_bzlmod.bazelrc \ test \ - --ignore_dev_dependency=false \ -- \ //test/core/config:all \ //test/core/util:all \ From 0fdadb6a1e86a05fa5dcfe91318686db1facd80d Mon Sep 17 00:00:00 2001 From: Akshit Patel Date: Thu, 22 Jan 2026 19:52:32 -0800 Subject: [PATCH 11/67] [WIP] Return arbitrary Metadata from promise based filters PiperOrigin-RevId: 859882156 --- .../chttp2/transport/chttp2_transport.cc | 137 +++++----- .../chttp2/transport/hpack_encoder.cc | 141 ++++++++--- .../chttp2/transport/hpack_encoder.h | 95 +++++++ src/core/lib/channel/promise_based_filter.cc | 20 +- test/core/end2end/grpc_core_end2end_test.bzl | 4 + .../core/end2end/tests/filter_causes_close.cc | 225 ++++++++++++++--- test/core/transport/chttp2/BUILD | 8 + .../transport/chttp2/hpack_encoder_test.cc | 235 ++++++++++++++++++ 8 files changed, 732 insertions(+), 133 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc index 11d600671b15f..420b0f4aacd38 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc @@ -2472,6 +2472,11 @@ void grpc_chttp2_cancel_stream( return; } + if (grpc_core::IsPromiseFilterSendCancelMetadataEnabled()) { + send_trailing_metadata.reset(); + } + GRPC_DCHECK(send_trailing_metadata == nullptr); + if (!due_to_error.ok() && !s->seen_error) { s->seen_error = true; } @@ -2659,8 +2664,7 @@ grpc_chttp2_transport::RemovedStreamHandle grpc_chttp2_mark_stream_closed( static void close_from_api( grpc_chttp2_transport* t, grpc_chttp2_stream* s, grpc_error_handle error, - bool tarpit, - GRPC_UNUSED grpc_core::ServerMetadataHandle send_trailing_metadata) { + bool tarpit, grpc_core::ServerMetadataHandle send_trailing_metadata) { grpc_status_code grpc_status; std::string message; grpc_error_get_status(error, s->deadline, &grpc_status, &message, nullptr, @@ -2672,9 +2676,9 @@ static void close_from_api( auto remove_stream_handle = grpc_chttp2_mark_stream_closed(t, s, 1, 1, error); grpc_core::MaybeTarpit( t, tarpit, - [error = std::move(error), - sent_initial_metadata = s->sent_initial_metadata, id = s->id, + [sent_initial_metadata = s->sent_initial_metadata, id = s->id, grpc_status, message = std::move(message), + send_trailing_metadata = std::move(send_trailing_metadata), remove_stream_handle = std::move(remove_stream_handle)](grpc_chttp2_transport* t) mutable { grpc_slice hdr; @@ -2682,6 +2686,9 @@ static void close_from_api( grpc_slice http_status_hdr; grpc_slice content_type_hdr; grpc_slice message_pfx; + size_t msg_len = message.length(); + grpc_core::Slice message_slice = + grpc_core::Slice::FromCopiedString(std::move(message)); uint8_t* p; uint32_t len = 0; @@ -2748,57 +2755,70 @@ static void close_from_api( len += static_cast GRPC_SLICE_LENGTH(content_type_hdr); } - status_hdr = GRPC_SLICE_MALLOC(15 + (grpc_status >= 10)); - p = GRPC_SLICE_START_PTR(status_hdr); - *p++ = 0x00; // literal header, not indexed - *p++ = 11; // len(grpc-status) - *p++ = 'g'; - *p++ = 'r'; - *p++ = 'p'; - *p++ = 'c'; - *p++ = '-'; - *p++ = 's'; - *p++ = 't'; - *p++ = 'a'; - *p++ = 't'; - *p++ = 'u'; - *p++ = 's'; - if (grpc_status < 10) { - *p++ = 1; - *p++ = static_cast('0' + grpc_status); + grpc_core::RawEncoder raw_encoder( + t->settings.peer().allow_true_binary_metadata()); + + if (grpc_core::IsPromiseFilterSendCancelMetadataEnabled()) { + raw_encoder.Encode(grpc_core::GrpcStatusMetadata(), grpc_status); + raw_encoder.Encode(grpc_core::GrpcMessageMetadata(), message_slice); + if (send_trailing_metadata != nullptr) { + send_trailing_metadata->Encode(&raw_encoder); + send_trailing_metadata.reset(); + } + len += raw_encoder.Length(); } else { - *p++ = 2; - *p++ = static_cast('0' + (grpc_status / 10)); - *p++ = static_cast('0' + (grpc_status % 10)); + status_hdr = GRPC_SLICE_MALLOC(15 + (grpc_status >= 10)); + p = GRPC_SLICE_START_PTR(status_hdr); + *p++ = 0x00; // literal header, not indexed + *p++ = 11; // len(grpc-status) + *p++ = 'g'; + *p++ = 'r'; + *p++ = 'p'; + *p++ = 'c'; + *p++ = '-'; + *p++ = 's'; + *p++ = 't'; + *p++ = 'a'; + *p++ = 't'; + *p++ = 'u'; + *p++ = 's'; + if (grpc_status < 10) { + *p++ = 1; + *p++ = static_cast('0' + grpc_status); + } else { + *p++ = 2; + *p++ = static_cast('0' + (grpc_status / 10)); + *p++ = static_cast('0' + (grpc_status % 10)); + } + GRPC_CHECK(p == GRPC_SLICE_END_PTR(status_hdr)); + len += static_cast GRPC_SLICE_LENGTH(status_hdr); + + GRPC_CHECK(msg_len <= UINT32_MAX); + grpc_core::VarintWriter<1> msg_len_writer( + static_cast(msg_len)); + message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_writer.length()); + p = GRPC_SLICE_START_PTR(message_pfx); + *p++ = 0x00; // literal header, not indexed + *p++ = 12; // len(grpc-message) + *p++ = 'g'; + *p++ = 'r'; + *p++ = 'p'; + *p++ = 'c'; + *p++ = '-'; + *p++ = 'm'; + *p++ = 'e'; + *p++ = 's'; + *p++ = 's'; + *p++ = 'a'; + *p++ = 'g'; + *p++ = 'e'; + msg_len_writer.Write(0, p); + p += msg_len_writer.length(); + GRPC_CHECK(p == GRPC_SLICE_END_PTR(message_pfx)); + len += static_cast GRPC_SLICE_LENGTH(message_pfx); + len += static_cast(msg_len); } - GRPC_CHECK(p == GRPC_SLICE_END_PTR(status_hdr)); - len += static_cast GRPC_SLICE_LENGTH(status_hdr); - - size_t msg_len = message.length(); - GRPC_CHECK(msg_len <= UINT32_MAX); - grpc_core::VarintWriter<1> msg_len_writer( - static_cast(msg_len)); - message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_writer.length()); - p = GRPC_SLICE_START_PTR(message_pfx); - *p++ = 0x00; // literal header, not indexed - *p++ = 12; // len(grpc-message) - *p++ = 'g'; - *p++ = 'r'; - *p++ = 'p'; - *p++ = 'c'; - *p++ = '-'; - *p++ = 'm'; - *p++ = 'e'; - *p++ = 's'; - *p++ = 's'; - *p++ = 'a'; - *p++ = 'g'; - *p++ = 'e'; - msg_len_writer.Write(0, p); - p += msg_len_writer.length(); - GRPC_CHECK(p == GRPC_SLICE_END_PTR(message_pfx)); - len += static_cast GRPC_SLICE_LENGTH(message_pfx); - len += static_cast(msg_len); + GRPC_DCHECK(send_trailing_metadata == nullptr); hdr = GRPC_SLICE_MALLOC(9); p = GRPC_SLICE_START_PTR(hdr); @@ -2819,10 +2839,13 @@ static void close_from_api( grpc_slice_buffer_add(&t->qbuf, http_status_hdr); grpc_slice_buffer_add(&t->qbuf, content_type_hdr); } - grpc_slice_buffer_add(&t->qbuf, status_hdr); - grpc_slice_buffer_add(&t->qbuf, message_pfx); - grpc_slice_buffer_add(&t->qbuf, - grpc_slice_from_cpp_string(std::move(message))); + if (grpc_core::IsPromiseFilterSendCancelMetadataEnabled()) { + std::move(raw_encoder).Flush(&t->qbuf); + } else { + grpc_slice_buffer_add(&t->qbuf, status_hdr); + grpc_slice_buffer_add(&t->qbuf, message_pfx); + grpc_slice_buffer_add(&t->qbuf, message_slice.TakeCSlice()); + } grpc_chttp2_reset_ping_clock(t); grpc_chttp2_add_rst_stream_to_next_write( t, id, static_cast(Http2ErrorCode::kNoError), nullptr); diff --git a/src/core/ext/transport/chttp2/transport/hpack_encoder.cc b/src/core/ext/transport/chttp2/transport/hpack_encoder.cc index 57aec834863e9..69b311aef2c7f 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +++ b/src/core/ext/transport/chttp2/transport/hpack_encoder.cc @@ -20,11 +20,14 @@ #include #include +#include #include #include #include +#include +#include "src/core/call/metadata_batch.h" #include "src/core/ext/transport/chttp2/transport/bin_encoder.h" #include "src/core/ext/transport/chttp2/transport/hpack_constants.h" #include "src/core/ext/transport/chttp2/transport/hpack_encoder_table.h" @@ -246,72 +249,77 @@ class StringKey { } // namespace namespace hpack_encoder_detail { -void Encoder::EmitIndexed(uint32_t elem_index) { - VarintWriter<1> w(elem_index); - w.Write(0x80, output_.AddTiny(w.length())); -} - -uint32_t Encoder::EmitLitHdrWithNonBinaryStringKeyIncIdx(Slice key_slice, - Slice value_slice) { +uint32_t HPackWriter::EmitLitHdrWithNonBinaryStringKeyIncIdx( + Slice key_slice, Slice value_slice, SliceBuffer& output, + HPackEncoderTable& table) { auto key_len = key_slice.length(); auto value_len = value_slice.length(); StringKey key(std::move(key_slice)); - key.WritePrefix(0x40, output_.AddTiny(key.prefix_length())); - output_.Append(key.key()); + key.WritePrefix(0x40, output.AddTiny(key.prefix_length())); + output.Append(key.key()); NonBinaryStringValue emit(std::move(value_slice)); - emit.WritePrefix(output_.AddTiny(emit.prefix_length())); + emit.WritePrefix(output.AddTiny(emit.prefix_length())); // Allocate an index in the hpack table for this newly emitted entry. // (we do so here because we know the length of the key and value) - uint32_t index = compressor_->table_.AllocateIndex( - key_len + value_len + hpack_constants::kEntryOverhead); - output_.Append(emit.data()); + uint32_t index = table.AllocateIndex(key_len + value_len + + hpack_constants::kEntryOverhead); + output.Append(emit.data()); return index; } -void Encoder::EmitLitHdrWithBinaryStringKeyNotIdx(Slice key_slice, - Slice value_slice) { +void HPackWriter::EmitLitHdrWithBinaryStringKeyNotIdx( + Slice key_slice, Slice value_slice, SliceBuffer& output, + bool use_true_binary_metadata) { StringKey key(std::move(key_slice)); - key.WritePrefix(0x00, output_.AddTiny(key.prefix_length())); - output_.Append(key.key()); - BinaryStringValue emit(std::move(value_slice), use_true_binary_metadata_); - emit.WritePrefix(output_.AddTiny(emit.prefix_length())); - output_.Append(emit.data()); + key.WritePrefix(0x00, output.AddTiny(key.prefix_length())); + output.Append(key.key()); + BinaryStringValue emit(std::move(value_slice), use_true_binary_metadata); + emit.WritePrefix(output.AddTiny(emit.prefix_length())); + output.Append(emit.data()); } -uint32_t Encoder::EmitLitHdrWithBinaryStringKeyIncIdx(Slice key_slice, - Slice value_slice) { +uint32_t HPackWriter::EmitLitHdrWithBinaryStringKeyIncIdx( + Slice key_slice, Slice value_slice, SliceBuffer& output, + HPackEncoderTable& table, bool use_true_binary_metadata) { auto key_len = key_slice.length(); StringKey key(std::move(key_slice)); - key.WritePrefix(0x40, output_.AddTiny(key.prefix_length())); - output_.Append(key.key()); - BinaryStringValue emit(std::move(value_slice), use_true_binary_metadata_); - emit.WritePrefix(output_.AddTiny(emit.prefix_length())); + key.WritePrefix(0x40, output.AddTiny(key.prefix_length())); + output.Append(key.key()); + BinaryStringValue emit(std::move(value_slice), use_true_binary_metadata); + emit.WritePrefix(output.AddTiny(emit.prefix_length())); // Allocate an index in the hpack table for this newly emitted entry. // (we do so here because we know the length of the key and value) - uint32_t index = compressor_->table_.AllocateIndex( - key_len + emit.hpack_length() + hpack_constants::kEntryOverhead); - output_.Append(emit.data()); + uint32_t index = table.AllocateIndex(key_len + emit.hpack_length() + + hpack_constants::kEntryOverhead); + output.Append(emit.data()); return index; } -void Encoder::EmitLitHdrWithBinaryStringKeyNotIdx(uint32_t key_index, - Slice value_slice) { - BinaryStringValue emit(std::move(value_slice), use_true_binary_metadata_); +void HPackWriter::EmitLitHdrWithBinaryStringKeyNotIdx( + uint32_t key_index, Slice value_slice, SliceBuffer& output, + bool use_true_binary_metadata) { + BinaryStringValue emit(std::move(value_slice), use_true_binary_metadata); VarintWriter<4> key(key_index); - uint8_t* data = output_.AddTiny(key.length() + emit.prefix_length()); + uint8_t* data = output.AddTiny(key.length() + emit.prefix_length()); key.Write(0x00, data); emit.WritePrefix(data + key.length()); - output_.Append(emit.data()); + output.Append(emit.data()); } -void Encoder::EmitLitHdrWithNonBinaryStringKeyNotIdx(Slice key_slice, - Slice value_slice) { +void HPackWriter::EmitLitHdrWithNonBinaryStringKeyNotIdx(Slice key_slice, + Slice value_slice, + SliceBuffer& output) { StringKey key(std::move(key_slice)); - key.WritePrefix(0x00, output_.AddTiny(key.prefix_length())); - output_.Append(key.key()); + key.WritePrefix(0x00, output.AddTiny(key.prefix_length())); + output.Append(key.key()); NonBinaryStringValue emit(std::move(value_slice)); - emit.WritePrefix(output_.AddTiny(emit.prefix_length())); - output_.Append(emit.data()); + emit.WritePrefix(output.AddTiny(emit.prefix_length())); + output.Append(emit.data()); +} + +void Encoder::EmitIndexed(uint32_t elem_index) { + VarintWriter<1> w(elem_index); + w.Write(0x80, output_.AddTiny(w.length())); } void Encoder::AdvertiseTableSizeChange() { @@ -513,4 +521,57 @@ Encoder::Encoder(HPackCompressor* compressor, bool use_true_binary_metadata, } } // namespace hpack_encoder_detail + +RawEncoder::RawEncoder(bool is_true_binary_metadata) + : is_true_binary_metadata_(is_true_binary_metadata) {} + +void RawEncoder::Encode(const Slice& key, const Slice& value) { + SliceBuffer temp_buffer; + if (absl::EndsWith(key.as_string_view(), "-bin")) { + hpack_encoder_detail::HPackWriter::EmitLitHdrWithBinaryStringKeyNotIdx( + key.Ref(), value.Ref(), temp_buffer, is_true_binary_metadata_); + } else { + hpack_encoder_detail::HPackWriter::EmitLitHdrWithNonBinaryStringKeyNotIdx( + key.Ref(), value.Ref(), temp_buffer); + } + MaybeAppend(std::move(temp_buffer)); +} + +void RawEncoder::Encode(GrpcStatusMetadata, grpc_status_code status) { + if (std::exchange(status_encoded_, true)) return; + SliceBuffer temp_buffer; + hpack_encoder_detail::HPackWriter::EmitLitHdrWithNonBinaryStringKeyNotIdx( + Slice::FromCopiedString(GrpcStatusMetadata::key()), + MetadataValueAsSlice(status).Ref(), temp_buffer); + MaybeAppend(std::move(temp_buffer)); +} + +void RawEncoder::Encode(GrpcMessageMetadata, const Slice& message) { + if (std::exchange(message_encoded_, true)) return; + SliceBuffer temp_buffer; + hpack_encoder_detail::HPackWriter::EmitLitHdrWithNonBinaryStringKeyNotIdx( + Slice::FromCopiedString(GrpcMessageMetadata::key()), message.Ref(), + temp_buffer); + MaybeAppend(std::move(temp_buffer)); +} + +void RawEncoder::Flush(grpc_slice_buffer* output_buffer) && { + grpc_slice_buffer_move_into(buffer_.c_slice_buffer(), output_buffer); +} + +bool RawEncoder::CheckLength(const size_t length) { + return (length <= kMaxKeyValueSize) && (Length() <= kMaxSize - length); +} + +void RawEncoder::MaybeAppend(SliceBuffer&& buffer) { + if (CheckLength(buffer.Length())) { + buffer_.TakeAndAppend(buffer); + } else { + LOG(ERROR) + << "Ignoring key value pair due to size limit. Current buffer size: " + << buffer_.Length() << " new key value size: " << buffer.Length() + << " KeyValueSizeLimit: " << kMaxKeyValueSize + << " TotalSizeLimit: " << kMaxSize; + } +} } // namespace grpc_core diff --git a/src/core/ext/transport/chttp2/transport/hpack_encoder.h b/src/core/ext/transport/chttp2/transport/hpack_encoder.h index a31ead5de7b82..369fd79b07a09 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_encoder.h +++ b/src/core/ext/transport/chttp2/transport/hpack_encoder.h @@ -50,6 +50,26 @@ class HPackCompressor; namespace hpack_encoder_detail { +struct HPackWriter { + GRPC_MUST_USE_RESULT + static uint32_t EmitLitHdrWithNonBinaryStringKeyIncIdx( + Slice key_slice, Slice value_slice, SliceBuffer& output, + HPackEncoderTable& table); + GRPC_MUST_USE_RESULT + static uint32_t EmitLitHdrWithBinaryStringKeyIncIdx( + Slice key_slice, Slice value_slice, SliceBuffer& output, + HPackEncoderTable& table, bool use_true_binary_metadata); + static void EmitLitHdrWithBinaryStringKeyNotIdx( + Slice key_slice, Slice value_slice, SliceBuffer& output, + bool use_true_binary_metadata); + static void EmitLitHdrWithBinaryStringKeyNotIdx( + uint32_t key_index, Slice value_slice, SliceBuffer& output, + bool use_true_binary_metadata); + static void EmitLitHdrWithNonBinaryStringKeyNotIdx(Slice key_slice, + Slice value_slice, + SliceBuffer& output); +}; + class Encoder { public: Encoder(HPackCompressor* compressor, bool use_true_binary_metadata, @@ -407,10 +427,85 @@ void Encoder::Encode(MetadataTrait, EncodeWith(MetadataTrait(), value, this); } +inline uint32_t Encoder::EmitLitHdrWithNonBinaryStringKeyIncIdx( + Slice key_slice, Slice value_slice) { + return HPackWriter::EmitLitHdrWithNonBinaryStringKeyIncIdx( + std::move(key_slice), std::move(value_slice), output_, + compressor_->table_); +} + +inline void Encoder::EmitLitHdrWithBinaryStringKeyNotIdx(Slice key_slice, + Slice value_slice) { + HPackWriter::EmitLitHdrWithBinaryStringKeyNotIdx( + std::move(key_slice), std::move(value_slice), output_, + use_true_binary_metadata_); +} + +inline uint32_t Encoder::EmitLitHdrWithBinaryStringKeyIncIdx( + Slice key_slice, Slice value_slice) { + return HPackWriter::EmitLitHdrWithBinaryStringKeyIncIdx( + std::move(key_slice), std::move(value_slice), output_, + compressor_->table_, use_true_binary_metadata_); +} + +inline void Encoder::EmitLitHdrWithBinaryStringKeyNotIdx(uint32_t key_index, + Slice value_slice) { + HPackWriter::EmitLitHdrWithBinaryStringKeyNotIdx( + key_index, std::move(value_slice), output_, use_true_binary_metadata_); +} + +inline void Encoder::EmitLitHdrWithNonBinaryStringKeyNotIdx(Slice key_slice, + Slice value_slice) { + HPackWriter::EmitLitHdrWithNonBinaryStringKeyNotIdx( + std::move(key_slice), std::move(value_slice), output_); +} + inline HPackEncoderTable& Encoder::hpack_table() { return compressor_->table_; } } // namespace hpack_encoder_detail +// Class to encode metadata in uncompressed and un-indexed form. +class RawEncoder { + public: + explicit RawEncoder(bool is_true_binary_metadata); + + void Encode(const Slice& key, const Slice& value); + + // Status MUST be encoded at most once. + void Encode(GrpcStatusMetadata, grpc_status_code status); + + // Message MUST be encoded at most once. + void Encode(GrpcMessageMetadata, const Slice& message); + + template + void Encode(const MetadataTraits&, + const typename MetadataTraits::ValueType& value); + + uint32_t Length() const { return buffer_.Length(); } + void Flush(grpc_slice_buffer* output_buffer) &&; + + private: + bool CheckLength(size_t length); + void MaybeAppend(SliceBuffer&& buffer); + + // Size limit on all the key values combined. This is set to the minimum + // frame size that HTTP/2 can send. This is done to avoid sending a + // CONTINUATION frame in all cases. + static constexpr uint32_t kMaxSize = (1 << 14u); + static constexpr uint32_t kMaxKeyValueSize = /*2kb*/ 2 * 1024u; + bool status_encoded_ = false; + bool message_encoded_ = false; + const bool is_true_binary_metadata_ = false; + SliceBuffer buffer_; +}; + +template +void RawEncoder::Encode(const MetadataTraits&, + const typename MetadataTraits::ValueType& value) { + Encode(Slice::FromCopiedString(MetadataTraits::key()), + MetadataValueAsSlice(value).Ref()); +} + } // namespace grpc_core #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HPACK_ENCODER_H diff --git a/src/core/lib/channel/promise_based_filter.cc b/src/core/lib/channel/promise_based_filter.cc index 8686ccaa77852..b7eb4164e1b93 100644 --- a/src/core/lib/channel/promise_based_filter.cc +++ b/src/core/lib/channel/promise_based_filter.cc @@ -2161,9 +2161,9 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) { } // Handle cancellation. -void ServerCallData::Completed( - grpc_error_handle error, GRPC_UNUSED ServerMetadataHandle trailing_metadata, - bool tarpit_cancellation, Flusher* flusher) { +void ServerCallData::Completed(grpc_error_handle error, + ServerMetadataHandle trailing_metadata, + bool tarpit_cancellation, Flusher* flusher) { GRPC_TRACE_VLOG(channel, 2) << LogTag() << "ServerCallData::Completed: send_trailing_state=" << StateString(send_trailing_state_) << " send_initial_state=" @@ -2190,6 +2190,10 @@ void ServerCallData::Completed( batch->cancel_stream = true; batch->payload->cancel_stream.cancel_error = error; batch->payload->cancel_stream.tarpit = tarpit_cancellation; + if (IsPromiseFilterSendCancelMetadataEnabled()) { + batch->payload->cancel_stream.send_trailing_metadata = + std::move(trailing_metadata); + } flusher->Resume(batch); } break; @@ -2530,8 +2534,14 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) { break; case SendTrailingState::kInitial: { GRPC_CHECK(*md->get_pointer(GrpcStatusMetadata()) != GRPC_STATUS_OK); - Completed(StatusFromMetadata(*md), /*trailing_metadata=*/nullptr, - md->get(GrpcTarPit()).has_value(), flusher); + if (IsPromiseFilterSendCancelMetadataEnabled()) { + absl::Status status = StatusFromMetadata(*md); + bool tar_pit_set = md->get(GrpcTarPit()).has_value(); + Completed(std::move(status), std::move(md), tar_pit_set, flusher); + } else { + Completed(StatusFromMetadata(*md), /*trailing_metadata=*/nullptr, + md->get(GrpcTarPit()).has_value(), flusher); + } } break; case SendTrailingState::kCancelled: // Nothing to do. diff --git a/test/core/end2end/grpc_core_end2end_test.bzl b/test/core/end2end/grpc_core_end2end_test.bzl index be357c6716c75..e05723aa33c83 100644 --- a/test/core/end2end/grpc_core_end2end_test.bzl +++ b/test/core/end2end/grpc_core_end2end_test.bzl @@ -32,6 +32,7 @@ _DEPS = [ "//test/core/end2end:cq_verifier", "//test/core/end2end:http_proxy", "//test/core/end2end:proxy", + "//test/core/call:batch_builder", "//:call_combiner", "//:call_tracer", "//:channel_arg_names", @@ -57,6 +58,9 @@ _DEPS = [ "//:server", "//:stats", "//src/core:arena_promise", + "//src/core:call_filters", + "//src/core:message", + "//src/core:metadata", "//src/core:bitset", "//src/core:channel_args", "//src/core:channel_fwd", diff --git a/test/core/end2end/tests/filter_causes_close.cc b/test/core/end2end/tests/filter_causes_close.cc index e6008018f924c..af53ba105c2c8 100644 --- a/test/core/end2end/tests/filter_causes_close.cc +++ b/test/core/end2end/tests/filter_causes_close.cc @@ -20,8 +20,13 @@ #include #include +#include +#include #include +#include "src/core/call/call_filters.h" +#include "src/core/call/message.h" +#include "src/core/call/metadata.h" #include "src/core/call/metadata_batch.h" #include "src/core/config/core_configuration.h" #include "src/core/lib/channel/channel_fwd.h" @@ -30,42 +35,114 @@ #include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/promise/arena_promise.h" +#include "src/core/lib/promise/context.h" #include "src/core/lib/promise/promise.h" +#include "src/core/lib/slice/slice.h" #include "src/core/lib/surface/channel_stack_type.h" #include "src/core/lib/transport/transport.h" #include "src/core/util/debug_location.h" #include "src/core/util/status_helper.h" #include "src/core/util/time.h" +#include "test/core/call/batch_builder.h" #include "test/core/end2end/end2end_tests.h" #include "gtest/gtest.h" +#include "absl/log/log.h" #include "absl/status/status.h" +#include "absl/strings/string_view.h" namespace grpc_core { namespace { -//****************************************************************************** -// Test filter - always closes incoming requests -// +constexpr absl::string_view kFailureMode = "failure-mode"; +constexpr absl::string_view kGoodMessage = "foo"; +constexpr absl::string_view kBadMessage = "bar"; + +//////////////////////////////////////////////////////////////////////////////// +// Test filter that fails on receiving a message with kBadMessage. -class TestFilter : public ImplementChannelFilter { +class TestFilterFailOnMessage + : public ImplementChannelFilter { public: static const grpc_channel_filter kFilter; - static absl::string_view TypeName() { return "filter_causes_close"; } - static absl::StatusOr> Create( + static absl::string_view TypeName() { + return "filter_causes_close_on_message"; + } + static absl::StatusOr> Create( const ChannelArgs&, ChannelFilter::Args) { - return std::make_unique(); + return std::make_unique(); } class Call { public: - absl::Status OnClientInitialMetadata(ClientMetadata&) { - return grpc_error_set_int( - absl::PermissionDeniedError("Failure that's not preventable."), - StatusIntProperty::kRpcStatus, GRPC_STATUS_PERMISSION_DENIED); - } + static const NoInterceptor OnClientInitialMetadata; static const NoInterceptor OnServerInitialMetadata; static const NoInterceptor OnServerTrailingMetadata; + ServerMetadataHandle OnClientToServerMessage(const Message& message) { + if (message.payload()->JoinIntoString() == kGoodMessage) { + return nullptr; + } + + auto md = GetContext()->MakePooled(); + md->Set(GrpcStatusMetadata(), GRPC_STATUS_PERMISSION_DENIED); + md->Set(GrpcMessageMetadata(), + Slice::FromStaticString("Failure that's not preventable.")); + md->Set(HostMetadata(), Slice::FromStaticString("test-host")); + md->Set(GrpcTarPit()); + md->Append( + "test-failure", Slice::FromStaticString("Failing as requested."), + [](absl::string_view, const Slice&) { + LOG(FATAL) + << "Appending test_failure on the server should never happen."; + }); + md->Append( + "test-failure-bin", + Slice::FromStaticString("Failing as requested binary."), + [](absl::string_view, const Slice&) { + LOG(FATAL) + << "Appending test_failure on the server should never happen."; + }); + return md; + } + static const NoInterceptor OnClientToServerHalfClose; + static const NoInterceptor OnServerToClientMessage; + static const NoInterceptor OnFinalize; + channelz::PropertyList ChannelzProperties() { + return channelz::PropertyList(); + } + }; +}; + +//////////////////////////////////////////////////////////////////////////////// +// Test filter that fails on client initial metadata with kFailureMode. + +class TestFilterFailOnClientInitialMetadata + : public ImplementChannelFilter { + public: + static const grpc_channel_filter kFilter; + static absl::string_view TypeName() { + return "filter_causes_close_on_client_initial_metadata"; + } + static absl::StatusOr> + Create(const ChannelArgs&, ChannelFilter::Args) { + return std::make_unique(); + } + + class Call { + public: + absl::Status OnClientInitialMetadata(ClientMetadata& md) { + std::string failure_mode_buffer; + std::optional failure_mode = + md.GetStringValue(kFailureMode, &failure_mode_buffer); + if (failure_mode.has_value() && *failure_mode == "true") { + return grpc_error_set_int( + absl::PermissionDeniedError("More failure that's not preventable."), + StatusIntProperty::kRpcStatus, GRPC_STATUS_PERMISSION_DENIED); + } + return absl::OkStatus(); + } static const NoInterceptor OnClientToServerMessage; + static const NoInterceptor OnServerInitialMetadata; + static const NoInterceptor OnServerTrailingMetadata; static const NoInterceptor OnClientToServerHalfClose; static const NoInterceptor OnServerToClientMessage; static const NoInterceptor OnFinalize; @@ -75,36 +152,122 @@ class TestFilter : public ImplementChannelFilter { }; }; -const NoInterceptor TestFilter::Call::OnServerInitialMetadata; -const NoInterceptor TestFilter::Call::OnServerTrailingMetadata; -const NoInterceptor TestFilter::Call::OnClientToServerMessage; -const NoInterceptor TestFilter::Call::OnClientToServerHalfClose; -const NoInterceptor TestFilter::Call::OnServerToClientMessage; -const NoInterceptor TestFilter::Call::OnFinalize; +const NoInterceptor + TestFilterFailOnClientInitialMetadata::Call::OnClientToServerMessage; +const NoInterceptor + TestFilterFailOnClientInitialMetadata::Call::OnServerInitialMetadata; +const NoInterceptor + TestFilterFailOnClientInitialMetadata::Call::OnServerTrailingMetadata; +const NoInterceptor + TestFilterFailOnClientInitialMetadata::Call::OnClientToServerHalfClose; +const NoInterceptor + TestFilterFailOnClientInitialMetadata::Call::OnServerToClientMessage; +const NoInterceptor TestFilterFailOnClientInitialMetadata::Call::OnFinalize; -const grpc_channel_filter TestFilter::kFilter = - MakePromiseBasedFilter(); +const NoInterceptor TestFilterFailOnMessage::Call::OnClientInitialMetadata; +const NoInterceptor TestFilterFailOnMessage::Call::OnServerInitialMetadata; +const NoInterceptor TestFilterFailOnMessage::Call::OnServerTrailingMetadata; +const NoInterceptor TestFilterFailOnMessage::Call::OnClientToServerHalfClose; +const NoInterceptor TestFilterFailOnMessage::Call::OnServerToClientMessage; +const NoInterceptor TestFilterFailOnMessage::Call::OnFinalize; -CORE_END2END_TEST(CoreEnd2endTests, FilterCausesClose) { - CoreConfiguration::RegisterEphemeralBuilder( - [](CoreConfiguration::Builder* builder) { - builder->channel_init()->RegisterFilter( - GRPC_SERVER_CHANNEL); - }); - auto c = NewClientCall("/foo").Timeout(Duration::Seconds(5)).Create(); +const grpc_channel_filter TestFilterFailOnClientInitialMetadata::kFilter = + MakePromiseBasedFilter(); + +const grpc_channel_filter TestFilterFailOnMessage::kFilter = + MakePromiseBasedFilter(); + +/////////////////////////////////////////////////////////////////////////////// +// Tests + +// Test to verify that the server can close the call when a filter fails. +// Also verifies that the server sends trailing metadata with the failed +// status and message to the client. +void FilterCloseOnInitialMetadata(CoreEnd2endTest& test) { + auto c = test.NewClientCall("/foo").Timeout(Duration::Seconds(5)).Create(); IncomingStatusOnClient server_status; IncomingMetadata server_initial_metadata; c.NewBatch(1) - .SendInitialMetadata({}) - .SendMessage("foo") + .SendInitialMetadata({{kFailureMode, "true"}}) + .SendMessage(kGoodMessage) .SendCloseFromClient() .RecvInitialMetadata(server_initial_metadata) .RecvStatusOnClient(server_status); - Expect(1, true); - Step(); + test.Expect(1, true); + test.Step(); + + EXPECT_EQ(server_status.status(), GRPC_STATUS_PERMISSION_DENIED); + EXPECT_EQ(server_status.message(), "More failure that's not preventable."); +} + +// Test to verify that the server can close the call when a filter fails. +// Also verifies that the cancellation is propagated through the filters and +// the metadata fields set in the filter are sent back to the client. +void FilterCloseOnMessage(CoreEnd2endTest& test) { + auto c = test.NewClientCall("/foo").Timeout(Duration::Seconds(10)).Create(); + + IncomingStatusOnClient server_status; + IncomingMetadata server_initial_metadata; + IncomingMetadata server_trailing_metadata; + c.NewBatch(1) + .SendInitialMetadata({{kFailureMode, "false"}}) + .RecvInitialMetadata(server_initial_metadata) + .RecvStatusOnClient(server_status); + + auto s = test.RequestCall(100); + test.Expect(100, true); + test.Step(); + + IncomingMessage server_message; + s.NewBatch(101).RecvMessage(server_message); + c.NewBatch(2).SendMessage(kGoodMessage); + test.Expect(2, true); + test.Expect(101, true); + test.Step(); + + IncomingMessage server_message_2; + s.NewBatch(102).RecvMessage(server_message_2); + c.NewBatch(3).SendMessage(kBadMessage); + // This behavior is caused by the fact that in case of proxy, on getting the + // kBadMessage, the proxy (server) filter fails with the expected error + // (invokes recv_message callback with an error) and sends expected trailing + // metadata back to the client. But the proxy (client) sends a RST_STREAM to + // the server to close the stream. When this happens, the server invokes + // recv_message callback with an absl::OkStatus() and hence the RecvMessage + // op does not fail. + bool supports_request_proxying = + test.test_config()->feature_mask & FEATURE_MASK_SUPPORTS_REQUEST_PROXYING; + test.Expect(102, supports_request_proxying); + test.Expect(3, true); + test.Expect(1, true); + test.Step(); EXPECT_EQ(server_status.status(), GRPC_STATUS_PERMISSION_DENIED); EXPECT_EQ(server_status.message(), "Failure that's not preventable."); + EXPECT_EQ(server_status.GetTrailingMetadata("test-failure"), + "Failing as requested."); + EXPECT_EQ(server_status.GetTrailingMetadata("test-failure-bin"), + "Failing as requested binary."); + EXPECT_EQ(server_status.GetTrailingMetadata(HostMetadata::key()), + "test-host"); +} + +CORE_END2END_TEST(CoreEnd2endTests, FilterCausesClose) { + CoreConfiguration::RegisterEphemeralBuilder( + [](CoreConfiguration::Builder* builder) { + builder->channel_init()->RegisterFilter( + GRPC_SERVER_CHANNEL); + builder->channel_init() + ->RegisterFilter( + GRPC_SERVER_CHANNEL); + }); + + FilterCloseOnInitialMetadata(*this); + if (IsPromiseFilterSendCancelMetadataEnabled()) { + FilterCloseOnMessage(*this); + } } } // namespace diff --git a/test/core/transport/chttp2/BUILD b/test/core/transport/chttp2/BUILD index a05fa975afc25..64be73575d166 100644 --- a/test/core/transport/chttp2/BUILD +++ b/test/core/transport/chttp2/BUILD @@ -449,6 +449,9 @@ grpc_cc_test( external_deps = [ "absl/log:log", "gtest", + "absl/functional:any_invocable", + "absl/strings:string_view", + "absl/strings", ], tags = ["hpack_test"], uses_event_engine = False, @@ -459,12 +462,17 @@ grpc_cc_test( "//:gpr", "//:grpc", "//:hpack_encoder", + "//:hpack_parser", "//:ref_counted_ptr", "//src/core:arena", "//src/core:event_engine_memory_allocator", "//src/core:grpc_check", "//src/core:memory_quota", + "//src/core:metadata_batch", "//src/core:resource_quota", + "//src/core:shared_bit_gen", + "//src/core:slice", + "//src/core:status_helper", "//test/core/test_util:grpc_test_util", "//test/core/test_util:grpc_test_util_base", ], diff --git a/test/core/transport/chttp2/hpack_encoder_test.cc b/test/core/transport/chttp2/hpack_encoder_test.cc index 6bf966902fb97..aa5c56bdf44a8 100644 --- a/test/core/transport/chttp2/hpack_encoder_test.cc +++ b/test/core/transport/chttp2/hpack_encoder_test.cc @@ -20,27 +20,39 @@ #include #include +#include #include #include #include #include +#include #include +#include #include +#include +#include "src/core/call/metadata_batch.h" +#include "src/core/ext/transport/chttp2/transport/hpack_parser.h" #include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/resource_quota/arena.h" #include "src/core/lib/resource_quota/memory_quota.h" #include "src/core/lib/resource_quota/resource_quota.h" +#include "src/core/lib/slice/slice.h" #include "src/core/util/grpc_check.h" #include "src/core/util/ref_counted_ptr.h" +#include "src/core/util/shared_bit_gen.h" +#include "src/core/util/status_helper.h" #include "test/core/test_util/parse_hexstring.h" #include "test/core/test_util/slice_splitter.h" #include "test/core/test_util/test_config.h" #include "gmock/gmock.h" #include "gtest/gtest.h" +#include "absl/functional/any_invocable.h" #include "absl/log/log.h" +#include "absl/strings/str_cat.h" +#include "absl/strings/string_view.h" grpc_core::HPackCompressor* g_compressor; grpc_core::Http2ZTraceCollector* g_ztrace_collector = @@ -421,6 +433,229 @@ TEST(HpackEncoderTest, EncodeBinaryAsTrueBinary) { EXPECT_EQ(compressor.test_only_table_size(), 114); } +namespace { +void CreateHeaderFrame(grpc_core::RawEncoder encoder, + grpc_slice_buffer* output) { + uint32_t len = encoder.Length(); + grpc_slice_buffer body; + grpc_slice_buffer_init(&body); + std::move(encoder).Flush(&body); + + grpc_slice hdr = GRPC_SLICE_MALLOC(9); + uint8_t* p = GRPC_SLICE_START_PTR(hdr); + *p++ = static_cast(len >> 16); + *p++ = static_cast(len >> 8); + *p++ = static_cast(len); + *p++ = GRPC_CHTTP2_FRAME_HEADER; + *p++ = GRPC_CHTTP2_DATA_FLAG_END_STREAM | GRPC_CHTTP2_DATA_FLAG_END_HEADERS; + *p++ = 0; + *p++ = 0; + *p++ = 0; + *p++ = 1; // Stream ID 1 + + grpc_slice_buffer_add(output, hdr); + grpc_slice_buffer_move_into(&body, output); + grpc_slice_buffer_destroy(&body); + verify_frames(*output, /*header_is_eof=*/true); +} + +void ParseHeaderFrame(grpc_slice_buffer* frame, grpc_metadata_batch* batch, + const bool is_client = true) { + grpc_core::HPackParser parser; + grpc_core::HPackParser::LogInfo log_info{ + /*stream_id=*/1, grpc_core::HPackParser::LogInfo::kHeaders, is_client}; + parser.BeginFrame(batch, /*metadata_size_soft_limit=*/1024u * 1024u, + /*metadata_size_hard_limit=*/1024u * 1024u, + grpc_core::HPackParser::Boundary::EndOfStream, + grpc_core::HPackParser::Priority::None, log_info); + + grpc_slice_buffer header_trash; + grpc_slice_buffer_init(&header_trash); + if (frame->length >= 9) { + grpc_slice_buffer_move_first(frame, 9, &header_trash); + } else { + // Should fail + FAIL() << "Frame too short"; + } + grpc_slice_buffer_destroy(&header_trash); + + for (size_t i = 0; i < frame->count; i++) { + grpc_error_handle err = + parser.Parse(frame->slices[i], i == frame->count - 1, + grpc_core::SharedBitGen(), nullptr); + EXPECT_TRUE(err.ok()) << grpc_core::StatusToString(err); + } + parser.FinishFrame(); +} +constexpr absl::string_view kMetadataValue = "value"; +constexpr absl::string_view kMetadatakey = "key"; +constexpr absl::string_view kMetadatabinarykey = "key-bin"; + +void EncodeAndParse(grpc_core::RawEncoder&& encoder, grpc_metadata_batch* b) { + grpc_slice_buffer frame; + grpc_slice_buffer_init(&frame); + CreateHeaderFrame(std::move(encoder), &frame); + ParseHeaderFrame(&frame, b); + grpc_slice_buffer_destroy(&frame); +} + +} // namespace + +class RawEncoderTest : public ::testing::Test { + protected: + void Verify(absl::AnyInvocable encode_actions, + absl::AnyInvocable verify_actions, + bool use_true_binary_metadata = false) { + grpc_core::RawEncoder encoder(use_true_binary_metadata); + encode_actions(encoder); + grpc_metadata_batch b; + EncodeAndParse(std::move(encoder), &b); + verify_actions(b); + } +}; + +// Test basic encoding of a regular metadata key-value pair. +TEST_F(RawEncoderTest, BasicMetadata) { + Verify( + [](grpc_core::RawEncoder& encoder) { + encoder.Encode(grpc_core::Slice::FromStaticString(kMetadatakey), + grpc_core::Slice::FromStaticString(kMetadataValue)); + }, + [](grpc_metadata_batch& b) { + std::string value; + EXPECT_EQ(b.GetStringValue(kMetadatakey, &value), kMetadataValue); + }); +} + +class RawEncoderBinaryTest : public RawEncoderTest, + public ::testing::WithParamInterface {}; + +// Test encoding of a binary metadata key-value pair with both true-binary +// enabled and disabled. +TEST_P(RawEncoderBinaryTest, BinaryMetadata) { + Verify( + [](grpc_core::RawEncoder& encoder) { + encoder.Encode(grpc_core::Slice::FromStaticString(kMetadatabinarykey), + grpc_core::Slice::FromStaticString(kMetadataValue)); + }, + [](grpc_metadata_batch& b) { + std::string value; + EXPECT_EQ(b.GetStringValue(kMetadatabinarykey, &value), kMetadataValue); + }, + /*use_true_binary_metadata=*/GetParam()); +} + +INSTANTIATE_TEST_SUITE_P(RawEncoder, RawEncoderBinaryTest, ::testing::Bool()); + +// Test encoding of the grpc-status header. +TEST_F(RawEncoderTest, Status) { + grpc_status_code status = GRPC_STATUS_OK; + Verify( + [status](grpc_core::RawEncoder& encoder) { + encoder.Encode(grpc_core::GrpcStatusMetadata(), status); + }, + [status](grpc_metadata_batch& b) { + EXPECT_EQ(b.get(grpc_core::GrpcStatusMetadata()).value(), status); + }); +} + +// Test encoding of the grpc-message header. +TEST_F(RawEncoderTest, Message) { + Verify( + [](grpc_core::RawEncoder& encoder) { + encoder.Encode(grpc_core::GrpcMessageMetadata(), + grpc_core::Slice::FromStaticString(kMetadataValue)); + }, + [](grpc_metadata_batch& b) { + const auto* message = b.get_pointer(grpc_core::GrpcMessageMetadata()); + ASSERT_NE(message, nullptr); + EXPECT_EQ(*message, grpc_core::Slice::FromStaticString(kMetadataValue)); + }); +} + +// Test that only the first encoded grpc-status and grpc-message headers are +// preserved if multiple are encoded. +TEST_F(RawEncoderTest, IgnoresMultipleStatusAndMessage) { + Verify( + [](grpc_core::RawEncoder& encoder) { + encoder.Encode(grpc_core::GrpcStatusMetadata(), GRPC_STATUS_OK); + encoder.Encode(grpc_core::GrpcStatusMetadata(), GRPC_STATUS_UNKNOWN); + encoder.Encode(grpc_core::GrpcMessageMetadata(), + grpc_core::Slice::FromStaticString("msg1")); + encoder.Encode(grpc_core::GrpcMessageMetadata(), + grpc_core::Slice::FromStaticString("msg2")); + }, + [](grpc_metadata_batch& b) { + EXPECT_EQ(b.get(grpc_core::GrpcStatusMetadata()).value(), + GRPC_STATUS_OK); + const auto* message = b.get_pointer(grpc_core::GrpcMessageMetadata()); + ASSERT_NE(message, nullptr); + EXPECT_EQ(*message, grpc_core::Slice::FromStaticString("msg1")); + }); +} + +// Test encoding of multiple different headers in a single batch. +TEST_F(RawEncoderTest, EncodeMultipleHeaders) { + grpc_status_code status = GRPC_STATUS_OK; + Verify( + [&](grpc_core::RawEncoder& encoder) { + encoder.Encode(grpc_core::Slice::FromStaticString(kMetadatakey), + grpc_core::Slice::FromStaticString(kMetadataValue)); + encoder.Encode(grpc_core::Slice::FromStaticString(kMetadatabinarykey), + grpc_core::Slice::FromStaticString(kMetadataValue)); + encoder.Encode(grpc_core::GrpcStatusMetadata(), status); + encoder.Encode(grpc_core::GrpcMessageMetadata(), + grpc_core::Slice::FromStaticString("message")); + }, + [&](grpc_metadata_batch& b) { + std::string value; + EXPECT_EQ(b.GetStringValue(kMetadatakey, &value), kMetadataValue); + EXPECT_EQ(b.GetStringValue(kMetadatabinarykey, &value), kMetadataValue); + EXPECT_EQ(b.get(grpc_core::GrpcStatusMetadata()).value(), status); + const auto* message = b.get_pointer(grpc_core::GrpcMessageMetadata()); + ASSERT_NE(message, nullptr); + EXPECT_EQ(*message, grpc_core::Slice::FromStaticString("message")); + }); +} + +// Test that a single header pair exceeding the size limit is rejected. +TEST_F(RawEncoderTest, SizeLimitExceededSinglePair) { + Verify( + [](grpc_core::RawEncoder& encoder) { + // Limit is 2048 (2 * 1024). + // Create a value larger than 2048. + std::string value(2050, 'a'); + encoder.Encode(grpc_core::Slice::FromStaticString(kMetadatakey), + grpc_core::Slice::FromCopiedString(value)); + }, + [](grpc_metadata_batch& b) { + std::string value; + EXPECT_EQ(b.GetStringValue(kMetadatakey, &value), std::nullopt); + }); +} + +// Test that adding headers is stopped when the total size limit is exceeded. +TEST_F(RawEncoderTest, SizeLimitExceededTotal) { + Verify( + [](grpc_core::RawEncoder& encoder) { + // Limit is 16384 (1 << 14). + // Encode multiple pairs. + // Use 1000 which fits in 2048 limit, but 20 of them exceed 16384 total. + std::string value(1000, 'a'); + for (int i = 0; i < 20; ++i) { + encoder.Encode( + grpc_core::Slice::FromCopiedString(absl::StrCat(kMetadatakey, i)), + grpc_core::Slice::FromCopiedString(value)); + } + EXPECT_LE(encoder.Length(), 16384); + EXPECT_GT(encoder.Length(), 0); + }, + [](grpc_metadata_batch& b) { + EXPECT_GT(b.count(), 0); + EXPECT_LT(b.count(), 20); + }); +} + int main(int argc, char** argv) { grpc::testing::TestEnvironment env(&argc, argv); ::testing::InitGoogleTest(&argc, argv); From ee658b2355ab236b377be67b0c3d068df34a4ddb Mon Sep 17 00:00:00 2001 From: Sergii Tkachenko Date: Thu, 22 Jan 2026 22:12:41 -0800 Subject: [PATCH 12/67] [Python] Align GRPC_ENABLE_FORK_SUPPORT env defaults in core and python (#41455) In the core, the default value of the `GRPC_ENABLE_FORK_SUPPORT` environment variable is determined by the value of the `GRPC_ENABLE_FORK_SUPPORT_DEFAULT` macro, which is by default derived from the value of the `GRPC_ENABLE_FORK_SUPPORT` macro. Python sets `GRPC_ENABLE_FORK_SUPPORT`, so the feature is enabled there by default. However, Python also reads the value of the `GRPC_ENABLE_FORK_SUPPORT` environment variable and sets its own default in `fork_posix.pyx.pxi`, and the feature is disabled there by default. The result is a mixed state that causes problems. This change fixes that by disabling the feature by default in both places. In the long run we want to enable it by default everywhere, but for now we don't have confidence in its stability. Closes #41455 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41455 from sergiitk:fix/py/fork-defaults 73be72d9e8ffb3053cf2f00162291e88e8c6b245 PiperOrigin-RevId: 859928704 --- setup.py | 11 +++++++++++ .../grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/setup.py b/setup.py index 38d3ab72293c0..d3b5c30b31912 100644 --- a/setup.py +++ b/setup.py @@ -452,6 +452,17 @@ def _quote_build_define(argument): DEFINE_MACROS += ( ("HAVE_CONFIG_H", 1), ("GRPC_ENABLE_FORK_SUPPORT", 1), + # Set runtime GRPC_ENABLE_FORK_SUPPORT setting in core to "off". + # + # By default, gRPC core GRPC_ENABLE_FORK_SUPPORT runtime config_var + # is "on" when it's compiled with GRPC_ENABLE_FORK_SUPPORT macro. + # However, in python GRPC_ENABLE_FORK_SUPPORT by default is "off". + # Compare config_vars.cc and fork_posix.pyx.pxi. + # This leads to an inconsistent and broken behavior. + # + # Important! This must by in sync with the default value for the + # GRPC_ENABLE_FORK_SUPPORT env var parsed in fork_posix.pyx.pxi + ("GRPC_ENABLE_FORK_SUPPORT_DEFAULT", "false"), ) # Fix for multiprocessing support on Apple devices. diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi index 058893849458c..afe5fa1d1b390 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi @@ -29,6 +29,10 @@ _TRUE_VALUES = ['yes', 'Yes', 'YES', 'true', 'True', 'TRUE', '1'] # # This flag is not supported on Windows. # This flag is also not supported for non-native IO manager. +# +# Important: when changing the default, GRPC_ENABLE_FORK_SUPPORT_DEFAULT +# macro in the setup.py needs to be updated to the same value. +# TODO(sergiitk): reconsider enabling this by default. _GRPC_ENABLE_FORK_SUPPORT = ( os.environ.get('GRPC_ENABLE_FORK_SUPPORT', '0') .lower() in _TRUE_VALUES) From a3575c16479f1a9ad85002f8640df718f166f578 Mon Sep 17 00:00:00 2001 From: Akshit Patel Date: Fri, 23 Jan 2026 00:14:25 -0800 Subject: [PATCH 13/67] [PH2][E2E] Re-enable ServerStreaming tests PiperOrigin-RevId: 859967650 --- test/core/end2end/end2end_ph2_config.cc | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/core/end2end/end2end_ph2_config.cc b/test/core/end2end/end2end_ph2_config.cc index 5102e4dec5b7e..621bedd0a41d8 100644 --- a/test/core/end2end/end2end_ph2_config.cc +++ b/test/core/end2end/end2end_ph2_config.cc @@ -119,10 +119,7 @@ class Ph2InsecureFixture : public InsecureFixture { "|Http2SingleHopTests.ServerMaxConcurrentStreams" \ "|Http2Tests.GracefulServerShutdown" \ "|Http2Tests.MaxAgeForciblyClose" \ - "|Http2Tests.MaxAgeGracefullyClose" \ - "|Http2Tests.ServerStreaming" \ - "|Http2Tests.ServerStreamingEmptyStream" \ - "|Http2Tests.ServerStreaming10Messages" + "|Http2Tests.MaxAgeGracefullyClose" #define GRPC_HTTP2_PROMISE_CLIENT_TRANSPORT_ALLOW_SUITE \ "|CoreEnd2endTests|CoreDeadlineTests|CoreLargeSendTests|" \ From 129f9c55e6d0d67e7a5ed7a0a4080e6fc9b525f9 Mon Sep 17 00:00:00 2001 From: Akshit Patel Date: Fri, 23 Jan 2026 00:42:41 -0800 Subject: [PATCH 14/67] [PH2][Cleanup] Fix channelz race PiperOrigin-RevId: 859975752 --- src/core/ext/transport/chttp2/GEMINI.md | 5 +-- .../transport/http2_client_transport.cc | 36 +++++-------------- .../chttp2/transport/http2_client_transport.h | 11 ++++-- 3 files changed, 20 insertions(+), 32 deletions(-) diff --git a/src/core/ext/transport/chttp2/GEMINI.md b/src/core/ext/transport/chttp2/GEMINI.md index 078616da65e12..4b84519a87f96 100644 --- a/src/core/ext/transport/chttp2/GEMINI.md +++ b/src/core/ext/transport/chttp2/GEMINI.md @@ -246,5 +246,6 @@ that we use in the transport. | AddData | Misc | ChannelZ AddData | 1 | On demand | Immediate | Immediate | | CloseTransport | Misc | Close transport | 1 | While closing transport. Only once in the life of a transport | As long as it takes to close the transport | Transport Close | | WaitForSettingsTimeout | Timeout | Settings Timeout | 1 | When we write SETTINGS | Settings timeout | Settings Ack Received or Settings Timeout | -|`TODO(akshitpatel) [PH2][P4] Fill this out for Ping, Keepalive etc. Also update the total.` | -| | | **Total** | ** 7 + Ping ** | | | | +| Keepalive | Loop | Keepalive Loop | 1 | If Keepalive is enabled, after constructor | Lifetime of the transport | Transport Close +| Ping | Timeout + Misc | | 4 | Sending a ping request | Timeout or a specific duration | +| | | **Total** | 12 | | | | diff --git a/src/core/ext/transport/chttp2/transport/http2_client_transport.cc b/src/core/ext/transport/chttp2/transport/http2_client_transport.cc index 50ec2dfe39863..e2aee89d32c58 100644 --- a/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +++ b/src/core/ext/transport/chttp2/transport/http2_client_transport.cc @@ -1773,7 +1773,6 @@ void Http2ClientTransport::CloseTransport() { transport_closed_latch_.Set(); settings_->HandleTransportShutdown(event_engine_.get()); - MutexLock lock(&transport_mutex_); // This is the only place where the general_party_ is reset. general_party_.reset(); } @@ -1902,40 +1901,21 @@ void Http2ClientTransport::AddData(channelz::DataSink sink) { event_engine_->Run([self = RefAsSubclass(), sink = std::move(sink)]() mutable { - bool is_party_null = false; + RefCountedPtr party = nullptr; { - // Apart from CloseTransport, this is the only place where a lock is taken - // to access general_party_. All other access to general_party_ happens - // on the general party itself and hence do not race with CloseTransport. - // TODO(akshitpatel) : [PH2][P4] : Check if a new mutex is needed to - // protect general_party_. Curently transport_mutex_ can is used in - // these places: - // 1. In promises running on the transport party - // 2. In AddData promise - // 3. In Orphan function. - // 4. Stream creation (this will be removed soon). - // Given that #1 is already serialized (guaranteed by party), #2 is on - // demand and #3 happens once for the lifetime of the transport while - // closing the transport, the contention should be minimal. MutexLock lock(&self->transport_mutex_); - // TODO(akshitpatel) : [PH2][P2] : There is still a potential for a race - // here where the general_party_ is reset between the lock being - // released and the spawn. We cannot just do a spawn inside the mutex as - // that may result in deadlock. - // Potential fix to hold a ref to the party inside the mutex and do a - // spawn outside the mutex. The only side effect is that this introduces - // an additional ref to the party other the transport's copy. - if (GPR_UNLIKELY(self->general_party_ == nullptr)) { - is_party_null = true; + if (GPR_LIKELY(!self->is_transport_closed_)) { + GRPC_DCHECK(self->general_party_ != nullptr); + party = self->general_party_; + } else { GRPC_HTTP2_CLIENT_DLOG - << "Http2ClientTransport::AddData general_party_ is " - "null. Transport is closed."; + << "Http2ClientTransport::AddData Transport is closed."; } } ExecCtx exec_ctx; - if (!is_party_null) { - self->SpawnAddChannelzData(self->general_party_, std::move(sink)); + if (party != nullptr) { + self->SpawnAddChannelzData(std::move(party), std::move(sink)); } self.reset(); // Cleanup with exec_ctx in scope }); diff --git a/src/core/ext/transport/chttp2/transport/http2_client_transport.h b/src/core/ext/transport/chttp2/transport/http2_client_transport.h index c65b3a73531a5..41a0055dea776 100644 --- a/src/core/ext/transport/chttp2/transport/http2_client_transport.h +++ b/src/core/ext/transport/chttp2/transport/http2_client_transport.h @@ -428,6 +428,9 @@ class Http2ClientTransport final : public ClientTransport, Promise PingTimeout() override; private: + // Holding a raw pointer to transport works because all the promises + // invoking the methods of this class are invoked while holding a ref to the + // transport. Http2ClientTransport* transport_; explicit PingSystemInterfaceImpl(Http2ClientTransport* transport) : transport_(transport) {} @@ -444,7 +447,9 @@ class Http2ClientTransport final : public ClientTransport, Promise SendPingAndWaitForAck() override; Promise OnKeepAliveTimeout() override; bool NeedToSendKeepAlivePing() override; - + // Holding a raw pointer to transport works because all the promises + // invoking the methods of this class are invoked while holding a ref to the + // transport. Http2ClientTransport* transport_; }; @@ -464,7 +469,9 @@ class Http2ClientTransport final : public ClientTransport, private: explicit GoawayInterfaceImpl(Http2ClientTransport* transport) : transport_(transport) {} - + // Holding a raw pointer to transport works because all the promises + // invoking the methods of this class are invoked while holding a ref to the + // transport. Http2ClientTransport* transport_; }; From 97fa2797d38c304f0b9ecf5181b2e810027c60dd Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Jan 2026 09:35:20 -0800 Subject: [PATCH 15/67] Remove channelz_use_v2_for_v1_api and channelz_use_v2_for_v1_service experiments. This change removes the experiment flags `channelz_use_v2_for_v1_api` and `channelz_use_v2_for_v1_service`, making the V2-based implementation the default for both the legacy C-style channelz API and the C++ Channelz service. The old V1 rendering code paths and helper functions are removed from `legacy_api.cc` and `channelz_service.cc`. PiperOrigin-RevId: 860142585 --- bazel/experiments.bzl | 14 - src/core/channelz/v2tov1/legacy_api.cc | 471 +++++++------------- src/core/lib/experiments/experiments.cc | 39 -- src/core/lib/experiments/experiments.h | 16 - src/core/lib/experiments/experiments.yaml | 10 - src/cpp/server/channelz/channelz_service.cc | 371 ++++++--------- 6 files changed, 292 insertions(+), 629 deletions(-) diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl index 002d7adecc931..43885c91163f6 100644 --- a/bazel/experiments.bzl +++ b/bazel/experiments.bzl @@ -20,8 +20,6 @@ EXPERIMENT_ENABLES = { "buffer_list_deletion_prep": "buffer_list_deletion_prep", "call_tracer_in_transport": "call_tracer_in_transport", "call_tracer_send_initial_metadata_is_an_annotation": "call_tracer_send_initial_metadata_is_an_annotation", - "channelz_use_v2_for_v1_api": "channelz_use_v2_for_v1_api", - "channelz_use_v2_for_v1_service": "channelz_use_v2_for_v1_service", "chaotic_good_connect_deadline": "chaotic_good_connect_deadline", "chaotic_good_framing_layer": "chaotic_good_framing_layer", "chttp2_bound_write_size": "chttp2_bound_write_size", @@ -90,10 +88,6 @@ EXPERIMENTS = { "dbg": { }, "off": { - "channelz_test": [ - "channelz_use_v2_for_v1_api", - "channelz_use_v2_for_v1_service", - ], "chttp2_keepalive_tests": [ "subchannel_connection_scaling", ], @@ -203,10 +197,6 @@ EXPERIMENTS = { "dbg": { }, "off": { - "channelz_test": [ - "channelz_use_v2_for_v1_api", - "channelz_use_v2_for_v1_service", - ], "chttp2_keepalive_tests": [ "subchannel_connection_scaling", ], @@ -316,10 +306,6 @@ EXPERIMENTS = { "dbg": { }, "off": { - "channelz_test": [ - "channelz_use_v2_for_v1_api", - "channelz_use_v2_for_v1_service", - ], "chttp2_keepalive_tests": [ "subchannel_connection_scaling", ], diff --git a/src/core/channelz/v2tov1/legacy_api.cc b/src/core/channelz/v2tov1/legacy_api.cc index a9effcb55f73d..e5ccc87eb5020 100644 --- a/src/core/channelz/v2tov1/legacy_api.cc +++ b/src/core/channelz/v2tov1/legacy_api.cc @@ -37,6 +37,16 @@ namespace grpc_core { namespace channelz { namespace v2tov1 { + +std::string StripAdditionalInfoFromJson(absl::string_view json_str) { + auto json = JsonParse(json_str); + if (!json.ok()) return std::string(json_str); + if (json->type() != Json::Type::kObject) return std::string(json_str); + Json::Object object = json->object(); + object.erase("additionalInfo"); + return JsonDump(Json::FromObject(std::move(object))); +} + namespace { class RegistryEntityFetcher : public EntityFetcher { @@ -69,61 +79,8 @@ class RegistryEntityFetcher : public EntityFetcher { } }; -template -std::string RenderArray(std::tuple values_and_end, - const std::string& key) { - auto& [values, end] = values_and_end; - Json::Object object; - if (!values.empty()) { - // Create list of channels. - Json::Array array; - for (size_t i = 0; i < values.size(); ++i) { - array.emplace_back(values[i]->RenderJson()); - } - object[key] = Json::FromArray(std::move(array)); - } - if (end) { - object["end"] = Json::FromBool(true); - } - return JsonDump(Json::FromObject(std::move(object))); -} - -Json RemoveAdditionalInfo(const Json& json) { - switch (json.type()) { - case Json::Type::kArray: { - Json::Array out; - for (const auto& node : json.array()) { - out.emplace_back(RemoveAdditionalInfo(node)); - } - return Json::FromArray(std::move(out)); - } break; - case Json::Type::kObject: { - Json::Object out; - for (const auto& [key, value] : json.object()) { - if (key == "additionalInfo") continue; - out[key] = RemoveAdditionalInfo(value); - } - return Json::FromObject(std::move(out)); - } break; - default: - return json; - } -} - } // namespace -std::string StripAdditionalInfoFromJson(absl::string_view json_str) { - auto json = JsonParse(json_str); - if (!json.ok()) return std::string(json_str); - return JsonDump(RemoveAdditionalInfo(*json)); -} - -// TODO(ctiller): Temporary hack to remove fields that are objectionable to the -// protobuf parser (because we've not published them in protobuf yet). -char* ApplyHacks(const std::string& json_str) { - return gpr_strdup(StripAdditionalInfoFromJson(json_str).c_str()); -} - } // namespace v2tov1 } // namespace channelz } // namespace grpc_core @@ -133,299 +90,199 @@ using grpc_core::channelz::v2tov1::RegistryEntityFetcher; char* grpc_channelz_get_top_channels(intptr_t start_channel_id) { grpc_core::ExecCtx exec_ctx; - if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) { - RegistryEntityFetcher fetcher; - auto [channels, end] = ChannelzRegistry::GetTopChannels(start_channel_id); - grpc_core::Json::Array array; - for (const auto& channel_node : channels) { - if (channel_node == nullptr) continue; - auto serialized_v2 = - channel_node->SerializeEntityToString(absl::ZeroDuration()); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel( - serialized_v2, fetcher, true); - if (!serialized_v1.ok()) { - LOG(ERROR) << "Failed to convert channel: " << serialized_v1.status(); - continue; - } - auto json = grpc_core::JsonParse(*serialized_v1); - if (!json.ok()) { - LOG(ERROR) << "Failed to parse converted channel json: " - << json.status(); - continue; - } - array.emplace_back(std::move(*json)); + RegistryEntityFetcher fetcher; + auto [channels, end] = ChannelzRegistry::GetTopChannels(start_channel_id); + grpc_core::Json::Array array; + for (const auto& channel_node : channels) { + if (channel_node == nullptr) continue; + auto serialized_v2 = + channel_node->SerializeEntityToString(absl::ZeroDuration()); + auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel( + serialized_v2, fetcher, true); + if (!serialized_v1.ok()) { + LOG(ERROR) << "Failed to convert channel: " << serialized_v1.status(); + continue; } - grpc_core::Json json = grpc_core::Json::FromObject({ - {"channel", grpc_core::Json::FromArray(std::move(array))}, - {"end", grpc_core::Json::FromBool(end)}, - }); - std::string json_str = grpc_core::JsonDump(json); - return gpr_strdup(json_str.c_str()); - } else { - return grpc_core::channelz::v2tov1::ApplyHacks( - grpc_core::channelz::v2tov1::RenderArray( - grpc_core::channelz::ChannelzRegistry::GetTopChannels( - start_channel_id), - "channel")); - } -} - -char* grpc_channelz_get_servers(intptr_t start_server_id) { - grpc_core::ExecCtx exec_ctx; - if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) { - RegistryEntityFetcher fetcher; - auto [servers, end] = ChannelzRegistry::GetServers(start_server_id); - grpc_core::Json::Array array; - for (const auto& server_node : servers) { - if (server_node == nullptr) continue; - auto serialized_v2 = - server_node->SerializeEntityToString(absl::ZeroDuration()); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertServer( - serialized_v2, fetcher, true); - if (!serialized_v1.ok()) { - LOG(ERROR) << "Failed to convert server: " << serialized_v1.status(); - continue; - } - auto json = grpc_core::JsonParse(*serialized_v1); - if (!json.ok()) { - LOG(ERROR) << "Failed to parse converted server json: " - << json.status(); - continue; - } - array.emplace_back(std::move(*json)); + auto json = grpc_core::JsonParse(*serialized_v1); + if (!json.ok()) { + LOG(ERROR) << "Failed to parse converted channel json: " << json.status(); + continue; } - grpc_core::Json json = grpc_core::Json::FromObject({ - {"server", grpc_core::Json::FromArray(std::move(array))}, - {"end", grpc_core::Json::FromBool(end)}, - }); - std::string json_str = grpc_core::JsonDump(json); - return gpr_strdup(json_str.c_str()); - } else { - return grpc_core::channelz::v2tov1::ApplyHacks( - grpc_core::channelz::v2tov1::RenderArray( - grpc_core::channelz::ChannelzRegistry::GetServers(start_server_id), - "server")); + array.emplace_back(std::move(*json)); } + grpc_core::Json json = grpc_core::Json::FromObject({ + {"channel", grpc_core::Json::FromArray(std::move(array))}, + {"end", grpc_core::Json::FromBool(end)}, + }); + std::string json_str = grpc_core::JsonDump(json); + return gpr_strdup(json_str.c_str()); } -char* grpc_channelz_get_server(intptr_t server_id) { +char* grpc_channelz_get_servers(intptr_t start_server_id) { grpc_core::ExecCtx exec_ctx; - if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) { - auto server_node = ChannelzRegistry::GetServer(server_id); - if (server_node == nullptr) return nullptr; - RegistryEntityFetcher fetcher; + RegistryEntityFetcher fetcher; + auto [servers, end] = ChannelzRegistry::GetServers(start_server_id); + grpc_core::Json::Array array; + for (const auto& server_node : servers) { + if (server_node == nullptr) continue; auto serialized_v2 = server_node->SerializeEntityToString(absl::ZeroDuration()); auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertServer( serialized_v2, fetcher, true); if (!serialized_v1.ok()) { LOG(ERROR) << "Failed to convert server: " << serialized_v1.status(); - return nullptr; + continue; } auto json = grpc_core::JsonParse(*serialized_v1); if (!json.ok()) { LOG(ERROR) << "Failed to parse converted server json: " << json.status(); - return nullptr; - } - grpc_core::Json wrapped_json = grpc_core::Json::FromObject({ - {"server", std::move(*json)}, - }); - std::string json_str = grpc_core::JsonDump(wrapped_json); - return gpr_strdup(json_str.c_str()); - } else { - grpc_core::WeakRefCountedPtr server_node = - grpc_core::channelz::ChannelzRegistry::Get(server_id); - if (server_node == nullptr || - server_node->type() != - grpc_core::channelz::BaseNode::EntityType::kServer) { - return nullptr; + continue; } - grpc_core::Json json = grpc_core::Json::FromObject({ - {"server", server_node->RenderJson()}, - }); - return grpc_core::channelz::v2tov1::ApplyHacks( - grpc_core::JsonDump(json).c_str()); + array.emplace_back(std::move(*json)); } + grpc_core::Json json = grpc_core::Json::FromObject({ + {"server", grpc_core::Json::FromArray(std::move(array))}, + {"end", grpc_core::Json::FromBool(end)}, + }); + std::string json_str = grpc_core::JsonDump(json); + return gpr_strdup(json_str.c_str()); +} + +char* grpc_channelz_get_server(intptr_t server_id) { + grpc_core::ExecCtx exec_ctx; + auto server_node = ChannelzRegistry::GetServer(server_id); + if (server_node == nullptr) return nullptr; + RegistryEntityFetcher fetcher; + auto serialized_v2 = + server_node->SerializeEntityToString(absl::ZeroDuration()); + auto serialized_v1 = + grpc_core::channelz::v2tov1::ConvertServer(serialized_v2, fetcher, true); + if (!serialized_v1.ok()) { + LOG(ERROR) << "Failed to convert server: " << serialized_v1.status(); + return nullptr; + } + auto json = grpc_core::JsonParse(*serialized_v1); + if (!json.ok()) { + LOG(ERROR) << "Failed to parse converted server json: " << json.status(); + return nullptr; + } + grpc_core::Json wrapped_json = grpc_core::Json::FromObject({ + {"server", std::move(*json)}, + }); + std::string json_str = grpc_core::JsonDump(wrapped_json); + return gpr_strdup(json_str.c_str()); } char* grpc_channelz_get_server_sockets(intptr_t server_id, intptr_t start_socket_id, intptr_t max_results) { grpc_core::ExecCtx exec_ctx; - if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) { - auto server_node = ChannelzRegistry::GetServer(server_id); - if (server_node == nullptr) return nullptr; - size_t max = - max_results == 0 ? std::numeric_limits::max() : max_results; - auto [sockets, end] = ChannelzRegistry::GetChildrenOfType( - start_socket_id, server_node.get(), - grpc_core::channelz::BaseNode::EntityType::kSocket, max); - grpc_core::Json::Array array; - for (const auto& socket_node : sockets) { - if (socket_node == nullptr) continue; - array.emplace_back(grpc_core::Json::FromObject({ - {"socketId", - grpc_core::Json::FromString(absl::StrCat(socket_node->uuid()))}, - {"name", grpc_core::Json::FromString(socket_node->name())}, - })); - } - grpc_core::Json json = grpc_core::Json::FromObject({ - {"socketRef", grpc_core::Json::FromArray(std::move(array))}, - {"end", grpc_core::Json::FromBool(end)}, - }); - std::string json_str = grpc_core::JsonDump(json); - return gpr_strdup(json_str.c_str()); - } else { - // Validate inputs before handing them of to the renderer. - grpc_core::WeakRefCountedPtr base_node = - grpc_core::channelz::ChannelzRegistry::Get(server_id); - if (base_node == nullptr || - base_node->type() != - grpc_core::channelz::BaseNode::EntityType::kServer || - start_socket_id < 0 || max_results < 0) { - return nullptr; - } - // This cast is ok since we have just checked to make sure base_node is - // actually a server node. - grpc_core::channelz::ServerNode* server_node = - static_cast(base_node.get()); - return grpc_core::channelz::v2tov1::ApplyHacks( - server_node->RenderServerSockets(start_socket_id, max_results).c_str()); + auto server_node = ChannelzRegistry::GetServer(server_id); + if (server_node == nullptr) return nullptr; + size_t max = + max_results == 0 ? std::numeric_limits::max() : max_results; + auto [sockets, end] = ChannelzRegistry::GetChildrenOfType( + start_socket_id, server_node.get(), + grpc_core::channelz::BaseNode::EntityType::kSocket, max); + grpc_core::Json::Array array; + for (const auto& socket_node : sockets) { + if (socket_node == nullptr) continue; + array.emplace_back(grpc_core::Json::FromObject({ + {"socketId", + grpc_core::Json::FromString(absl::StrCat(socket_node->uuid()))}, + {"name", grpc_core::Json::FromString(socket_node->name())}, + })); } + grpc_core::Json json = grpc_core::Json::FromObject({ + {"socketRef", grpc_core::Json::FromArray(std::move(array))}, + {"end", grpc_core::Json::FromBool(end)}, + }); + std::string json_str = grpc_core::JsonDump(json); + return gpr_strdup(json_str.c_str()); } char* grpc_channelz_get_channel(intptr_t channel_id) { grpc_core::ExecCtx exec_ctx; - if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) { - auto channel_node = ChannelzRegistry::GetChannel(channel_id); - if (channel_node == nullptr) return nullptr; - RegistryEntityFetcher fetcher; - auto serialized_v2 = - channel_node->SerializeEntityToString(absl::ZeroDuration()); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel( - serialized_v2, fetcher, true); - if (!serialized_v1.ok()) { - LOG(ERROR) << "Failed to convert channel: " << serialized_v1.status(); - return nullptr; - } - auto json = grpc_core::JsonParse(*serialized_v1); - if (!json.ok()) { - LOG(ERROR) << "Failed to parse converted channel json: " << json.status(); - return nullptr; - } - grpc_core::Json wrapped_json = grpc_core::Json::FromObject({ - {"channel", std::move(*json)}, - }); - std::string json_str = grpc_core::JsonDump(wrapped_json); - return gpr_strdup(json_str.c_str()); - } else { - grpc_core::WeakRefCountedPtr channel_node = - grpc_core::channelz::ChannelzRegistry::Get(channel_id); - if (channel_node == nullptr || - (channel_node->type() != - grpc_core::channelz::BaseNode::EntityType::kTopLevelChannel && - channel_node->type() != - grpc_core::channelz::BaseNode::EntityType::kInternalChannel)) { - return nullptr; - } - grpc_core::Json json = grpc_core::Json::FromObject({ - {"channel", channel_node->RenderJson()}, - }); - return grpc_core::channelz::v2tov1::ApplyHacks( - grpc_core::JsonDump(json).c_str()); + auto channel_node = ChannelzRegistry::GetChannel(channel_id); + if (channel_node == nullptr) return nullptr; + RegistryEntityFetcher fetcher; + auto serialized_v2 = + channel_node->SerializeEntityToString(absl::ZeroDuration()); + auto serialized_v1 = + grpc_core::channelz::v2tov1::ConvertChannel(serialized_v2, fetcher, true); + if (!serialized_v1.ok()) { + LOG(ERROR) << "Failed to convert channel: " << serialized_v1.status(); + return nullptr; } + auto json = grpc_core::JsonParse(*serialized_v1); + if (!json.ok()) { + LOG(ERROR) << "Failed to parse converted channel json: " << json.status(); + return nullptr; + } + grpc_core::Json wrapped_json = grpc_core::Json::FromObject({ + {"channel", std::move(*json)}, + }); + std::string json_str = grpc_core::JsonDump(wrapped_json); + return gpr_strdup(json_str.c_str()); } char* grpc_channelz_get_subchannel(intptr_t subchannel_id) { grpc_core::ExecCtx exec_ctx; - if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) { - auto subchannel_node = ChannelzRegistry::GetSubchannel(subchannel_id); - if (subchannel_node == nullptr) return nullptr; - RegistryEntityFetcher fetcher; - auto serialized_v2 = - subchannel_node->SerializeEntityToString(absl::ZeroDuration()); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertSubchannel( - serialized_v2, fetcher, true); - if (!serialized_v1.ok()) { - LOG(ERROR) << "Failed to convert subchannel: " << serialized_v1.status(); - return nullptr; - } - auto json = grpc_core::JsonParse(*serialized_v1); - if (!json.ok()) { - LOG(ERROR) << "Failed to parse converted subchannel json: " - << json.status(); - return nullptr; - } - grpc_core::Json wrapped_json = grpc_core::Json::FromObject({ - {"subchannel", std::move(*json)}, - }); - std::string json_str = grpc_core::JsonDump(wrapped_json); - return gpr_strdup(json_str.c_str()); - } else { - grpc_core::WeakRefCountedPtr - subchannel_node = - grpc_core::channelz::ChannelzRegistry::Get(subchannel_id); - if (subchannel_node == nullptr || - subchannel_node->type() != - grpc_core::channelz::BaseNode::EntityType::kSubchannel) { - return nullptr; - } - grpc_core::Json json = grpc_core::Json::FromObject({ - {"subchannel", subchannel_node->RenderJson()}, - }); - return grpc_core::channelz::v2tov1::ApplyHacks( - grpc_core::JsonDump(json).c_str()); + auto subchannel_node = ChannelzRegistry::GetSubchannel(subchannel_id); + if (subchannel_node == nullptr) return nullptr; + RegistryEntityFetcher fetcher; + auto serialized_v2 = + subchannel_node->SerializeEntityToString(absl::ZeroDuration()); + auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertSubchannel( + serialized_v2, fetcher, true); + if (!serialized_v1.ok()) { + LOG(ERROR) << "Failed to convert subchannel: " << serialized_v1.status(); + return nullptr; + } + auto json = grpc_core::JsonParse(*serialized_v1); + if (!json.ok()) { + LOG(ERROR) << "Failed to parse converted subchannel json: " + << json.status(); + return nullptr; } + grpc_core::Json wrapped_json = grpc_core::Json::FromObject({ + {"subchannel", std::move(*json)}, + }); + std::string json_str = grpc_core::JsonDump(wrapped_json); + return gpr_strdup(json_str.c_str()); } char* grpc_channelz_get_socket(intptr_t socket_id) { grpc_core::ExecCtx exec_ctx; - if (grpc_core::IsChannelzUseV2ForV1ApiEnabled()) { - auto node = ChannelzRegistry::GetNode(socket_id); - if (node == nullptr) return nullptr; - RegistryEntityFetcher fetcher; - auto serialized_v2 = node->SerializeEntityToString(absl::ZeroDuration()); - absl::StatusOr serialized_v1; - if (node->type() == grpc_core::channelz::BaseNode::EntityType::kSocket) { - serialized_v1 = grpc_core::channelz::v2tov1::ConvertSocket(serialized_v2, - fetcher, true); - } else if (node->type() == - grpc_core::channelz::BaseNode::EntityType::kListenSocket) { - serialized_v1 = grpc_core::channelz::v2tov1::ConvertListenSocket( - serialized_v2, fetcher, true); - } else { - return nullptr; - } - if (!serialized_v1.ok()) { - LOG(ERROR) << "Failed to convert socket: " << serialized_v1.status(); - return nullptr; - } - // The old API returned a JSON object with a "socket" key. - // The new converter returns the socket JSON directly. We need to wrap it. - auto json = grpc_core::JsonParse(*serialized_v1); - if (!json.ok()) { - LOG(ERROR) << "Failed to parse converted socket json: " << json.status(); - return nullptr; - } - grpc_core::Json wrapped_json = grpc_core::Json::FromObject({ - {"socket", std::move(*json)}, - }); - std::string json_str = grpc_core::JsonDump(wrapped_json); - return gpr_strdup(json_str.c_str()); + auto node = ChannelzRegistry::GetNode(socket_id); + if (node == nullptr) return nullptr; + RegistryEntityFetcher fetcher; + auto serialized_v2 = node->SerializeEntityToString(absl::ZeroDuration()); + absl::StatusOr serialized_v1; + if (node->type() == grpc_core::channelz::BaseNode::EntityType::kSocket) { + serialized_v1 = grpc_core::channelz::v2tov1::ConvertSocket(serialized_v2, + fetcher, true); + } else if (node->type() == + grpc_core::channelz::BaseNode::EntityType::kListenSocket) { + serialized_v1 = grpc_core::channelz::v2tov1::ConvertListenSocket( + serialized_v2, fetcher, true); } else { - grpc_core::WeakRefCountedPtr socket_node = - grpc_core::channelz::ChannelzRegistry::Get(socket_id); - if (socket_node == nullptr || - (socket_node->type() != - grpc_core::channelz::BaseNode::EntityType::kSocket && - socket_node->type() != - grpc_core::channelz::BaseNode::EntityType::kListenSocket)) { - return nullptr; - } - grpc_core::Json json = grpc_core::Json::FromObject({ - {"socket", socket_node->RenderJson()}, - }); - return grpc_core::channelz::v2tov1::ApplyHacks( - grpc_core::JsonDump(json).c_str()); + return nullptr; + } + if (!serialized_v1.ok()) { + LOG(ERROR) << "Failed to convert socket: " << serialized_v1.status(); + return nullptr; + } + // The old API returned a JSON object with a "socket" key. + // The new converter returns the socket JSON directly. We need to wrap it. + auto json = grpc_core::JsonParse(*serialized_v1); + if (!json.ok()) { + LOG(ERROR) << "Failed to parse converted socket json: " << json.status(); + return nullptr; } + grpc_core::Json wrapped_json = grpc_core::Json::FromObject({ + {"socket", std::move(*json)}, + }); + std::string json_str = grpc_core::JsonDump(wrapped_json); + return gpr_strdup(json_str.c_str()); } diff --git a/src/core/lib/experiments/experiments.cc b/src/core/lib/experiments/experiments.cc index 659de292c68d2..badba0c90c0d9 100644 --- a/src/core/lib/experiments/experiments.cc +++ b/src/core/lib/experiments/experiments.cc @@ -35,12 +35,6 @@ const char* const const char* const additional_constraints_call_tracer_send_initial_metadata_is_an_annotation = "{}"; -const char* const description_channelz_use_v2_for_v1_api = - "Use the v2 channelz API for the v1 channelz API."; -const char* const additional_constraints_channelz_use_v2_for_v1_api = "{}"; -const char* const description_channelz_use_v2_for_v1_service = - "Use the v2 channelz service for the v1 channelz service."; -const char* const additional_constraints_channelz_use_v2_for_v1_service = "{}"; const char* const description_chaotic_good_connect_deadline = "Use the deadline from the connect args in chaotic good connector"; const char* const additional_constraints_chaotic_good_connect_deadline = "{}"; @@ -259,13 +253,6 @@ const ExperimentMetadata g_experiment_metadata[] = { description_call_tracer_send_initial_metadata_is_an_annotation, additional_constraints_call_tracer_send_initial_metadata_is_an_annotation, nullptr, 0, true, true}, - {"channelz_use_v2_for_v1_api", description_channelz_use_v2_for_v1_api, - additional_constraints_channelz_use_v2_for_v1_api, nullptr, 0, false, - true}, - {"channelz_use_v2_for_v1_service", - description_channelz_use_v2_for_v1_service, - additional_constraints_channelz_use_v2_for_v1_service, nullptr, 0, false, - true}, {"chaotic_good_connect_deadline", description_chaotic_good_connect_deadline, additional_constraints_chaotic_good_connect_deadline, nullptr, 0, true, true}, @@ -439,12 +426,6 @@ const char* const const char* const additional_constraints_call_tracer_send_initial_metadata_is_an_annotation = "{}"; -const char* const description_channelz_use_v2_for_v1_api = - "Use the v2 channelz API for the v1 channelz API."; -const char* const additional_constraints_channelz_use_v2_for_v1_api = "{}"; -const char* const description_channelz_use_v2_for_v1_service = - "Use the v2 channelz service for the v1 channelz service."; -const char* const additional_constraints_channelz_use_v2_for_v1_service = "{}"; const char* const description_chaotic_good_connect_deadline = "Use the deadline from the connect args in chaotic good connector"; const char* const additional_constraints_chaotic_good_connect_deadline = "{}"; @@ -663,13 +644,6 @@ const ExperimentMetadata g_experiment_metadata[] = { description_call_tracer_send_initial_metadata_is_an_annotation, additional_constraints_call_tracer_send_initial_metadata_is_an_annotation, nullptr, 0, true, true}, - {"channelz_use_v2_for_v1_api", description_channelz_use_v2_for_v1_api, - additional_constraints_channelz_use_v2_for_v1_api, nullptr, 0, false, - true}, - {"channelz_use_v2_for_v1_service", - description_channelz_use_v2_for_v1_service, - additional_constraints_channelz_use_v2_for_v1_service, nullptr, 0, false, - true}, {"chaotic_good_connect_deadline", description_chaotic_good_connect_deadline, additional_constraints_chaotic_good_connect_deadline, nullptr, 0, true, true}, @@ -843,12 +817,6 @@ const char* const const char* const additional_constraints_call_tracer_send_initial_metadata_is_an_annotation = "{}"; -const char* const description_channelz_use_v2_for_v1_api = - "Use the v2 channelz API for the v1 channelz API."; -const char* const additional_constraints_channelz_use_v2_for_v1_api = "{}"; -const char* const description_channelz_use_v2_for_v1_service = - "Use the v2 channelz service for the v1 channelz service."; -const char* const additional_constraints_channelz_use_v2_for_v1_service = "{}"; const char* const description_chaotic_good_connect_deadline = "Use the deadline from the connect args in chaotic good connector"; const char* const additional_constraints_chaotic_good_connect_deadline = "{}"; @@ -1067,13 +1035,6 @@ const ExperimentMetadata g_experiment_metadata[] = { description_call_tracer_send_initial_metadata_is_an_annotation, additional_constraints_call_tracer_send_initial_metadata_is_an_annotation, nullptr, 0, true, true}, - {"channelz_use_v2_for_v1_api", description_channelz_use_v2_for_v1_api, - additional_constraints_channelz_use_v2_for_v1_api, nullptr, 0, false, - true}, - {"channelz_use_v2_for_v1_service", - description_channelz_use_v2_for_v1_service, - additional_constraints_channelz_use_v2_for_v1_service, nullptr, 0, false, - true}, {"chaotic_good_connect_deadline", description_chaotic_good_connect_deadline, additional_constraints_chaotic_good_connect_deadline, nullptr, 0, true, true}, diff --git a/src/core/lib/experiments/experiments.h b/src/core/lib/experiments/experiments.h index 5719b80e95a09..780f2cbc81706 100644 --- a/src/core/lib/experiments/experiments.h +++ b/src/core/lib/experiments/experiments.h @@ -64,8 +64,6 @@ inline bool IsCallTracerInTransportEnabled() { return true; } inline bool IsCallTracerSendInitialMetadataIsAnAnnotationEnabled() { return true; } -inline bool IsChannelzUseV2ForV1ApiEnabled() { return false; } -inline bool IsChannelzUseV2ForV1ServiceEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_CONNECT_DEADLINE inline bool IsChaoticGoodConnectDeadlineEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER @@ -137,8 +135,6 @@ inline bool IsCallTracerInTransportEnabled() { return true; } inline bool IsCallTracerSendInitialMetadataIsAnAnnotationEnabled() { return true; } -inline bool IsChannelzUseV2ForV1ApiEnabled() { return false; } -inline bool IsChannelzUseV2ForV1ServiceEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_CONNECT_DEADLINE inline bool IsChaoticGoodConnectDeadlineEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER @@ -210,8 +206,6 @@ inline bool IsCallTracerInTransportEnabled() { return true; } inline bool IsCallTracerSendInitialMetadataIsAnAnnotationEnabled() { return true; } -inline bool IsChannelzUseV2ForV1ApiEnabled() { return false; } -inline bool IsChannelzUseV2ForV1ServiceEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_CONNECT_DEADLINE inline bool IsChaoticGoodConnectDeadlineEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER @@ -281,8 +275,6 @@ enum ExperimentIds { kExperimentIdBufferListDeletionPrep, kExperimentIdCallTracerInTransport, kExperimentIdCallTracerSendInitialMetadataIsAnAnnotation, - kExperimentIdChannelzUseV2ForV1Api, - kExperimentIdChannelzUseV2ForV1Service, kExperimentIdChaoticGoodConnectDeadline, kExperimentIdChaoticGoodFramingLayer, kExperimentIdChttp2BoundWriteSize, @@ -347,14 +339,6 @@ inline bool IsCallTracerSendInitialMetadataIsAnAnnotationEnabled() { return IsExperimentEnabled< kExperimentIdCallTracerSendInitialMetadataIsAnAnnotation>(); } -#define GRPC_EXPERIMENT_IS_INCLUDED_CHANNELZ_USE_V2_FOR_V1_API -inline bool IsChannelzUseV2ForV1ApiEnabled() { - return IsExperimentEnabled(); -} -#define GRPC_EXPERIMENT_IS_INCLUDED_CHANNELZ_USE_V2_FOR_V1_SERVICE -inline bool IsChannelzUseV2ForV1ServiceEnabled() { - return IsExperimentEnabled(); -} #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_CONNECT_DEADLINE inline bool IsChaoticGoodConnectDeadlineEnabled() { return IsExperimentEnabled(); diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index e1b25b9c24143..fbd31303ba4ce 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -57,16 +57,6 @@ expiry: 2026/06/01 owner: ctiller@google.com test_tags: [] -- name: channelz_use_v2_for_v1_api - description: Use the v2 channelz API for the v1 channelz API. - expiry: 2026/02/01 - owner: ctiller@google.com - test_tags: [channelz_test] -- name: channelz_use_v2_for_v1_service - description: Use the v2 channelz service for the v1 channelz service. - expiry: 2026/02/01 - owner: ctiller@google.com - test_tags: [channelz_test] - name: chaotic_good_connect_deadline description: Use the deadline from the connect args in chaotic good connector expiry: 2026/02/01 diff --git a/src/cpp/server/channelz/channelz_service.cc b/src/cpp/server/channelz/channelz_service.cc index 501b045ce93bc..64712a9ef201a 100644 --- a/src/cpp/server/channelz/channelz_service.cc +++ b/src/cpp/server/channelz/channelz_service.cc @@ -28,7 +28,6 @@ #include "src/core/channelz/channelz.h" #include "src/core/channelz/channelz_registry.h" #include "src/core/channelz/v2tov1/convert.h" -#include "src/core/lib/experiments/experiments.h" #include "src/core/util/notification.h" #include "absl/strings/str_cat.h" @@ -71,131 +70,74 @@ class RegistryEntityFetcher } }; -grpc::protobuf::util::Status ParseJson(const char* json_str, - grpc::protobuf::Message* message) { - grpc::protobuf::json::JsonParseOptions options; - options.case_insensitive_enum_parsing = true; - auto r = - grpc::protobuf::json::JsonStringToMessage(json_str, message, options); - if (!r.ok()) { - LOG(ERROR) << "channelz json parse failed: error=" << r.ToString() - << " json:\n" - << json_str; - } - return r; -} - } // namespace Status ChannelzService::GetTopChannels( ServerContext* /*unused*/, const channelz::v1::GetTopChannelsRequest* request, channelz::v1::GetTopChannelsResponse* response) { - if (grpc_core::IsChannelzUseV2ForV1ServiceEnabled()) { - auto [channels, end] = - grpc_core::channelz::ChannelzRegistry::GetTopChannels( - request->start_channel_id()); - RegistryEntityFetcher fetcher; - for (const auto& channel_node : channels) { - if (channel_node == nullptr) continue; - auto serialized_v2 = - channel_node->SerializeEntityToString(kChannelzTimeout); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel( - serialized_v2, fetcher, false); - if (!serialized_v1.ok()) { - return Status(StatusCode::INTERNAL, - std::string(serialized_v1.status().message())); - } - if (!response->add_channel()->ParseFromString(*serialized_v1)) { - return Status(StatusCode::INTERNAL, - "Failed to parse converted channel"); - } - } - response->set_end(end); - } else { - char* json_str = - grpc_channelz_get_top_channels(request->start_channel_id()); - if (json_str == nullptr) { + auto [channels, end] = grpc_core::channelz::ChannelzRegistry::GetTopChannels( + request->start_channel_id()); + RegistryEntityFetcher fetcher; + for (const auto& channel_node : channels) { + if (channel_node == nullptr) continue; + auto serialized_v2 = + channel_node->SerializeEntityToString(kChannelzTimeout); + auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel( + serialized_v2, fetcher, false); + if (!serialized_v1.ok()) { return Status(StatusCode::INTERNAL, - "grpc_channelz_get_top_channels returned null"); + std::string(serialized_v1.status().message())); } - grpc::protobuf::util::Status s = ParseJson(json_str, response); - gpr_free(json_str); - if (!s.ok()) { - return Status(StatusCode::INTERNAL, s.ToString()); + if (!response->add_channel()->ParseFromString(*serialized_v1)) { + return Status(StatusCode::INTERNAL, "Failed to parse converted channel"); } } + response->set_end(end); return Status::OK; } Status ChannelzService::GetServers( ServerContext* /*unused*/, const channelz::v1::GetServersRequest* request, channelz::v1::GetServersResponse* response) { - if (grpc_core::IsChannelzUseV2ForV1ServiceEnabled()) { - auto [servers, end] = grpc_core::channelz::ChannelzRegistry::GetServers( - request->start_server_id()); - RegistryEntityFetcher fetcher; - for (const auto& server_node : servers) { - if (server_node == nullptr) continue; - auto serialized_v2 = - server_node->SerializeEntityToString(kChannelzTimeout); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertServer( - serialized_v2, fetcher, false); - if (!serialized_v1.ok()) { - return Status(StatusCode::INTERNAL, - std::string(serialized_v1.status().message())); - } - if (!response->add_server()->ParseFromString(*serialized_v1)) { - return Status(StatusCode::INTERNAL, "Failed to parse converted server"); - } - } - response->set_end(end); - } else { - char* json_str = grpc_channelz_get_servers(request->start_server_id()); - if (json_str == nullptr) { + auto [servers, end] = grpc_core::channelz::ChannelzRegistry::GetServers( + request->start_server_id()); + RegistryEntityFetcher fetcher; + for (const auto& server_node : servers) { + if (server_node == nullptr) continue; + auto serialized_v2 = server_node->SerializeEntityToString(kChannelzTimeout); + auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertServer( + serialized_v2, fetcher, false); + if (!serialized_v1.ok()) { return Status(StatusCode::INTERNAL, - "grpc_channelz_get_servers returned null"); + std::string(serialized_v1.status().message())); } - grpc::protobuf::util::Status s = ParseJson(json_str, response); - gpr_free(json_str); - if (!s.ok()) { - return Status(StatusCode::INTERNAL, s.ToString()); + if (!response->add_server()->ParseFromString(*serialized_v1)) { + return Status(StatusCode::INTERNAL, "Failed to parse converted server"); } } + response->set_end(end); return Status::OK; } Status ChannelzService::GetServer(ServerContext* /*unused*/, const channelz::v1::GetServerRequest* request, channelz::v1::GetServerResponse* response) { - if (grpc_core::IsChannelzUseV2ForV1ServiceEnabled()) { - auto server_node = - grpc_core::channelz::ChannelzRegistry::GetServer(request->server_id()); - if (server_node == nullptr) { - return Status(StatusCode::NOT_FOUND, "No object found for that ServerId"); - } - RegistryEntityFetcher fetcher; - auto serialized_v2 = server_node->SerializeEntityToString(kChannelzTimeout); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertServer( - serialized_v2, fetcher, false); - if (!serialized_v1.ok()) { - return Status(StatusCode::INTERNAL, - std::string(serialized_v1.status().message())); - } - if (!response->mutable_server()->ParseFromString(*serialized_v1)) { - return Status(StatusCode::INTERNAL, "Failed to parse converted server"); - } - } else { - char* json_str = grpc_channelz_get_server(request->server_id()); - if (json_str == nullptr) { - return Status(StatusCode::INTERNAL, - "grpc_channelz_get_server returned null"); - } - grpc::protobuf::util::Status s = ParseJson(json_str, response); - gpr_free(json_str); - if (!s.ok()) { - return Status(StatusCode::INTERNAL, s.ToString()); - } + auto server_node = + grpc_core::channelz::ChannelzRegistry::GetServer(request->server_id()); + if (server_node == nullptr) { + return Status(StatusCode::NOT_FOUND, "No object found for that ServerId"); + } + RegistryEntityFetcher fetcher; + auto serialized_v2 = server_node->SerializeEntityToString(kChannelzTimeout); + auto serialized_v1 = + grpc_core::channelz::v2tov1::ConvertServer(serialized_v2, fetcher, false); + if (!serialized_v1.ok()) { + return Status(StatusCode::INTERNAL, + std::string(serialized_v1.status().message())); + } + if (!response->mutable_server()->ParseFromString(*serialized_v1)) { + return Status(StatusCode::INTERNAL, "Failed to parse converted server"); } return Status::OK; } @@ -204,87 +146,56 @@ Status ChannelzService::GetServerSockets( ServerContext* /*unused*/, const channelz::v1::GetServerSocketsRequest* request, channelz::v1::GetServerSocketsResponse* response) { - if (grpc_core::IsChannelzUseV2ForV1ServiceEnabled()) { - auto server_node = - grpc_core::channelz::ChannelzRegistry::GetServer(request->server_id()); - if (server_node == nullptr) { - return Status(StatusCode::NOT_FOUND, "No object found for that ServerId"); - } - size_t max_results = request->max_results() == 0 - ? kMaxResults - : static_cast(request->max_results()); - RegistryEntityFetcher fetcher; - auto [sockets, end] = - grpc_core::channelz::ChannelzRegistry::GetChildrenOfType( - request->start_socket_id(), server_node.get(), - grpc_core::channelz::BaseNode::EntityType::kSocket, max_results); - for (const auto& socket_node : sockets) { - if (socket_node == nullptr) continue; - auto serialized_v2 = - socket_node->SerializeEntityToString(kChannelzTimeout); - auto converted = grpc_core::channelz::v2tov1::ConvertSocket( - serialized_v2, fetcher, false); - if (!converted.ok()) { - return Status(StatusCode::INTERNAL, - std::string(converted.status().message())); - } - grpc::channelz::v1::Socket socket; - if (!socket.ParseFromString(*converted)) { - return Status(StatusCode::INTERNAL, "Failed to parse converted socket"); - } - response->add_socket_ref()->CopyFrom(socket.ref()); - } - response->set_end(end); - } else { - char* json_str = grpc_channelz_get_server_sockets( - request->server_id(), request->start_socket_id(), - request->max_results()); - if (json_str == nullptr) { + auto server_node = + grpc_core::channelz::ChannelzRegistry::GetServer(request->server_id()); + if (server_node == nullptr) { + return Status(StatusCode::NOT_FOUND, "No object found for that ServerId"); + } + size_t max_results = request->max_results() == 0 + ? kMaxResults + : static_cast(request->max_results()); + RegistryEntityFetcher fetcher; + auto [sockets, end] = + grpc_core::channelz::ChannelzRegistry::GetChildrenOfType( + request->start_socket_id(), server_node.get(), + grpc_core::channelz::BaseNode::EntityType::kSocket, max_results); + for (const auto& socket_node : sockets) { + if (socket_node == nullptr) continue; + auto serialized_v2 = socket_node->SerializeEntityToString(kChannelzTimeout); + auto converted = grpc_core::channelz::v2tov1::ConvertSocket(serialized_v2, + fetcher, false); + if (!converted.ok()) { return Status(StatusCode::INTERNAL, - "grpc_channelz_get_server_sockets returned null"); + std::string(converted.status().message())); } - grpc::protobuf::util::Status s = ParseJson(json_str, response); - gpr_free(json_str); - if (!s.ok()) { - return Status(StatusCode::INTERNAL, s.ToString()); + grpc::channelz::v1::Socket socket; + if (!socket.ParseFromString(*converted)) { + return Status(StatusCode::INTERNAL, "Failed to parse converted socket"); } + response->add_socket_ref()->CopyFrom(socket.ref()); } + response->set_end(end); return Status::OK; } Status ChannelzService::GetChannel( ServerContext* /*unused*/, const channelz::v1::GetChannelRequest* request, channelz::v1::GetChannelResponse* response) { - if (grpc_core::IsChannelzUseV2ForV1ServiceEnabled()) { - auto channel_node = grpc_core::channelz::ChannelzRegistry::GetChannel( - request->channel_id()); - if (channel_node == nullptr) { - return Status(StatusCode::NOT_FOUND, - "No object found for that ChannelId"); - } - RegistryEntityFetcher fetcher; - auto serialized_v2 = - channel_node->SerializeEntityToString(kChannelzTimeout); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel( - serialized_v2, fetcher, false); - if (!serialized_v1.ok()) { - return Status(StatusCode::INTERNAL, - std::string(serialized_v1.status().message())); - } - if (!response->mutable_channel()->ParseFromString(*serialized_v1)) { - return Status(StatusCode::INTERNAL, "Failed to parse converted channel"); - } - } else { - char* json_str = grpc_channelz_get_channel(request->channel_id()); - if (json_str == nullptr) { - return Status(StatusCode::NOT_FOUND, - "No object found for that ChannelId"); - } - grpc::protobuf::util::Status s = ParseJson(json_str, response); - gpr_free(json_str); - if (!s.ok()) { - return Status(StatusCode::INTERNAL, s.ToString()); - } + auto channel_node = + grpc_core::channelz::ChannelzRegistry::GetChannel(request->channel_id()); + if (channel_node == nullptr) { + return Status(StatusCode::NOT_FOUND, "No object found for that ChannelId"); + } + RegistryEntityFetcher fetcher; + auto serialized_v2 = channel_node->SerializeEntityToString(kChannelzTimeout); + auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertChannel( + serialized_v2, fetcher, false); + if (!serialized_v1.ok()) { + return Status(StatusCode::INTERNAL, + std::string(serialized_v1.status().message())); + } + if (!response->mutable_channel()->ParseFromString(*serialized_v1)) { + return Status(StatusCode::INTERNAL, "Failed to parse converted channel"); } return Status::OK; } @@ -293,37 +204,23 @@ Status ChannelzService::GetSubchannel( ServerContext* /*unused*/, const channelz::v1::GetSubchannelRequest* request, channelz::v1::GetSubchannelResponse* response) { - if (grpc_core::IsChannelzUseV2ForV1ServiceEnabled()) { - auto subchannel_node = grpc_core::channelz::ChannelzRegistry::GetSubchannel( - request->subchannel_id()); - if (subchannel_node == nullptr) { - return Status(StatusCode::NOT_FOUND, - "No object found for that SubchannelId"); - } - RegistryEntityFetcher fetcher; - auto serialized_v2 = - subchannel_node->SerializeEntityToString(kChannelzTimeout); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertSubchannel( - serialized_v2, fetcher, false); - if (!serialized_v1.ok()) { - return Status(StatusCode::INTERNAL, - std::string(serialized_v1.status().message())); - } - if (!response->mutable_subchannel()->ParseFromString(*serialized_v1)) { - return Status(StatusCode::INTERNAL, - "Failed to parse converted subchannel"); - } - } else { - char* json_str = grpc_channelz_get_subchannel(request->subchannel_id()); - if (json_str == nullptr) { - return Status(StatusCode::NOT_FOUND, - "No object found for that SubchannelId"); - } - grpc::protobuf::util::Status s = ParseJson(json_str, response); - gpr_free(json_str); - if (!s.ok()) { - return Status(StatusCode::INTERNAL, s.ToString()); - } + auto subchannel_node = grpc_core::channelz::ChannelzRegistry::GetSubchannel( + request->subchannel_id()); + if (subchannel_node == nullptr) { + return Status(StatusCode::NOT_FOUND, + "No object found for that SubchannelId"); + } + RegistryEntityFetcher fetcher; + auto serialized_v2 = + subchannel_node->SerializeEntityToString(kChannelzTimeout); + auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertSubchannel( + serialized_v2, fetcher, false); + if (!serialized_v1.ok()) { + return Status(StatusCode::INTERNAL, + std::string(serialized_v1.status().message())); + } + if (!response->mutable_subchannel()->ParseFromString(*serialized_v1)) { + return Status(StatusCode::INTERNAL, "Failed to parse converted subchannel"); } return Status::OK; } @@ -331,51 +228,39 @@ Status ChannelzService::GetSubchannel( Status ChannelzService::GetSocket(ServerContext* /*unused*/, const channelz::v1::GetSocketRequest* request, channelz::v1::GetSocketResponse* response) { - if (grpc_core::IsChannelzUseV2ForV1ServiceEnabled()) { - auto node = - grpc_core::channelz::ChannelzRegistry::GetNode(request->socket_id()); - if (node == nullptr) { - return Status(StatusCode::NOT_FOUND, "No object found for that SocketId"); + auto node = + grpc_core::channelz::ChannelzRegistry::GetNode(request->socket_id()); + if (node == nullptr) { + return Status(StatusCode::NOT_FOUND, "No object found for that SocketId"); + } + RegistryEntityFetcher fetcher; + if (node->type() == grpc_core::channelz::BaseNode::EntityType::kSocket) { + auto serialized_v2 = node->SerializeEntityToString(kChannelzTimeout); + auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertSocket( + serialized_v2, fetcher, false); + if (!serialized_v1.ok()) { + return Status(StatusCode::INTERNAL, + std::string(serialized_v1.status().message())); } - RegistryEntityFetcher fetcher; - if (node->type() == grpc_core::channelz::BaseNode::EntityType::kSocket) { - auto serialized_v2 = node->SerializeEntityToString(kChannelzTimeout); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertSocket( - serialized_v2, fetcher, false); - if (!serialized_v1.ok()) { - return Status(StatusCode::INTERNAL, - std::string(serialized_v1.status().message())); - } - if (!response->mutable_socket()->ParseFromString(*serialized_v1)) { - return Status(StatusCode::INTERNAL, "Failed to parse converted socket"); - } - } else if (node->type() == - grpc_core::channelz::BaseNode::EntityType::kListenSocket) { - auto serialized_v2 = node->SerializeEntityToString(kChannelzTimeout); - auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertListenSocket( - serialized_v2, fetcher, false); - if (!serialized_v1.ok()) { - return Status(StatusCode::INTERNAL, - std::string(serialized_v1.status().message())); - } - if (!response->mutable_socket()->mutable_ref()->ParseFromString( - *serialized_v1)) { - return Status(StatusCode::INTERNAL, - "Failed to parse converted listen socket"); - } - } else { - return Status(StatusCode::NOT_FOUND, "No object found for that SocketId"); + if (!response->mutable_socket()->ParseFromString(*serialized_v1)) { + return Status(StatusCode::INTERNAL, "Failed to parse converted socket"); } - } else { - char* json_str = grpc_channelz_get_socket(request->socket_id()); - if (json_str == nullptr) { - return Status(StatusCode::NOT_FOUND, "No object found for that SocketId"); + } else if (node->type() == + grpc_core::channelz::BaseNode::EntityType::kListenSocket) { + auto serialized_v2 = node->SerializeEntityToString(kChannelzTimeout); + auto serialized_v1 = grpc_core::channelz::v2tov1::ConvertListenSocket( + serialized_v2, fetcher, false); + if (!serialized_v1.ok()) { + return Status(StatusCode::INTERNAL, + std::string(serialized_v1.status().message())); } - grpc::protobuf::util::Status s = ParseJson(json_str, response); - gpr_free(json_str); - if (!s.ok()) { - return Status(StatusCode::INTERNAL, s.ToString()); + if (!response->mutable_socket()->mutable_ref()->ParseFromString( + *serialized_v1)) { + return Status(StatusCode::INTERNAL, + "Failed to parse converted listen socket"); } + } else { + return Status(StatusCode::NOT_FOUND, "No object found for that SocketId"); } return Status::OK; } From 3eb8a898e0ab08701b6cdea8fee0222766bbe5a0 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 23 Jan 2026 11:28:50 -0800 Subject: [PATCH 16/67] Display Promise details in Zviz using a monospace font. Introduces a new layout intent `kCode` to render text with a monospace font and preserved whitespace. This is used for formatting `grpc::channelz::v2::Promise` objects in Zviz, making their structure clearer. Also, applies `white-space: pre-wrap` to the general `.zviz-data` style. PiperOrigin-RevId: 860187243 --- src/core/channelz/zviz/data.cc | 2 +- src/core/channelz/zviz/layout.h | 4 ++++ src/core/channelz/zviz/style.cc | 2 ++ test/core/channelz/zviz/data_test.cc | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/core/channelz/zviz/data.cc b/src/core/channelz/zviz/data.cc index fa356b507b796..f9c5f6cbf9eb8 100644 --- a/src/core/channelz/zviz/data.cc +++ b/src/core/channelz/zviz/data.cc @@ -262,7 +262,7 @@ bool PromiseFormatter(Environment&, google::protobuf::Any value, layout::Element& element) { grpc::channelz::v2::Promise promise; if (!value.UnpackTo(&promise)) return false; - element.AppendText(layout::Intent::kData, grpc_zviz::Format(promise)); + element.AppendText(layout::Intent::kCode, grpc_zviz::Format(promise)); return true; } diff --git a/src/core/channelz/zviz/layout.h b/src/core/channelz/zviz/layout.h index 9fe76d1f61263..bb82466277bc9 100644 --- a/src/core/channelz/zviz/layout.h +++ b/src/core/channelz/zviz/layout.h @@ -37,11 +37,15 @@ enum class Intent { kKey, kValue, kWarning, + kCode, }; template void AbslStringify(Sink& sink, Intent intent) { switch (intent) { + case Intent::kCode: + sink.Append("code"); + break; case Intent::kBanner: sink.Append("banner"); break; diff --git a/src/core/channelz/zviz/style.cc b/src/core/channelz/zviz/style.cc index 88066594f4402..f2202c3d18e8e 100644 --- a/src/core/channelz/zviz/style.cc +++ b/src/core/channelz/zviz/style.cc @@ -50,6 +50,8 @@ body { margin-top: 0; } .zviz-data { + white-space: pre-wrap; + font-family: monospace; } .zviz-key { font-weight: bold; diff --git a/test/core/channelz/zviz/data_test.cc b/test/core/channelz/zviz/data_test.cc index 9a0d89809f7b6..edfd3ee78ea25 100644 --- a/test/core/channelz/zviz/data_test.cc +++ b/test/core/channelz/zviz/data_test.cc @@ -835,7 +835,7 @@ TEST(DataTest, PromiseInData) { } )pb", R"([0] DATA some_promise type.googleapis.com/grpc.channelz.v2.Promise -[0] APPEND_TEXT data Map( +[0] APPEND_TEXT code Map( Unknown(the_promise), the_map_fn ))"); From e92a783dff26268de3fe6f4b1e1c3eca19a2f6e8 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 23 Jan 2026 11:39:28 -0800 Subject: [PATCH 17/67] [experiments] update expiration dates (#41468) Updates expiration dates for the following experiments: - call_tracer_in_transport: This is already enabled in OSS but is blocked internally, so the experiment will have to stick around for a while longer. - error_flatten and rr_wrr_connect_from_random_index: These are both fully rolled out internally and have not caused any problems. It looks like I never enabled them in OSS, though, so I'll plan to do that in subsequent PRs, and I'll keep the experiments around for one more OSS release, just to be safe. - pick_first_ready_to_connecting: This is in the process of rolling out internally, but I expect the change to be a no-op, so I will enable it in OSS in a subsequent PR. The experiment will need to stick around until the internal rollout completes. - subchannel_wrapper_cleanup_on_orphan: This is in the process of rolling out internally. Once that completes, I'll enable it in OSS. - subchannel_connection_scaling: This feature hasn't even fully landed yet, much less started rolling out, so it will need a while. Closes #41468 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41468 from markdroth:experiment_expiration 918275c1841846663e6c99c513c32b3a0d651b12 PiperOrigin-RevId: 860191357 --- src/core/lib/experiments/experiments.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index fbd31303ba4ce..436d836687f49 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -48,7 +48,7 @@ test_tags: [core_end2end_test] - name: call_tracer_in_transport description: Transport directly passes byte counts to CallTracer. - expiry: 2026/02/01 + expiry: 2026/09/01 owner: roth@google.com test_tags: [] allow_in_fuzzing_config: false @@ -75,7 +75,7 @@ test_tags: [core_end2end_test] - name: error_flatten description: Flatten errors to ordinary absl::Status form. - expiry: 2026/02/01 + expiry: 2026/04/01 owner: roth@google.com test_tags: ["core_end2end_test", "cpp_end2end_test", "xds_end2end_test", "error_tests"] @@ -211,7 +211,7 @@ description: When the subchannel goes from READY to CONNECTING or TRANSIENT_FAILURE, pick_first goes to CONNECTING and starts a new Happy Eyeballs pass. - expiry: 2026/02/01 + expiry: 2026/05/01 owner: roth@google.com test_tags: ["lb_unit_test", "cpp_lb_end2end_test"] - name: pipelined_read_secure_endpoint @@ -282,7 +282,7 @@ description: RR and WRR LB policies start connecting from a random index in the address list. - expiry: 2026/02/01 + expiry: 2026/04/01 owner: roth@google.com test_tags: ["lb_unit_test", "cpp_lb_end2end_test"] - name: schedule_cancellation_over_write @@ -329,14 +329,14 @@ test_tags: ["promise_test"] - name: subchannel_connection_scaling description: Subchannel connection scaling support. - expiry: 2026/02/01 + expiry: 2026/07/01 owner: roth@google.com test_tags: ["cpp_lb_end2end_test", "chttp2_keepalive_tests"] - name: subchannel_wrapper_cleanup_on_orphan description: Fixes the subchannel wrapper to drop any non-cancelled watchers when it gets orphaned. - expiry: 2026/01/15 + expiry: 2026/05/15 owner: roth@google.com test_tags: ["cpp_end2end_test", "xds_end2end_test"] - name: tcp_frame_size_tuning From ae5db917d001f9d98ab6531a0302e82d55dab0ea Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Fri, 23 Jan 2026 14:21:55 -0800 Subject: [PATCH 18/67] [experiments] Update expiration dates (#41470) The plan for the `event_engine_poller_for_python` experiment is to roll it out in the next release, and then potentially remove it for the release after that. So I pushed that one out to around the 1.80 release date. Resolving the other EventEngine experiments is blocked on Python, so I moved those to April. And the fork support experiment will require some extra testing that I'm not sure of yet, so I pushed that one to May Closes #41470 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41470 from murgatroid99:experiments_update 7ffba815829e32d4101cdb6dfba1f18bd066ddfb PiperOrigin-RevId: 860252919 --- src/core/lib/experiments/experiments.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index 436d836687f49..807bb8790dd2d 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -82,19 +82,19 @@ allow_in_fuzzing_config: false - name: event_engine_callback_cq description: Use EventEngine instead of the CallbackAlternativeCQ. - expiry: 2026/01/23 + expiry: 2026/04/23 owner: mlumish@google.com requires: ["event_engine_client", "event_engine_listener"] - name: event_engine_client description: Use EventEngine clients instead of iomgr's grpc_tcp_client - expiry: 2026/01/23 + expiry: 2026/04/23 owner: mlumish@google.com test_tags: ["core_end2end_test", "event_engine_client_test"] uses_polling: true allow_in_fuzzing_config: false - name: event_engine_dns description: If set, use EventEngine DNSResolver for client channel resolution - expiry: 2026/01/23 + expiry: 2026/04/23 owner: mlumish@google.com test_tags: ["cancel_ares_query_test", "resolver_component_tests_runner_invoker"] @@ -102,14 +102,14 @@ uses_polling: true - name: event_engine_dns_non_client_channel description: If set, use EventEngine DNSResolver in other places besides client channel. - expiry: 2026/01/23 + expiry: 2026/04/23 owner: mlumish@google.com test_tags: ["core_end2end_test"] allow_in_fuzzing_config: false uses_polling: true - name: event_engine_for_all_other_endpoints description: Use EventEngine endpoints for all call sites, including direct uses of grpc_tcp_create. - expiry: 2026/01/23 + expiry: 2026/04/23 owner: mlumish@google.com test_tags: ["core_end2end_test"] allow_in_fuzzing_config: false @@ -123,21 +123,21 @@ ] - name: event_engine_fork description: Enables event engine fork handling, including onfork events and file descriptor generations - expiry: 2026/01/23 + expiry: 2026/05/23 owner: mlumish@google.com test_tags: ["core_end2end_test", "event_engine_fork_test"] uses_polling: true allow_in_fuzzing_config: false - name: event_engine_listener description: Use EventEngine listeners instead of iomgr's grpc_tcp_server - expiry: 2026/02/01 + expiry: 2026/04/23 owner: mlumish@google.com test_tags: ["core_end2end_test", "event_engine_listener_test"] uses_polling: true allow_in_fuzzing_config: false - name: event_engine_poller_for_python description: "Enable event engine poller in gRPC Python" - expiry: 2026/01/16 + expiry: 2026/03/16 owner: mlumish@google.com test_tags: [] uses_polling: true @@ -226,7 +226,7 @@ description: Code outside iomgr that relies directly on pollsets will use non-pollset alternatives when enabled. - expiry: 2026/01/23 + expiry: 2026/04/23 owner: mlumish@google.com test_tags: ["core_end2end_test"] requires: ["event_engine_client", "event_engine_listener"] From a0b18d453e5dc23cb9117b05111bdffbb8eeaed5 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 23 Jan 2026 15:15:18 -0800 Subject: [PATCH 19/67] [RR and WRR] enable change to connect from a random index (#41472) Enable a change for RR and WRR LB policies to start connecting from a random index in the subchannel list, to avoid sending too much traffic to the first address on the list. See #40235 for original implementation. Closes #41472 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41472 from markdroth:rr_wrr_connect_from_random_index_enable 1000ab3794b9f40c5a45027d285ea4bd1879dc29 PiperOrigin-RevId: 860273422 --- bazel/experiments.bzl | 24 ++++++++++++++++++------ src/core/lib/experiments/experiments.cc | 6 +++--- src/core/lib/experiments/experiments.h | 9 ++++++--- src/core/lib/experiments/rollouts.yaml | 2 ++ 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl index 43885c91163f6..238ebd747f054 100644 --- a/bazel/experiments.bzl +++ b/bazel/experiments.bzl @@ -115,7 +115,6 @@ EXPERIMENTS = { ], "cpp_lb_end2end_test": [ "pick_first_ready_to_connecting", - "rr_wrr_connect_from_random_index", "subchannel_connection_scaling", ], "endpoint_test": [ @@ -135,7 +134,6 @@ EXPERIMENTS = { ], "lb_unit_test": [ "pick_first_ready_to_connecting", - "rr_wrr_connect_from_random_index", ], "minimal_stack_test": [ "fuse_filters", @@ -173,12 +171,18 @@ EXPERIMENTS = { "event_engine_listener", "event_engine_secure_endpoint", ], + "cpp_lb_end2end_test": [ + "rr_wrr_connect_from_random_index", + ], "event_engine_client_test": [ "event_engine_client", ], "event_engine_listener_test": [ "event_engine_listener", ], + "lb_unit_test": [ + "rr_wrr_connect_from_random_index", + ], "posix_endpoint_test": [ "event_engine_secure_endpoint", ], @@ -224,7 +228,6 @@ EXPERIMENTS = { ], "cpp_lb_end2end_test": [ "pick_first_ready_to_connecting", - "rr_wrr_connect_from_random_index", "subchannel_connection_scaling", ], "endpoint_test": [ @@ -244,7 +247,6 @@ EXPERIMENTS = { ], "lb_unit_test": [ "pick_first_ready_to_connecting", - "rr_wrr_connect_from_random_index", ], "minimal_stack_test": [ "fuse_filters", @@ -282,12 +284,18 @@ EXPERIMENTS = { "event_engine_listener", "event_engine_secure_endpoint", ], + "cpp_lb_end2end_test": [ + "rr_wrr_connect_from_random_index", + ], "event_engine_client_test": [ "event_engine_client", ], "event_engine_listener_test": [ "event_engine_listener", ], + "lb_unit_test": [ + "rr_wrr_connect_from_random_index", + ], "posix_endpoint_test": [ "event_engine_secure_endpoint", ], @@ -333,7 +341,6 @@ EXPERIMENTS = { ], "cpp_lb_end2end_test": [ "pick_first_ready_to_connecting", - "rr_wrr_connect_from_random_index", "subchannel_connection_scaling", ], "endpoint_test": [ @@ -353,7 +360,6 @@ EXPERIMENTS = { ], "lb_unit_test": [ "pick_first_ready_to_connecting", - "rr_wrr_connect_from_random_index", ], "minimal_stack_test": [ "fuse_filters", @@ -391,12 +397,18 @@ EXPERIMENTS = { "event_engine_listener", "event_engine_secure_endpoint", ], + "cpp_lb_end2end_test": [ + "rr_wrr_connect_from_random_index", + ], "event_engine_client_test": [ "event_engine_client", ], "event_engine_listener_test": [ "event_engine_listener", ], + "lb_unit_test": [ + "rr_wrr_connect_from_random_index", + ], "posix_endpoint_test": [ "event_engine_secure_endpoint", ], diff --git a/src/core/lib/experiments/experiments.cc b/src/core/lib/experiments/experiments.cc index badba0c90c0d9..f7c20162e25bd 100644 --- a/src/core/lib/experiments/experiments.cc +++ b/src/core/lib/experiments/experiments.cc @@ -357,7 +357,7 @@ const ExperimentMetadata g_experiment_metadata[] = { additional_constraints_return_preexisting_errors, nullptr, 0, false, true}, {"rr_wrr_connect_from_random_index", description_rr_wrr_connect_from_random_index, - additional_constraints_rr_wrr_connect_from_random_index, nullptr, 0, false, + additional_constraints_rr_wrr_connect_from_random_index, nullptr, 0, true, true}, {"schedule_cancellation_over_write", description_schedule_cancellation_over_write, @@ -748,7 +748,7 @@ const ExperimentMetadata g_experiment_metadata[] = { additional_constraints_return_preexisting_errors, nullptr, 0, false, true}, {"rr_wrr_connect_from_random_index", description_rr_wrr_connect_from_random_index, - additional_constraints_rr_wrr_connect_from_random_index, nullptr, 0, false, + additional_constraints_rr_wrr_connect_from_random_index, nullptr, 0, true, true}, {"schedule_cancellation_over_write", description_schedule_cancellation_over_write, @@ -1139,7 +1139,7 @@ const ExperimentMetadata g_experiment_metadata[] = { additional_constraints_return_preexisting_errors, nullptr, 0, false, true}, {"rr_wrr_connect_from_random_index", description_rr_wrr_connect_from_random_index, - additional_constraints_rr_wrr_connect_from_random_index, nullptr, 0, false, + additional_constraints_rr_wrr_connect_from_random_index, nullptr, 0, true, true}, {"schedule_cancellation_over_write", description_schedule_cancellation_over_write, diff --git a/src/core/lib/experiments/experiments.h b/src/core/lib/experiments/experiments.h index 780f2cbc81706..44984ff1122fc 100644 --- a/src/core/lib/experiments/experiments.h +++ b/src/core/lib/experiments/experiments.h @@ -110,7 +110,8 @@ inline bool IsPromiseBasedInprocTransportEnabled() { return false; } inline bool IsPromiseFilterSendCancelMetadataEnabled() { return false; } inline bool IsRetryInCallv3Enabled() { return false; } inline bool IsReturnPreexistingErrorsEnabled() { return false; } -inline bool IsRrWrrConnectFromRandomIndexEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_RR_WRR_CONNECT_FROM_RANDOM_INDEX +inline bool IsRrWrrConnectFromRandomIndexEnabled() { return true; } inline bool IsScheduleCancellationOverWriteEnabled() { return false; } inline bool IsSecureEndpointOffloadLargeReadsEnabled() { return false; } inline bool IsSecureEndpointOffloadLargeWritesEnabled() { return false; } @@ -181,7 +182,8 @@ inline bool IsPromiseBasedInprocTransportEnabled() { return false; } inline bool IsPromiseFilterSendCancelMetadataEnabled() { return false; } inline bool IsRetryInCallv3Enabled() { return false; } inline bool IsReturnPreexistingErrorsEnabled() { return false; } -inline bool IsRrWrrConnectFromRandomIndexEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_RR_WRR_CONNECT_FROM_RANDOM_INDEX +inline bool IsRrWrrConnectFromRandomIndexEnabled() { return true; } inline bool IsScheduleCancellationOverWriteEnabled() { return false; } inline bool IsSecureEndpointOffloadLargeReadsEnabled() { return false; } inline bool IsSecureEndpointOffloadLargeWritesEnabled() { return false; } @@ -252,7 +254,8 @@ inline bool IsPromiseBasedInprocTransportEnabled() { return false; } inline bool IsPromiseFilterSendCancelMetadataEnabled() { return false; } inline bool IsRetryInCallv3Enabled() { return false; } inline bool IsReturnPreexistingErrorsEnabled() { return false; } -inline bool IsRrWrrConnectFromRandomIndexEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_RR_WRR_CONNECT_FROM_RANDOM_INDEX +inline bool IsRrWrrConnectFromRandomIndexEnabled() { return true; } inline bool IsScheduleCancellationOverWriteEnabled() { return false; } inline bool IsSecureEndpointOffloadLargeReadsEnabled() { return false; } inline bool IsSecureEndpointOffloadLargeWritesEnabled() { return false; } diff --git a/src/core/lib/experiments/rollouts.yaml b/src/core/lib/experiments/rollouts.yaml index 1605cc502d70f..8d9c8c29b5cce 100644 --- a/src/core/lib/experiments/rollouts.yaml +++ b/src/core/lib/experiments/rollouts.yaml @@ -92,6 +92,8 @@ default: false - name: promise_filter_send_cancel_metadata default: false +- name: rr_wrr_connect_from_random_index + default: true - name: schedule_cancellation_over_write default: false - name: skip_clear_peer_on_cancellation From 5b1ac76abd80e57b0c1300f1012b32db1600a83e Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 23 Jan 2026 16:34:41 -0800 Subject: [PATCH 20/67] [client_channel] return filters from ConfigSelector for each call (#41191) Splitting this out of #40938. In preparation for changing how we pass configs to xDS HTTP filters, this PR changes the ConfigSelector API such that it returns the filter chain for each RPC rather than just once when the ConfigSelector is first returned to the resolver. Currently, all ConfigSelector impls return the same filter chain for every RPC, so there is no functional change here. In a future PR, I will change the xDS ConfigSelector to create a separate filter chain for each route and then return the corresponding filter chain when it chooses the route for each RPC. Closes #41191 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41191 from markdroth:config_selector_returns_filters da7da1fb3583bdc52f061ca11b9a5b2963dee47b PiperOrigin-RevId: 860301573 --- BUILD | 1 + Package.swift | 1 + build_autogenerated.yaml | 2 + gRPC-C++.podspec | 2 + gRPC-Core.podspec | 2 + grpc.gemspec | 1 + package.xml | 1 + src/core/BUILD | 17 +- src/core/client_channel/client_channel.cc | 148 +++++++++++++----- src/core/client_channel/client_channel.h | 9 +- .../client_channel/client_channel_filter.cc | 72 ++++++--- .../client_channel/client_channel_filter.h | 2 - src/core/client_channel/config_selector.h | 29 ++-- src/core/client_channel/dynamic_filters.cc | 15 +- src/core/client_channel/dynamic_filters.h | 12 +- src/core/client_channel/retry_filter.cc | 2 +- src/core/client_channel/retry_filter.h | 4 +- .../fault_injection/fault_injection_filter.cc | 2 +- .../fault_injection/fault_injection_filter.h | 2 +- .../gcp_authentication_filter.cc | 2 +- .../gcp_authentication_filter.h | 2 +- .../stateful_session_filter.cc | 2 +- .../stateful_session_filter.h | 2 +- src/core/filter/filter_chain.h | 95 +++++++++++ src/core/resolver/xds/xds_resolver.cc | 125 +++++---------- src/core/xds/grpc/xds_http_fault_filter.cc | 6 +- src/core/xds/grpc/xds_http_fault_filter.h | 2 +- src/core/xds/grpc/xds_http_filter.h | 6 +- src/core/xds/grpc/xds_http_filter_registry.h | 3 +- .../xds/grpc/xds_http_gcp_authn_filter.cc | 6 +- src/core/xds/grpc/xds_http_gcp_authn_filter.h | 2 +- src/core/xds/grpc/xds_http_rbac_filter.cc | 4 +- src/core/xds/grpc/xds_http_rbac_filter.h | 2 +- .../grpc/xds_http_stateful_session_filter.cc | 6 +- .../grpc/xds_http_stateful_session_filter.h | 2 +- .../client_channel/client_channel_test.cc | 26 ++- test/core/xds/xds_http_filters_test.cc | 6 +- test/cpp/end2end/client_lb_end2end_test.cc | 6 +- tools/doxygen/Doxyfile.c++.internal | 1 + tools/doxygen/Doxyfile.core.internal | 1 + 40 files changed, 406 insertions(+), 225 deletions(-) create mode 100644 src/core/filter/filter_chain.h diff --git a/BUILD b/BUILD index 05964b3b03190..193c3034c4fc0 100644 --- a/BUILD +++ b/BUILD @@ -4076,6 +4076,7 @@ grpc_cc_library( "//src/core:error_utils", "//src/core:exec_ctx_wakeup_scheduler", "//src/core:experiments", + "//src/core:filter_chain", "//src/core:gpr_manual_constructor", "//src/core:grpc_backend_metric_data", "//src/core:grpc_channel_idle_filter", diff --git a/Package.swift b/Package.swift index 68f8451d1e191..06687576e42ec 100644 --- a/Package.swift +++ b/Package.swift @@ -1321,6 +1321,7 @@ let package = Package( "src/core/filter/blackboard.cc", "src/core/filter/blackboard.h", "src/core/filter/filter_args.h", + "src/core/filter/filter_chain.h", "src/core/filter/fused_filters.cc", "src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc", "src/core/handshaker/endpoint_info/endpoint_info_handshaker.h", diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index 1a4e08366a8b0..7487951e3bf4a 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -883,6 +883,7 @@ libs: - src/core/filter/auth/auth_filters.h - src/core/filter/blackboard.h - src/core/filter/filter_args.h + - src/core/filter/filter_chain.h - src/core/handshaker/endpoint_info/endpoint_info_handshaker.h - src/core/handshaker/handshaker.h - src/core/handshaker/handshaker_factory.h @@ -2602,6 +2603,7 @@ libs: - src/core/filter/auth/auth_filters.h - src/core/filter/blackboard.h - src/core/filter/filter_args.h + - src/core/filter/filter_chain.h - src/core/handshaker/endpoint_info/endpoint_info_handshaker.h - src/core/handshaker/handshaker.h - src/core/handshaker/handshaker_factory.h diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec index 00cb6dcb7c708..1376f251f2901 100644 --- a/gRPC-C++.podspec +++ b/gRPC-C++.podspec @@ -971,6 +971,7 @@ Pod::Spec.new do |s| 'src/core/filter/auth/auth_filters.h', 'src/core/filter/blackboard.h', 'src/core/filter/filter_args.h', + 'src/core/filter/filter_chain.h', 'src/core/handshaker/endpoint_info/endpoint_info_handshaker.h', 'src/core/handshaker/handshaker.h', 'src/core/handshaker/handshaker_factory.h', @@ -2365,6 +2366,7 @@ Pod::Spec.new do |s| 'src/core/filter/auth/auth_filters.h', 'src/core/filter/blackboard.h', 'src/core/filter/filter_args.h', + 'src/core/filter/filter_chain.h', 'src/core/handshaker/endpoint_info/endpoint_info_handshaker.h', 'src/core/handshaker/handshaker.h', 'src/core/handshaker/handshaker_factory.h', diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 6dca5b87ced1a..f391b36f9503c 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -1444,6 +1444,7 @@ Pod::Spec.new do |s| 'src/core/filter/blackboard.cc', 'src/core/filter/blackboard.h', 'src/core/filter/filter_args.h', + 'src/core/filter/filter_chain.h', 'src/core/filter/fused_filters.cc', 'src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc', 'src/core/handshaker/endpoint_info/endpoint_info_handshaker.h', @@ -3285,6 +3286,7 @@ Pod::Spec.new do |s| 'src/core/filter/auth/auth_filters.h', 'src/core/filter/blackboard.h', 'src/core/filter/filter_args.h', + 'src/core/filter/filter_chain.h', 'src/core/handshaker/endpoint_info/endpoint_info_handshaker.h', 'src/core/handshaker/handshaker.h', 'src/core/handshaker/handshaker_factory.h', diff --git a/grpc.gemspec b/grpc.gemspec index ca6f15ffbca24..c9381299d0114 100644 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -1327,6 +1327,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/filter/blackboard.cc ) s.files += %w( src/core/filter/blackboard.h ) s.files += %w( src/core/filter/filter_args.h ) + s.files += %w( src/core/filter/filter_chain.h ) s.files += %w( src/core/filter/fused_filters.cc ) s.files += %w( src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc ) s.files += %w( src/core/handshaker/endpoint_info/endpoint_info_handshaker.h ) diff --git a/package.xml b/package.xml index 7b9a4cb61f049..7d0ba846a3f00 100644 --- a/package.xml +++ b/package.xml @@ -1309,6 +1309,7 @@ + diff --git a/src/core/BUILD b/src/core/BUILD index 26924ebc82498..29fdfc73a9eb8 100644 --- a/src/core/BUILD +++ b/src/core/BUILD @@ -3812,6 +3812,19 @@ grpc_cc_library( ], ) +grpc_cc_library( + name = "filter_chain", + hdrs = [ + "filter/filter_chain.h", + ], + deps = [ + "filter_args", + "interception_chain", + "ref_counted", + "//:ref_counted_ptr", + ], +) + grpc_cc_library( name = "fused_filters", srcs = [ @@ -3902,6 +3915,7 @@ grpc_cc_library( "blackboard", "channel_fwd", "client_channel_internal_header", + "filter_chain", "grpc_check", "grpc_service_config", "interception_chain", @@ -6062,7 +6076,7 @@ grpc_cc_library( "blackboard", "channel_args", "channel_fwd", - "interception_chain", + "filter_chain", "json", "json_writer", "validation_errors", @@ -6434,7 +6448,6 @@ grpc_cc_library( "grpc_tls_credentials", "grpc_transport_chttp2_client_connector", "init_internally", - "interception_chain", "iomgr_fwd", "json", "json_args", diff --git a/src/core/client_channel/client_channel.cc b/src/core/client_channel/client_channel.cc index 502fa0789d9b2..24e34cda8786d 100644 --- a/src/core/client_channel/client_channel.cc +++ b/src/core/client_channel/client_channel.cc @@ -679,7 +679,7 @@ ClientChannel::ClientChannel( client_channel_factory_(client_channel_factory), channelz_node_(channel_args_.GetObject()), idle_timeout_(GetClientIdleTimeout(channel_args_)), - resolver_data_for_calls_(ResolverDataForCalls{}), + resolver_data_for_calls_(nullptr), picker_(nullptr), call_destination_( call_destination_factory->CreateCallDestination(picker_)), @@ -906,6 +906,72 @@ grpc_call* ClientChannel::CreateCall( compression_options(), std::move(arena), Ref()); } +namespace { + +class FilterChainImpl final : public FilterChain { + public: + explicit FilterChainImpl(RefCountedPtr destination) + : destination_(std::move(destination)) {} + + UnstartedCallDestination* destination() const { return destination_.get(); } + + private: + RefCountedPtr destination_; +}; + +class FilterChainBuilderImpl final : public FilterChainBuilder { + public: + FilterChainBuilderImpl( + bool enable_retries, const ChannelArgs& channel_args, + Blackboard* blackboard, + std::function on_server_trailing_metadata, + RefCountedPtr destination) + : enable_retries_(enable_retries), + channel_args_(channel_args), + blackboard_(blackboard), + on_server_trailing_metadata_(std::move(on_server_trailing_metadata)), + destination_(std::move(destination)) {} + + absl::StatusOr> Build() override { + if (builder_ == nullptr) InitBuilder(); + if (enable_retries_) builder_->Add(nullptr); + auto top_of_stack_destination = builder_->Build(destination_); + if (!top_of_stack_destination.ok()) { + return MaybeRewriteIllegalStatusCode(top_of_stack_destination.status(), + "channel construction"); + } + builder_.reset(); + return MakeRefCounted( + std::move(*top_of_stack_destination)); + } + + private: + void AddFilter(const FilterHandle& filter_handle, + RefCountedPtr config) override { + if (builder_ == nullptr) InitBuilder(); + filter_handle.AddToBuilder(builder_.get(), std::move(config)); + } + + void InitBuilder() { + builder_ = + std::make_unique(channel_args_, blackboard_); + if (on_server_trailing_metadata_ != nullptr) { + builder_->AddOnServerTrailingMetadata(on_server_trailing_metadata_); + } + CoreConfiguration::Get().channel_init().AddToInterceptionChainBuilder( + GRPC_CLIENT_CHANNEL, *builder_); + } + + const bool enable_retries_; + const ChannelArgs channel_args_; + const Blackboard* blackboard_; + const std::function on_server_trailing_metadata_; + const RefCountedPtr destination_; + std::unique_ptr builder_; +}; + +} // namespace + void ClientChannel::StartCall(UnstartedCallHandler unstarted_handler) { // Increment call count. if (idle_timeout_ != Duration::Zero()) idle_state_.IncreaseCallCount(); @@ -924,31 +990,32 @@ void ClientChannel::StartCall(UnstartedCallHandler unstarted_handler) { // Wait for the resolver result. CheckDelayed(self->resolver_data_for_calls_.NextWhen( [wait_for_ready]( - const absl::StatusOr result) { + const absl::StatusOr> + config_selector) { bool got_result = false; // If the resolver reports an error but the call is // wait_for_ready, keep waiting for the next result // instead of failing the call. - if (!result.ok()) { + if (!config_selector.ok()) { got_result = !wait_for_ready; } else { // Not an error. Make sure we actually have a result. - got_result = result->config_selector != nullptr; + got_result = *config_selector != nullptr; } return got_result; })), // Handle resolver result. [self, unstarted_handler]( - std::tuple, bool> + std::tuple>, bool> result_and_delayed) mutable { - auto& resolver_data = std::get<0>(result_and_delayed); - const bool was_queued = std::get<1>(result_and_delayed); - if (!resolver_data.ok()) return resolver_data.status(); + auto& [config_selector, was_queued] = result_and_delayed; + if (!config_selector.ok()) return config_selector.status(); // Apply service config to call. - absl::Status status = self->ApplyServiceConfigToCall( - *resolver_data->config_selector, - unstarted_handler.UnprocessedClientInitialMetadata()); - if (!status.ok()) return status; + absl::StatusOr> filter_chain = + self->ApplyServiceConfigToCall( + **config_selector, + unstarted_handler.UnprocessedClientInitialMetadata()); + if (!filter_chain.ok()) return filter_chain.status(); // If the call was queued, add trace annotation. if (was_queued) { auto* call_tracer = MaybeGetContext(); @@ -959,8 +1026,10 @@ void ClientChannel::StartCall(UnstartedCallHandler unstarted_handler) { } // Start the call on the destination provided by the // resolver. - resolver_data->call_destination->StartCall( - std::move(unstarted_handler)); + auto destination = + DownCast(filter_chain->get()) + ->destination(); + destination->StartCall(std::move(unstarted_handler)); return absl::OkStatus(); }); }); @@ -992,7 +1061,7 @@ void ClientChannel::DestroyResolverAndLbPolicyLocked() { resolver_.reset(); saved_service_config_.reset(); saved_config_selector_.reset(); - resolver_data_for_calls_.Set(ResolverDataForCalls{nullptr, nullptr}); + resolver_data_for_calls_.Set(nullptr); // Clear LB policy if set. if (lb_policy_ != nullptr) { GRPC_TRACE_LOG(client_channel, INFO) @@ -1324,35 +1393,26 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked( ChannelArgs new_args = args.SetObject(this).SetObject(saved_service_config_); // Construct filter stack. auto new_blackboard = MakeRefCounted(); - InterceptionChainBuilder builder(new_args, new_blackboard.get()); - if (idle_timeout_ != Duration::Zero()) { - builder.AddOnServerTrailingMetadata([this](ServerMetadata&) { - if (idle_state_.DecreaseCallCount()) StartIdleTimer(); - }); - } - CoreConfiguration::Get().channel_init().AddToInterceptionChainBuilder( - GRPC_CLIENT_CHANNEL, builder); - // Add filters returned by the config selector (e.g., xDS HTTP filters). - config_selector->AddFilters(builder, blackboard_.get(), new_blackboard.get()); const bool enable_retries = !channel_args_.WantMinimalStack() && channel_args_.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true); if (enable_retries) { RetryInterceptor::UpdateBlackboard(*saved_service_config_, blackboard_.get(), new_blackboard.get()); - builder.Add(nullptr); } - blackboard_ = std::move(new_blackboard); - // Create call destination. - auto top_of_stack_call_destination = builder.Build(call_destination_); - // Send result to data plane. - if (!top_of_stack_call_destination.ok()) { - resolver_data_for_calls_.Set(MaybeRewriteIllegalStatusCode( - top_of_stack_call_destination.status(), "channel construction")); - } else { - resolver_data_for_calls_.Set(ResolverDataForCalls{ - std::move(config_selector), std::move(*top_of_stack_call_destination)}); + std::function on_server_trailing_metadata; + if (idle_timeout_ != Duration::Zero()) { + on_server_trailing_metadata = [this](ServerMetadata&) { + if (idle_state_.DecreaseCallCount()) StartIdleTimer(); + }; } + FilterChainBuilderImpl filter_chain_builder( + enable_retries, new_args, new_blackboard.get(), + std::move(on_server_trailing_metadata), call_destination_); + config_selector->BuildFilterChains(filter_chain_builder, blackboard_.get(), + new_blackboard.get()); + blackboard_ = std::move(new_blackboard); + resolver_data_for_calls_.Set(std::move(config_selector)); } void ClientChannel::UpdateStateLocked(grpc_connectivity_state state, @@ -1423,7 +1483,8 @@ void ClientChannel::StartIdleTimer() { std::move(arena))); } -absl::Status ClientChannel::ApplyServiceConfigToCall( +absl::StatusOr> +ClientChannel::ApplyServiceConfigToCall( ConfigSelector& config_selector, ClientMetadata& client_initial_metadata) const { GRPC_TRACE_LOG(client_channel_call, INFO) @@ -1438,11 +1499,12 @@ absl::Status ClientChannel::ApplyServiceConfigToCall( GetContext()->New( GetContext()); // Use the ConfigSelector to determine the config for the call. - absl::Status call_config_status = config_selector.GetCallConfig( - {&client_initial_metadata, GetContext(), - service_config_call_data}); - if (!call_config_status.ok()) { - return MaybeRewriteIllegalStatusCode(call_config_status, "ConfigSelector"); + auto filter_chain = config_selector.GetCallConfig({&client_initial_metadata, + GetContext(), + service_config_call_data}); + if (!filter_chain.ok()) { + return MaybeRewriteIllegalStatusCode(filter_chain.status(), + "ConfigSelector"); } // Apply our own method params to the call. auto* method_params = DownCast( @@ -1467,7 +1529,7 @@ absl::Status ClientChannel::ApplyServiceConfigToCall( wait_for_ready->value = method_params->wait_for_ready().value(); } } - return absl::OkStatus(); + return filter_chain; } } // namespace grpc_core diff --git a/src/core/client_channel/client_channel.h b/src/core/client_channel/client_channel.h index 55e5f438c4a2e..43f1ce663cd4f 100644 --- a/src/core/client_channel/client_channel.h +++ b/src/core/client_channel/client_channel.h @@ -166,7 +166,7 @@ class ClientChannel : public Channel { // Applies service config settings from config_selector to the call. // May modify call context and client_initial_metadata. - absl::Status ApplyServiceConfigToCall( + absl::StatusOr> ApplyServiceConfigToCall( ConfigSelector& config_selector, ClientMetadata& client_initial_metadata) const; @@ -192,11 +192,8 @@ class ClientChannel : public Channel { // // Fields related to name resolution. // - struct ResolverDataForCalls { - RefCountedPtr config_selector; - RefCountedPtr call_destination; - }; - Observable> resolver_data_for_calls_; + Observable>> + resolver_data_for_calls_; // // Fields related to LB picks. diff --git a/src/core/client_channel/client_channel_filter.cc b/src/core/client_channel/client_channel_filter.cc index 68e69a5a242dc..22182b9067062 100644 --- a/src/core/client_channel/client_channel_filter.cc +++ b/src/core/client_channel/client_channel_filter.cc @@ -217,7 +217,7 @@ class ClientChannelFilter::CallData { grpc_closure* original_recv_trailing_metadata_ready_ = nullptr; grpc_closure recv_trailing_metadata_ready_; - RefCountedPtr dynamic_filters_; + RefCountedPtr dynamic_filters_; RefCountedPtr dynamic_call_; BufferedCall buffered_call_; @@ -1417,6 +1417,46 @@ void ClientChannelFilter::UpdateServiceConfigInControlPlaneLocked( << saved_config_selector_.get(); } +namespace { + +// Filter chain builder impl to inject into ConfigSelector. +class LegacyFilterChainBuilder final : public FilterChainBuilder { + public: + LegacyFilterChainBuilder(bool enable_retries, const ChannelArgs& channel_args, + const Blackboard* blackboard) + : enable_retries_(enable_retries), + channel_args_(channel_args), + blackboard_(blackboard) {} + + absl::StatusOr> Build() override { + if (enable_retries_) { + filters_.push_back({&RetryFilter::kFilterVtable, nullptr}); + } else { + filters_.push_back({&DynamicTerminationFilter::kFilterVtable, nullptr}); + } + RefCountedPtr dynamic_filters = + DynamicFilters::Create(channel_args_, std::move(filters_), blackboard_); + if (dynamic_filters == nullptr) { + return absl::InternalError("error constructing dynamic filter stack"); + } + filters_.clear(); + return dynamic_filters; + } + + private: + void AddFilter(const FilterHandle& filter_handle, + RefCountedPtr config) override { + filter_handle.AddToBuilder(&filters_, std::move(config)); + } + + const bool enable_retries_; + const ChannelArgs channel_args_; + const Blackboard* blackboard_; + std::vector filters_; +}; + +} // namespace + void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked( const ChannelArgs& args) { // Grab ref to service config. @@ -1437,19 +1477,15 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked( new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true); // Construct dynamic filter stack. auto new_blackboard = MakeRefCounted(); - std::vector filters = - config_selector->GetFilters(blackboard_.get(), new_blackboard.get()); if (enable_retries) { RetryFilter::UpdateBlackboard(*service_config, blackboard_.get(), new_blackboard.get()); - filters.push_back(&RetryFilter::kVtable); - } else { - filters.push_back(&DynamicTerminationFilter::kFilterVtable); } + LegacyFilterChainBuilder filter_chain_builder(enable_retries, new_args, + new_blackboard.get()); + config_selector->BuildFilterChains(filter_chain_builder, blackboard_.get(), + new_blackboard.get()); blackboard_ = std::move(new_blackboard); - RefCountedPtr dynamic_filters = - DynamicFilters::Create(new_args, std::move(filters), blackboard_.get()); - GRPC_CHECK(dynamic_filters != nullptr); // Grab data plane lock to update service config. // // We defer unreffing the old values (and deallocating memory) until @@ -1462,7 +1498,6 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked( // Old values will be unreffed after lock is released. service_config_.swap(service_config); config_selector_.swap(config_selector); - dynamic_filters_.swap(dynamic_filters); // Re-process queued calls asynchronously. ReprocessQueuedResolverCalls(); } @@ -1500,13 +1535,11 @@ void ClientChannelFilter::DestroyResolverAndLbPolicyLocked() { // after we release the lock. RefCountedPtr service_config_to_unref; RefCountedPtr config_selector_to_unref; - RefCountedPtr dynamic_filters_to_unref; { MutexLock lock(&resolution_mu_); received_service_config_data_ = false; service_config_to_unref = std::move(service_config_); config_selector_to_unref = std::move(config_selector_); - dynamic_filters_to_unref = std::move(dynamic_filters_); } // Clear LB policy if set. if (lb_policy_ != nullptr) { @@ -1849,14 +1882,14 @@ grpc_error_handle ClientChannelFilter::CallData::ApplyServiceConfigToCallLocked( auto* service_config_call_data = arena_->New(arena_); // Use the ConfigSelector to determine the config for the call. - absl::Status call_config_status = - (*config_selector) - ->GetCallConfig( - {send_initial_metadata(), arena_, service_config_call_data}); - if (!call_config_status.ok()) { + auto filter_chain = (*config_selector) + ->GetCallConfig({send_initial_metadata(), arena_, + service_config_call_data}); + if (!filter_chain.ok()) { return absl_status_to_grpc_error( - MaybeRewriteIllegalStatusCode(call_config_status, "ConfigSelector")); + MaybeRewriteIllegalStatusCode(filter_chain.status(), "ConfigSelector")); } + dynamic_filters_ = filter_chain->TakeAsSubclass(); // Apply our own method params to the call. auto* method_params = static_cast( service_config_call_data->GetMethodParsedConfig( @@ -1937,7 +1970,6 @@ bool ClientChannelFilter::CallData::CheckResolutionLocked( } // Result found. *config_selector = chand()->config_selector_; - dynamic_filters_ = chand()->dynamic_filters_; return true; } @@ -2105,7 +2137,7 @@ void ClientChannelFilter::CallData::CreateDynamicCall() { call_start_time_, deadline_, arena_, call_combiner_}; grpc_error_handle error; - DynamicFilters* channel_stack = args.channel_stack.get(); + const DynamicFilters* channel_stack = args.channel_stack.get(); GRPC_TRACE_LOG(client_channel_call, INFO) << "chand=" << chand() << " calld=" << this << ": creating dynamic call stack on channel_stack=" << channel_stack; diff --git a/src/core/client_channel/client_channel_filter.h b/src/core/client_channel/client_channel_filter.h index 025674fc8c48e..ca2ffba7934eb 100644 --- a/src/core/client_channel/client_channel_filter.h +++ b/src/core/client_channel/client_channel_filter.h @@ -276,8 +276,6 @@ class ClientChannelFilter final { RefCountedPtr service_config_ ABSL_GUARDED_BY(resolution_mu_); RefCountedPtr config_selector_ ABSL_GUARDED_BY(resolution_mu_); - RefCountedPtr dynamic_filters_ - ABSL_GUARDED_BY(resolution_mu_); // // Fields related to LB picks. Guarded by lb_mu_. diff --git a/src/core/client_channel/config_selector.h b/src/core/client_channel/config_selector.h index 89dd23809798c..d94f920ebf144 100644 --- a/src/core/client_channel/config_selector.h +++ b/src/core/client_channel/config_selector.h @@ -28,6 +28,7 @@ #include "src/core/call/metadata_batch.h" #include "src/core/client_channel/client_channel_internal.h" #include "src/core/filter/blackboard.h" +#include "src/core/filter/filter_chain.h" #include "src/core/lib/channel/channel_fwd.h" #include "src/core/lib/resource_quota/arena.h" #include "src/core/lib/slice/slice.h" @@ -61,15 +62,10 @@ class ConfigSelector : public RefCounted { } // The channel will call this when the resolver returns a new ConfigSelector - // to determine what set of dynamic filters will be configured. - virtual void AddFilters(InterceptionChainBuilder& /*builder*/, - const Blackboard* /*old_blackboard*/, - Blackboard* /*new_blackboard*/) {} - // TODO(roth): Remove this once the legacy filter stack goes away. - virtual std::vector GetFilters( - const Blackboard* /*old_blackboard*/, Blackboard* /*new_blackboard*/) { - return {}; - } + // to initialize the filter chains that the ConfigSelector may need. + virtual void BuildFilterChains(FilterChainBuilder& builder, + const Blackboard* old_blackboard, + Blackboard* new_blackboard) = 0; // Gets the configuration for the call and stores it in service config // call data. @@ -78,7 +74,8 @@ class ConfigSelector : public RefCounted { Arena* arena; ClientChannelServiceConfigCallData* service_config_call_data; }; - virtual absl::Status GetCallConfig(GetCallConfigArgs args) = 0; + virtual absl::StatusOr> GetCallConfig( + GetCallConfigArgs args) = 0; static absl::string_view ChannelArgName() { return GRPC_ARG_CONFIG_SELECTOR; } static int ChannelArgsCompare(const ConfigSelector* a, @@ -108,14 +105,21 @@ class DefaultConfigSelector final : public ConfigSelector { return kFactory.Create(); } - absl::Status GetCallConfig(GetCallConfigArgs args) override { + void BuildFilterChains(FilterChainBuilder& builder, + const Blackboard* /*old_blackboard*/, + Blackboard* /*new_blackboard*/) override { + filter_chain_ = builder.Build(); + } + + absl::StatusOr> GetCallConfig( + GetCallConfigArgs args) override { Slice* path = args.initial_metadata->get_pointer(HttpPathMetadata()); GRPC_CHECK_NE(path, nullptr); auto* parsed_method_configs = service_config_->GetMethodParsedConfigVector(path->c_slice()); args.service_config_call_data->SetServiceConfig(service_config_, parsed_method_configs); - return absl::OkStatus(); + return filter_chain_; } // Only comparing the ConfigSelector itself, not the underlying @@ -124,6 +128,7 @@ class DefaultConfigSelector final : public ConfigSelector { private: RefCountedPtr service_config_; + absl::StatusOr> filter_chain_; }; } // namespace grpc_core diff --git a/src/core/client_channel/dynamic_filters.cc b/src/core/client_channel/dynamic_filters.cc index 70abb90a1aab3..989156856dd88 100644 --- a/src/core/client_channel/dynamic_filters.cc +++ b/src/core/client_channel/dynamic_filters.cc @@ -109,7 +109,8 @@ void DynamicFilters::Call::Destroy(void* arg, grpc_error_handle /*error*/) { DynamicFilters::Call* self = static_cast(arg); // Keep some members before destroying the subchannel call. grpc_closure* after_call_stack_destroy = self->after_call_stack_destroy_; - RefCountedPtr channel_stack = std::move(self->channel_stack_); + RefCountedPtr channel_stack = + std::move(self->channel_stack_); // Destroy the subchannel call. self->~Call(); // Destroy the call stack. This should be after destroying the call, because @@ -136,12 +137,12 @@ void DynamicFilters::Call::IncrementRefCount(const DebugLocation& /*location*/, namespace { absl::StatusOr> CreateChannelStack( - const ChannelArgs& args, std::vector filters, + const ChannelArgs& args, std::vector filters, const Blackboard* blackboard) { ChannelStackBuilderImpl builder("DynamicFilters", GRPC_CLIENT_DYNAMIC, args); builder.SetBlackboard(blackboard); - for (auto filter : filters) { - builder.AppendFilter(filter); + for (auto& [filter, config] : filters) { + builder.AppendFilter(filter, std::move(config)); } return builder.Build(); } @@ -149,7 +150,7 @@ absl::StatusOr> CreateChannelStack( } // namespace RefCountedPtr DynamicFilters::Create( - const ChannelArgs& args, std::vector filters, + const ChannelArgs& args, std::vector filters, const Blackboard* blackboard) { // Attempt to create channel stack from requested filters. auto p = CreateChannelStack(args, std::move(filters), blackboard); @@ -158,13 +159,13 @@ RefCountedPtr DynamicFilters::Create( // Create with lame filter instead. auto error = p.status(); p = CreateChannelStack(args.Set(MakeLameClientErrorArg(&error)), - {&LameClientFilter::kFilter}, nullptr); + {{&LameClientFilter::kFilter, nullptr}}, nullptr); } return MakeRefCounted(std::move(p.value())); } RefCountedPtr DynamicFilters::CreateCall( - DynamicFilters::Call::Args args, grpc_error_handle* error) { + DynamicFilters::Call::Args args, grpc_error_handle* error) const { size_t allocation_size = GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(Call)) + channel_stack_->call_stack_size; Call* call = static_cast(args.arena->Alloc(allocation_size)); diff --git a/src/core/client_channel/dynamic_filters.h b/src/core/client_channel/dynamic_filters.h index 7e81a5d709f8b..263d41bb48918 100644 --- a/src/core/client_channel/dynamic_filters.h +++ b/src/core/client_channel/dynamic_filters.h @@ -24,6 +24,7 @@ #include #include "src/core/filter/blackboard.h" +#include "src/core/filter/filter_chain.h" #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/channel_fwd.h" #include "src/core/lib/channel/channel_stack.h" @@ -41,13 +42,13 @@ namespace grpc_core { -class DynamicFilters final : public RefCounted { +class DynamicFilters final : public FilterChain { public: // Implements the interface of RefCounted<>. class Call { public: struct Args { - RefCountedPtr channel_stack; + RefCountedPtr channel_stack; grpc_polling_entity* pollent; gpr_cycle_counter start_time; Timestamp deadline; @@ -84,18 +85,19 @@ class DynamicFilters final : public RefCounted { static void Destroy(void* arg, grpc_error_handle error); - RefCountedPtr channel_stack_; + RefCountedPtr channel_stack_; grpc_closure* after_call_stack_destroy_ = nullptr; }; static RefCountedPtr Create( - const ChannelArgs& args, std::vector filters, + const ChannelArgs& args, std::vector filters, const Blackboard* blackboard); explicit DynamicFilters(RefCountedPtr channel_stack) : channel_stack_(std::move(channel_stack)) {} - RefCountedPtr CreateCall(Call::Args args, grpc_error_handle* error); + RefCountedPtr CreateCall(Call::Args args, + grpc_error_handle* error) const; grpc_channel_stack* channel_stack() const { return channel_stack_.get(); } diff --git a/src/core/client_channel/retry_filter.cc b/src/core/client_channel/retry_filter.cc index ac494396b27dd..2e28c0565de79 100644 --- a/src/core/client_channel/retry_filter.cc +++ b/src/core/client_channel/retry_filter.cc @@ -127,7 +127,7 @@ const RetryMethodConfig* RetryFilter::GetRetryPolicy(Arena* arena) { svc_cfg_call_data->GetMethodParsedConfig(service_config_parser_index_)); } -const grpc_channel_filter RetryFilter::kVtable = { +const grpc_channel_filter RetryFilter::kFilterVtable = { RetryFilter::LegacyCallData::StartTransportStreamOpBatch, RetryFilter::StartTransportOp, sizeof(RetryFilter::LegacyCallData), diff --git a/src/core/client_channel/retry_filter.h b/src/core/client_channel/retry_filter.h index aa1286e3008e3..53430cb8de2eb 100644 --- a/src/core/client_channel/retry_filter.h +++ b/src/core/client_channel/retry_filter.h @@ -43,7 +43,7 @@ namespace grpc_core { class RetryFilter final { public: - static const grpc_channel_filter kVtable; + static const grpc_channel_filter kFilterVtable; static void UpdateBlackboard(const ServiceConfig& service_config, const Blackboard* old_blackboard, @@ -89,7 +89,7 @@ class RetryFilter final { static grpc_error_handle Init(grpc_channel_element* elem, grpc_channel_element_args* args) { GRPC_CHECK(args->is_last); - GRPC_CHECK(elem->filter == &kVtable); + GRPC_CHECK(elem->filter == &kFilterVtable); new (elem->channel_data) RetryFilter(*args); return absl::OkStatus(); } diff --git a/src/core/ext/filters/fault_injection/fault_injection_filter.cc b/src/core/ext/filters/fault_injection/fault_injection_filter.cc index 7e0c5e4824c28..e09c4b92bf20d 100644 --- a/src/core/ext/filters/fault_injection/fault_injection_filter.cc +++ b/src/core/ext/filters/fault_injection/fault_injection_filter.cc @@ -264,7 +264,7 @@ std::string FaultInjectionFilter::InjectionDecision::ToString() const { " abort=", abort_request_.has_value()); } -const grpc_channel_filter FaultInjectionFilter::kFilter = +const grpc_channel_filter FaultInjectionFilter::kFilterVtable = MakePromiseBasedFilter(); void FaultInjectionFilterRegister(CoreConfiguration::Builder* builder) { diff --git a/src/core/ext/filters/fault_injection/fault_injection_filter.h b/src/core/ext/filters/fault_injection/fault_injection_filter.h index 0567df55ba5e9..b38cb228db18b 100644 --- a/src/core/ext/filters/fault_injection/fault_injection_filter.h +++ b/src/core/ext/filters/fault_injection/fault_injection_filter.h @@ -41,7 +41,7 @@ namespace grpc_core { class FaultInjectionFilter : public ImplementChannelFilter { public: - static const grpc_channel_filter kFilter; + static const grpc_channel_filter kFilterVtable; static absl::string_view TypeName() { return "fault_injection_filter"; } diff --git a/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc b/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc index 3a4978eb70c5f..78626f636854b 100644 --- a/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +++ b/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc @@ -137,7 +137,7 @@ GcpAuthenticationFilter::CallCredentialsCache::Get( // GcpAuthenticationFilter // -const grpc_channel_filter GcpAuthenticationFilter::kFilter = +const grpc_channel_filter GcpAuthenticationFilter::kFilterVtable = MakePromiseBasedFilter(); diff --git a/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h b/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h index a8fcf3e5f7d3b..6e6b4eb6af1ba 100644 --- a/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +++ b/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h @@ -58,7 +58,7 @@ class GcpAuthenticationFilter cache_ ABSL_GUARDED_BY(&mu_); }; - static const grpc_channel_filter kFilter; + static const grpc_channel_filter kFilterVtable; static absl::string_view TypeName() { return "gcp_authentication_filter"; } diff --git a/src/core/ext/filters/stateful_session/stateful_session_filter.cc b/src/core/ext/filters/stateful_session/stateful_session_filter.cc index 53cb0d7d0fade..c4ab31ab3ae78 100644 --- a/src/core/ext/filters/stateful_session/stateful_session_filter.cc +++ b/src/core/ext/filters/stateful_session/stateful_session_filter.cc @@ -59,7 +59,7 @@ UniqueTypeName XdsOverrideHostAttribute::TypeName() { return kFactory.Create(); } -const grpc_channel_filter StatefulSessionFilter::kFilter = +const grpc_channel_filter StatefulSessionFilter::kFilterVtable = MakePromiseBasedFilter(); diff --git a/src/core/ext/filters/stateful_session/stateful_session_filter.h b/src/core/ext/filters/stateful_session/stateful_session_filter.h index 6d242ce045a15..f15cca6ff22b7 100644 --- a/src/core/ext/filters/stateful_session/stateful_session_filter.h +++ b/src/core/ext/filters/stateful_session/stateful_session_filter.h @@ -70,7 +70,7 @@ class XdsOverrideHostAttribute class StatefulSessionFilter : public ImplementChannelFilter { public: - static const grpc_channel_filter kFilter; + static const grpc_channel_filter kFilterVtable; static absl::string_view TypeName() { return "stateful_session_filter"; } diff --git a/src/core/filter/filter_chain.h b/src/core/filter/filter_chain.h new file mode 100644 index 0000000000000..bd33f84f08801 --- /dev/null +++ b/src/core/filter/filter_chain.h @@ -0,0 +1,95 @@ +// +// Copyright 2025 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_FILTER_FILTER_CHAIN_H +#define GRPC_SRC_CORE_FILTER_FILTER_CHAIN_H + +#include +#include +#include + +#include "src/core/call/interception_chain.h" +#include "src/core/filter/filter_args.h" +#include "src/core/util/ref_counted.h" +#include "src/core/util/ref_counted_ptr.h" + +// This code provides an abstraction that allows the config selector to +// build a filter chain without knowing the details of how things work +// in the client channel code. +// TODO(roth): A lot of these interfaces are designed to abstract away +// the differences between the v1 and v3 stacks, and a lot of that +// complexity can go away when the v3 migration is done. + +namespace grpc_core { + +// Base class for filter chains. +// TODO(roth): Once the v3 migration is done, this can probably go away in +// favor of just directly using UnstartedCallDestination. +class FilterChain : public RefCounted {}; + +// Abstract filter chain builder interface. +class FilterChainBuilder { + public: + virtual ~FilterChainBuilder() = default; + + // Add a filter using a convenience template method. + template + void AddFilter(RefCountedPtr config) { + // TODO(roth): Once the v3 migration is done, this can directly call + // InterceptionChainBuilder. + AddFilter(FilterHandleImpl(), std::move(config)); + } + + // Builds the filter chain. Resets the builder to an empty state, so + // that it can be used to build another filter chain. + virtual absl::StatusOr> Build() = 0; + + protected: + // Abstract handle for a filter. + class FilterHandle { + public: + virtual ~FilterHandle() = default; + virtual void AddToBuilder( + std::vector* filters, + RefCountedPtr config) const = 0; + virtual void AddToBuilder( + InterceptionChainBuilder* builder, + RefCountedPtr config) const = 0; + }; + + private: + // Concrete handle for a specific filter type. + template + class FilterHandleImpl : public FilterHandle { + public: + void AddToBuilder(std::vector* filters, + RefCountedPtr config) const override { + filters->push_back({&FilterType::kFilterVtable, std::move(config)}); + } + void AddToBuilder(InterceptionChainBuilder* builder, + RefCountedPtr config) const override { + builder->Add(std::move(config)); + } + }; + + // Pure virtual method to be implemented by concrete wrappers. + virtual void AddFilter(const FilterHandle& filter_handle, + RefCountedPtr config) = 0; +}; + +} // namespace grpc_core + +#endif // GRPC_SRC_CORE_FILTER_FILTER_CHAIN_H diff --git a/src/core/resolver/xds/xds_resolver.cc b/src/core/resolver/xds/xds_resolver.cc index 5a24bc980a411..c7c09d1128242 100644 --- a/src/core/resolver/xds/xds_resolver.cc +++ b/src/core/resolver/xds/xds_resolver.cc @@ -192,12 +192,6 @@ class XdsResolver final : public Resolver { uint32_t range_end; absl::string_view cluster; RefCountedPtr method_config; - - bool operator==(const ClusterWeightState& other) const { - return range_end == other.range_end && cluster == other.cluster && - MethodConfigsEqual(method_config.get(), - other.method_config.get()); - } }; XdsRouteConfigResource::Route route; @@ -205,22 +199,11 @@ class XdsResolver final : public Resolver { std::vector weighted_cluster_state; explicit RouteEntry(const XdsRouteConfigResource::Route& r) : route(r) {} - - bool operator==(const RouteEntry& other) const { - return route == other.route && - weighted_cluster_state == other.weighted_cluster_state && - MethodConfigsEqual(method_config.get(), - other.method_config.get()); - } }; static absl::StatusOr> Create( XdsResolver* resolver, const Duration& default_max_stream_duration); - bool operator==(const RouteConfigData& other) const { - return clusters_ == other.clusters_ && routes_ == other.routes_; - } - RefCountedPtr FindClusterRef(absl::string_view name) const { auto it = clusters_.find(name); if (it == clusters_.end()) { @@ -240,13 +223,6 @@ class XdsResolver final : public Resolver { const XdsRouteConfigResource::Route::RouteAction::ClusterWeight* cluster_weight); - static bool MethodConfigsEqual(const ServiceConfig* sc1, - const ServiceConfig* sc2) { - if (sc1 == nullptr) return sc2 == nullptr; - if (sc2 == nullptr) return false; - return sc1->json_string() == sc2->json_string(); - } - absl::Status AddRouteEntry(XdsResolver* resolver, const XdsRouteConfigResource::Route& route, const Duration& default_max_stream_duration); @@ -268,25 +244,25 @@ class XdsResolver final : public Resolver { bool Equals(const ConfigSelector* other) const override { const auto* other_xds = static_cast(other); - // Don't need to compare resolver_, since that will always be the same. - return *route_config_data_ == *other_xds->route_config_data_ && - filters_ == other_xds->filters_; + // Only need to compare LDS and RDS resources, since all of our + // other state is derived from those. + return *xds_config_->listener == *other_xds->xds_config_->listener && + *xds_config_->route_config == + *other_xds->xds_config_->route_config; } - absl::Status GetCallConfig(GetCallConfigArgs args) override; - - void AddFilters(InterceptionChainBuilder& builder, - const Blackboard* old_blackboard, - Blackboard* new_blackboard) override; + void BuildFilterChains(FilterChainBuilder& builder, + const Blackboard* old_blackboard, + Blackboard* new_blackboard) override; - std::vector GetFilters( - const Blackboard* old_blackboard, Blackboard* new_blackboard) override; + absl::StatusOr> GetCallConfig( + GetCallConfigArgs args) override; private: RefCountedPtr resolver_; - std::shared_ptr listener_; + RefCountedPtr xds_config_; RefCountedPtr route_config_data_; - std::vector filters_; + absl::StatusOr> filter_chain_; }; class XdsRouteStateAttributeImpl final : public XdsRouteStateAttribute { @@ -315,7 +291,7 @@ class XdsResolver final : public Resolver { class ClusterSelectionFilter final : public ImplementChannelFilter { public: - const static grpc_channel_filter kFilter; + const static grpc_channel_filter kFilterVtable; static absl::string_view TypeName() { return "cluster_selection_filter"; } @@ -614,26 +590,10 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector( RefCountedPtr resolver, RefCountedPtr route_config_data) : resolver_(std::move(resolver)), - listener_(resolver_->current_config_->listener), + xds_config_(resolver_->current_config_), route_config_data_(std::move(route_config_data)) { GRPC_TRACE_LOG(xds_resolver, INFO) << "[xds_resolver " << resolver_.get() << "] creating XdsConfigSelector " << this; - // Populate filter list. - const auto& http_filter_registry = - DownCast(resolver_->xds_client_->bootstrap()) - .http_filter_registry(); - const auto& hcm = - std::get(listener_->listener); - for (const auto& http_filter : hcm.http_filters) { - // Find filter. This is guaranteed to succeed, because it's checked - // at config validation time. - const XdsHttpFilterImpl* filter_impl = - http_filter_registry.GetFilterForType( - http_filter.config.config_proto_type_name); - GRPC_CHECK_NE(filter_impl, nullptr); - // Add filter to list. - filters_.push_back(filter_impl); - } } XdsResolver::XdsConfigSelector::~XdsConfigSelector() { @@ -667,8 +627,8 @@ std::optional HeaderHashHelper( return XXH64(header_value->data(), header_value->size(), 0); } -absl::Status XdsResolver::XdsConfigSelector::GetCallConfig( - GetCallConfigArgs args) { +absl::StatusOr> +XdsResolver::XdsConfigSelector::GetCallConfig(GetCallConfigArgs args) { Slice* path = args.initial_metadata->get_pointer(HttpPathMetadata()); GRPC_CHECK_NE(path, nullptr); auto* entry = route_config_data_->GetRouteForRequest(path->as_string_view(), @@ -776,41 +736,30 @@ absl::Status XdsResolver::XdsConfigSelector::GetCallConfig( args.service_config_call_data->SetCallAttribute( args.arena->ManagedNew(route_config_data_, entry)); - return absl::OkStatus(); + return filter_chain_; } -void XdsResolver::XdsConfigSelector::AddFilters( - InterceptionChainBuilder& builder, const Blackboard* old_blackboard, +void XdsResolver::XdsConfigSelector::BuildFilterChains( + FilterChainBuilder& builder, const Blackboard* old_blackboard, Blackboard* new_blackboard) { - const auto& hcm = - std::get(listener_->listener); - GRPC_CHECK_EQ(filters_.size(), hcm.http_filters.size()); - for (size_t i = 0; i < filters_.size(); ++i) { - auto* filter = filters_[i]; - filter->AddFilter(builder); - filter->UpdateBlackboard(hcm.http_filters[i].config, old_blackboard, - new_blackboard); - } - builder.Add(nullptr); -} - -std::vector -XdsResolver::XdsConfigSelector::GetFilters(const Blackboard* old_blackboard, - Blackboard* new_blackboard) { - const auto& hcm = - std::get(listener_->listener); - GRPC_CHECK_EQ(filters_.size(), hcm.http_filters.size()); - std::vector filters; - for (size_t i = 0; i < filters_.size(); ++i) { - auto* filter = filters_[i]; - if (filter->channel_filter() != nullptr) { - filters.push_back(filter->channel_filter()); - } - filter->UpdateBlackboard(hcm.http_filters[i].config, old_blackboard, - new_blackboard); + const auto& http_filter_registry = + DownCast(resolver_->xds_client_->bootstrap()) + .http_filter_registry(); + const auto& hcm = std::get( + xds_config_->listener->listener); + for (const auto& http_filter : hcm.http_filters) { + // Find filter. This is guaranteed to succeed, because it's checked + // at config validation time. + const XdsHttpFilterImpl* filter_impl = + http_filter_registry.GetFilterForType( + http_filter.config.config_proto_type_name); + GRPC_CHECK_NE(filter_impl, nullptr); + filter_impl->AddFilter(builder); + filter_impl->UpdateBlackboard(http_filter.config, old_blackboard, + new_blackboard); } - filters.push_back(&ClusterSelectionFilter::kFilter); - return filters; + builder.AddFilter(nullptr); + filter_chain_ = builder.Build(); } // @@ -858,7 +807,7 @@ XdsResolver::XdsRouteStateAttributeImpl::LockAndGetCluster( // XdsResolver::ClusterSelectionFilter // -const grpc_channel_filter XdsResolver::ClusterSelectionFilter::kFilter = +const grpc_channel_filter XdsResolver::ClusterSelectionFilter::kFilterVtable = MakePromiseBasedFilter(); diff --git a/src/core/xds/grpc/xds_http_fault_filter.cc b/src/core/xds/grpc/xds_http_fault_filter.cc index 05dbb29d1e480..2e3ca681c44cf 100644 --- a/src/core/xds/grpc/xds_http_fault_filter.cc +++ b/src/core/xds/grpc/xds_http_fault_filter.cc @@ -214,12 +214,12 @@ XdsHttpFaultFilter::GenerateFilterConfigOverride( errors); } -void XdsHttpFaultFilter::AddFilter(InterceptionChainBuilder& builder) const { - builder.Add(nullptr); +void XdsHttpFaultFilter::AddFilter(FilterChainBuilder& builder) const { + builder.AddFilter(nullptr); } const grpc_channel_filter* XdsHttpFaultFilter::channel_filter() const { - return &FaultInjectionFilter::kFilter; + return &FaultInjectionFilter::kFilterVtable; } ChannelArgs XdsHttpFaultFilter::ModifyChannelArgs( diff --git a/src/core/xds/grpc/xds_http_fault_filter.h b/src/core/xds/grpc/xds_http_fault_filter.h index 7670900af0b86..a759fa91286ab 100644 --- a/src/core/xds/grpc/xds_http_fault_filter.h +++ b/src/core/xds/grpc/xds_http_fault_filter.h @@ -46,7 +46,7 @@ class XdsHttpFaultFilter final : public XdsHttpFilterImpl { absl::string_view /*instance_name*/, const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; - void AddFilter(InterceptionChainBuilder& builder) const override; + void AddFilter(FilterChainBuilder& builder) const override; const grpc_channel_filter* channel_filter() const override; ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const override; absl::StatusOr GenerateMethodConfig( diff --git a/src/core/xds/grpc/xds_http_filter.h b/src/core/xds/grpc/xds_http_filter.h index 1762b5787678f..bc0b1172a6535 100644 --- a/src/core/xds/grpc/xds_http_filter.h +++ b/src/core/xds/grpc/xds_http_filter.h @@ -20,8 +20,8 @@ #include #include -#include "src/core/call/interception_chain.h" #include "src/core/filter/blackboard.h" +#include "src/core/filter/filter_chain.h" #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/channel_fwd.h" #include "src/core/util/json/json.h" @@ -92,8 +92,8 @@ class XdsHttpFilterImpl { const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const = 0; - // C-core channel filter implementation. - virtual void AddFilter(InterceptionChainBuilder& builder) const = 0; + // Adds the filter to the builder. + virtual void AddFilter(FilterChainBuilder& builder) const = 0; // TODO(roth): Remove this once the legacy filter stack goes away. virtual const grpc_channel_filter* channel_filter() const = 0; diff --git a/src/core/xds/grpc/xds_http_filter_registry.h b/src/core/xds/grpc/xds_http_filter_registry.h index cc959cae5dd0b..8a7db0a882de1 100644 --- a/src/core/xds/grpc/xds_http_filter_registry.h +++ b/src/core/xds/grpc/xds_http_filter_registry.h @@ -24,7 +24,6 @@ #include #include -#include "src/core/call/interception_chain.h" #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/channel_fwd.h" #include "src/core/util/validation_errors.h" @@ -51,7 +50,7 @@ class XdsHttpRouterFilter final : public XdsHttpFilterImpl { absl::string_view /*instance_name*/, const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; - void AddFilter(InterceptionChainBuilder& /*builder*/) const override {} + void AddFilter(FilterChainBuilder& /*builder*/) const override {} const grpc_channel_filter* channel_filter() const override { return nullptr; } absl::StatusOr GenerateMethodConfig( const FilterConfig& /*hcm_filter_config*/, diff --git a/src/core/xds/grpc/xds_http_gcp_authn_filter.cc b/src/core/xds/grpc/xds_http_gcp_authn_filter.cc index 2b8dfd9588085..03b1b84901a3c 100644 --- a/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +++ b/src/core/xds/grpc/xds_http_gcp_authn_filter.cc @@ -111,12 +111,12 @@ XdsHttpGcpAuthnFilter::GenerateFilterConfigOverride( return std::nullopt; } -void XdsHttpGcpAuthnFilter::AddFilter(InterceptionChainBuilder& builder) const { - builder.Add(nullptr); +void XdsHttpGcpAuthnFilter::AddFilter(FilterChainBuilder& builder) const { + builder.AddFilter(nullptr); } const grpc_channel_filter* XdsHttpGcpAuthnFilter::channel_filter() const { - return &GcpAuthenticationFilter::kFilter; + return &GcpAuthenticationFilter::kFilterVtable; } ChannelArgs XdsHttpGcpAuthnFilter::ModifyChannelArgs( diff --git a/src/core/xds/grpc/xds_http_gcp_authn_filter.h b/src/core/xds/grpc/xds_http_gcp_authn_filter.h index cb6c5b00b031c..b38907e2f1fca 100644 --- a/src/core/xds/grpc/xds_http_gcp_authn_filter.h +++ b/src/core/xds/grpc/xds_http_gcp_authn_filter.h @@ -44,7 +44,7 @@ class XdsHttpGcpAuthnFilter final : public XdsHttpFilterImpl { absl::string_view instance_name, const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; - void AddFilter(InterceptionChainBuilder& builder) const override; + void AddFilter(FilterChainBuilder& builder) const override; const grpc_channel_filter* channel_filter() const override; ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const override; absl::StatusOr GenerateMethodConfig( diff --git a/src/core/xds/grpc/xds_http_rbac_filter.cc b/src/core/xds/grpc/xds_http_rbac_filter.cc index cdd6d04c82f6b..8b22151f31e0a 100644 --- a/src/core/xds/grpc/xds_http_rbac_filter.cc +++ b/src/core/xds/grpc/xds_http_rbac_filter.cc @@ -569,8 +569,8 @@ XdsHttpRbacFilter::GenerateFilterConfigOverride( return FilterConfig{OverrideConfigProtoName(), std::move(rbac_json)}; } -void XdsHttpRbacFilter::AddFilter(InterceptionChainBuilder& builder) const { - builder.Add(nullptr); +void XdsHttpRbacFilter::AddFilter(FilterChainBuilder& builder) const { + builder.AddFilter(nullptr); } const grpc_channel_filter* XdsHttpRbacFilter::channel_filter() const { diff --git a/src/core/xds/grpc/xds_http_rbac_filter.h b/src/core/xds/grpc/xds_http_rbac_filter.h index dd4a05416ea6e..fe82536255f2b 100644 --- a/src/core/xds/grpc/xds_http_rbac_filter.h +++ b/src/core/xds/grpc/xds_http_rbac_filter.h @@ -46,7 +46,7 @@ class XdsHttpRbacFilter final : public XdsHttpFilterImpl { absl::string_view /*instance_name*/, const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; - void AddFilter(InterceptionChainBuilder& builder) const override; + void AddFilter(FilterChainBuilder& builder) const override; const grpc_channel_filter* channel_filter() const override; ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const override; absl::StatusOr GenerateMethodConfig( diff --git a/src/core/xds/grpc/xds_http_stateful_session_filter.cc b/src/core/xds/grpc/xds_http_stateful_session_filter.cc index 5f21792cd32af..4341bc137a386 100644 --- a/src/core/xds/grpc/xds_http_stateful_session_filter.cc +++ b/src/core/xds/grpc/xds_http_stateful_session_filter.cc @@ -197,13 +197,13 @@ XdsHttpStatefulSessionFilter::GenerateFilterConfigOverride( } void XdsHttpStatefulSessionFilter::AddFilter( - InterceptionChainBuilder& builder) const { - builder.Add(nullptr); + FilterChainBuilder& builder) const { + builder.AddFilter(nullptr); } const grpc_channel_filter* XdsHttpStatefulSessionFilter::channel_filter() const { - return &StatefulSessionFilter::kFilter; + return &StatefulSessionFilter::kFilterVtable; } ChannelArgs XdsHttpStatefulSessionFilter::ModifyChannelArgs( diff --git a/src/core/xds/grpc/xds_http_stateful_session_filter.h b/src/core/xds/grpc/xds_http_stateful_session_filter.h index 9aad34d2770c7..5be7731d8ea7c 100644 --- a/src/core/xds/grpc/xds_http_stateful_session_filter.h +++ b/src/core/xds/grpc/xds_http_stateful_session_filter.h @@ -46,7 +46,7 @@ class XdsHttpStatefulSessionFilter final : public XdsHttpFilterImpl { absl::string_view /*instance_name*/, const XdsResourceType::DecodeContext& context, XdsExtension extension, ValidationErrors* errors) const override; - void AddFilter(InterceptionChainBuilder& builder) const override; + void AddFilter(FilterChainBuilder& builder) const override; const grpc_channel_filter* channel_filter() const override; ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const override; absl::StatusOr GenerateMethodConfig( diff --git a/test/core/client_channel/client_channel_test.cc b/test/core/client_channel/client_channel_test.cc index 62764db9a734e..c6143756ccbc4 100644 --- a/test/core/client_channel/client_channel_test.cc +++ b/test/core/client_channel/client_channel_test.cc @@ -279,7 +279,7 @@ CLIENT_CHANNEL_TEST(StartCall) { } // A filter that adds metadata foo=bar. -class TestFilter { +class TestFilter : public ImplementChannelFilter { public: class Call { public: @@ -301,6 +301,10 @@ class TestFilter { } }; + static const grpc_channel_filter kFilterVtable; + + static absl::string_view TypeName() { return "test_filter"; } + static absl::StatusOr> Create( const ChannelArgs& /*args*/, ChannelFilter::Args /*filter_args*/) { return std::make_unique(); @@ -314,6 +318,9 @@ const NoInterceptor TestFilter::Call::OnServerToClientMessage; const NoInterceptor TestFilter::Call::OnServerTrailingMetadata; const NoInterceptor TestFilter::Call::OnFinalize; +const grpc_channel_filter TestFilter::kFilterVtable = + MakePromiseBasedFilter(); + // A config selector that adds TestFilter as a dynamic filter. class TestConfigSelector : public ConfigSelector { public: @@ -322,19 +329,24 @@ class TestConfigSelector : public ConfigSelector { return kFactory.Create(); } - void AddFilters(InterceptionChainBuilder& builder, - const Blackboard* /*old_blackboard*/, - Blackboard* /*new_blackboard*/) override { - builder.Add(nullptr); + void BuildFilterChains(FilterChainBuilder& builder, + const Blackboard* /*old_blackboard*/, + Blackboard* /*new_blackboard*/) override { + builder.AddFilter(nullptr); + filter_chain_ = builder.Build(); } - absl::Status GetCallConfig(GetCallConfigArgs /*args*/) override { - return absl::OkStatus(); + absl::StatusOr> GetCallConfig( + GetCallConfigArgs /*args*/) override { + return filter_chain_; } // Any instance of this class will behave the same, so all comparisons // are true. bool Equals(const ConfigSelector* /*other*/) const override { return true; } + + private: + absl::StatusOr> filter_chain_; }; CLIENT_CHANNEL_TEST(ConfigSelectorWithDynamicFilters) { diff --git a/test/core/xds/xds_http_filters_test.cc b/test/core/xds/xds_http_filters_test.cc index b57ec51171d8a..19d8f940d0636 100644 --- a/test/core/xds/xds_http_filters_test.cc +++ b/test/core/xds/xds_http_filters_test.cc @@ -287,7 +287,7 @@ TEST_F(XdsFaultInjectionFilterTest, Accessors) { EXPECT_EQ(filter_->ConfigProtoName(), "envoy.extensions.filters.http.fault.v3.HTTPFault"); EXPECT_EQ(filter_->OverrideConfigProtoName(), ""); - EXPECT_EQ(filter_->channel_filter(), &FaultInjectionFilter::kFilter); + EXPECT_EQ(filter_->channel_filter(), &FaultInjectionFilter::kFilterVtable); EXPECT_TRUE(filter_->IsSupportedOnClients()); EXPECT_FALSE(filter_->IsSupportedOnServers()); EXPECT_FALSE(filter_->IsTerminalFilter()); @@ -1140,7 +1140,7 @@ TEST_F(XdsStatefulSessionFilterTest, Accessors) { EXPECT_EQ(filter_->OverrideConfigProtoName(), "envoy.extensions.filters.http.stateful_session.v3" ".StatefulSessionPerRoute"); - EXPECT_EQ(filter_->channel_filter(), &StatefulSessionFilter::kFilter); + EXPECT_EQ(filter_->channel_filter(), &StatefulSessionFilter::kFilterVtable); EXPECT_TRUE(filter_->IsSupportedOnClients()); EXPECT_FALSE(filter_->IsSupportedOnServers()); EXPECT_FALSE(filter_->IsTerminalFilter()); @@ -1494,7 +1494,7 @@ TEST_F(XdsGcpAuthnFilterTest, Accessors) { EXPECT_EQ(filter_->ConfigProtoName(), "envoy.extensions.filters.http.gcp_authn.v3.GcpAuthnFilterConfig"); EXPECT_EQ(filter_->OverrideConfigProtoName(), ""); - EXPECT_EQ(filter_->channel_filter(), &GcpAuthenticationFilter::kFilter); + EXPECT_EQ(filter_->channel_filter(), &GcpAuthenticationFilter::kFilterVtable); EXPECT_TRUE(filter_->IsSupportedOnClients()); EXPECT_FALSE(filter_->IsSupportedOnServers()); EXPECT_FALSE(filter_->IsTerminalFilter()); diff --git a/test/cpp/end2end/client_lb_end2end_test.cc b/test/cpp/end2end/client_lb_end2end_test.cc index a48cf29ffc33c..c885ab5de371f 100644 --- a/test/cpp/end2end/client_lb_end2end_test.cc +++ b/test/cpp/end2end/client_lb_end2end_test.cc @@ -3135,7 +3135,11 @@ TEST_F(ControlPlaneStatusRewritingTest, RewritesFromConfigSelector) { bool Equals(const ConfigSelector* other) const override { return status_ == static_cast(other)->status_; } - absl::Status GetCallConfig(GetCallConfigArgs /*args*/) override { + void BuildFilterChains(grpc_core::FilterChainBuilder&, + const grpc_core::Blackboard*, + grpc_core::Blackboard*) override {} + absl::StatusOr> + GetCallConfig(GetCallConfigArgs /*args*/) override { return status_; } diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 62099c54a0449..8ffd6573a5244 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -2291,6 +2291,7 @@ src/core/filter/auth/server_auth_filter.cc \ src/core/filter/blackboard.cc \ src/core/filter/blackboard.h \ src/core/filter/filter_args.h \ +src/core/filter/filter_chain.h \ src/core/filter/fused_filters.cc \ src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc \ src/core/handshaker/endpoint_info/endpoint_info_handshaker.h \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 85847ca1ee566..7896d1049ef43 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -2125,6 +2125,7 @@ src/core/filter/auth/server_auth_filter.cc \ src/core/filter/blackboard.cc \ src/core/filter/blackboard.h \ src/core/filter/filter_args.h \ +src/core/filter/filter_chain.h \ src/core/filter/fused_filters.cc \ src/core/handshaker/GEMINI.md \ src/core/handshaker/endpoint_info/GEMINI.md \ From 8b5c2c955630d10d807dfef4df9de1221f964807 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 23 Jan 2026 17:36:56 -0800 Subject: [PATCH 21/67] [pick_first] enable pick_first_ready_to_connecting experiment (#41475) This should be a no-op unless subchannel connection scaling is enabled, and that's controlled by a separate experiment. See #41029 for implementation. Closes #41475 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41475 from markdroth:pf_experiment_enable a2d316b4471b119cef75c1c57f822cac400afd30 PiperOrigin-RevId: 860319677 --- bazel/experiments.bzl | 18 ++++++------------ src/core/lib/experiments/experiments.cc | 6 +++--- src/core/lib/experiments/experiments.h | 9 ++++++--- src/core/lib/experiments/rollouts.yaml | 2 ++ 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl index 238ebd747f054..fbe2017a023da 100644 --- a/bazel/experiments.bzl +++ b/bazel/experiments.bzl @@ -114,7 +114,6 @@ EXPERIMENTS = { "promise_based_http2_client_transport", ], "cpp_lb_end2end_test": [ - "pick_first_ready_to_connecting", "subchannel_connection_scaling", ], "endpoint_test": [ @@ -132,9 +131,6 @@ EXPERIMENTS = { "tcp_frame_size_tuning", "tcp_rcv_lowat", ], - "lb_unit_test": [ - "pick_first_ready_to_connecting", - ], "minimal_stack_test": [ "fuse_filters", ], @@ -172,6 +168,7 @@ EXPERIMENTS = { "event_engine_secure_endpoint", ], "cpp_lb_end2end_test": [ + "pick_first_ready_to_connecting", "rr_wrr_connect_from_random_index", ], "event_engine_client_test": [ @@ -181,6 +178,7 @@ EXPERIMENTS = { "event_engine_listener", ], "lb_unit_test": [ + "pick_first_ready_to_connecting", "rr_wrr_connect_from_random_index", ], "posix_endpoint_test": [ @@ -227,7 +225,6 @@ EXPERIMENTS = { "promise_based_http2_client_transport", ], "cpp_lb_end2end_test": [ - "pick_first_ready_to_connecting", "subchannel_connection_scaling", ], "endpoint_test": [ @@ -245,9 +242,6 @@ EXPERIMENTS = { "tcp_frame_size_tuning", "tcp_rcv_lowat", ], - "lb_unit_test": [ - "pick_first_ready_to_connecting", - ], "minimal_stack_test": [ "fuse_filters", ], @@ -285,6 +279,7 @@ EXPERIMENTS = { "event_engine_secure_endpoint", ], "cpp_lb_end2end_test": [ + "pick_first_ready_to_connecting", "rr_wrr_connect_from_random_index", ], "event_engine_client_test": [ @@ -294,6 +289,7 @@ EXPERIMENTS = { "event_engine_listener", ], "lb_unit_test": [ + "pick_first_ready_to_connecting", "rr_wrr_connect_from_random_index", ], "posix_endpoint_test": [ @@ -340,7 +336,6 @@ EXPERIMENTS = { "promise_based_http2_client_transport", ], "cpp_lb_end2end_test": [ - "pick_first_ready_to_connecting", "subchannel_connection_scaling", ], "endpoint_test": [ @@ -358,9 +353,6 @@ EXPERIMENTS = { "tcp_frame_size_tuning", "tcp_rcv_lowat", ], - "lb_unit_test": [ - "pick_first_ready_to_connecting", - ], "minimal_stack_test": [ "fuse_filters", ], @@ -398,6 +390,7 @@ EXPERIMENTS = { "event_engine_secure_endpoint", ], "cpp_lb_end2end_test": [ + "pick_first_ready_to_connecting", "rr_wrr_connect_from_random_index", ], "event_engine_client_test": [ @@ -407,6 +400,7 @@ EXPERIMENTS = { "event_engine_listener", ], "lb_unit_test": [ + "pick_first_ready_to_connecting", "rr_wrr_connect_from_random_index", ], "posix_endpoint_test": [ diff --git a/src/core/lib/experiments/experiments.cc b/src/core/lib/experiments/experiments.cc index f7c20162e25bd..2f99a1431b457 100644 --- a/src/core/lib/experiments/experiments.cc +++ b/src/core/lib/experiments/experiments.cc @@ -323,7 +323,7 @@ const ExperimentMetadata g_experiment_metadata[] = { true}, {"pick_first_ready_to_connecting", description_pick_first_ready_to_connecting, - additional_constraints_pick_first_ready_to_connecting, nullptr, 0, false, + additional_constraints_pick_first_ready_to_connecting, nullptr, 0, true, true}, {"pipelined_read_secure_endpoint", description_pipelined_read_secure_endpoint, @@ -714,7 +714,7 @@ const ExperimentMetadata g_experiment_metadata[] = { true}, {"pick_first_ready_to_connecting", description_pick_first_ready_to_connecting, - additional_constraints_pick_first_ready_to_connecting, nullptr, 0, false, + additional_constraints_pick_first_ready_to_connecting, nullptr, 0, true, true}, {"pipelined_read_secure_endpoint", description_pipelined_read_secure_endpoint, @@ -1105,7 +1105,7 @@ const ExperimentMetadata g_experiment_metadata[] = { true}, {"pick_first_ready_to_connecting", description_pick_first_ready_to_connecting, - additional_constraints_pick_first_ready_to_connecting, nullptr, 0, false, + additional_constraints_pick_first_ready_to_connecting, nullptr, 0, true, true}, {"pipelined_read_secure_endpoint", description_pipelined_read_secure_endpoint, diff --git a/src/core/lib/experiments/experiments.h b/src/core/lib/experiments/experiments.h index 44984ff1122fc..4b0b51fe08d08 100644 --- a/src/core/lib/experiments/experiments.h +++ b/src/core/lib/experiments/experiments.h @@ -100,7 +100,8 @@ inline bool IsMonitoringExperimentEnabled() { return true; } inline bool IsMultipingEnabled() { return false; } inline bool IsOtelExportTelemetryDomainsEnabled() { return false; } inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() { return false; } -inline bool IsPickFirstReadyToConnectingEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_READY_TO_CONNECTING +inline bool IsPickFirstReadyToConnectingEnabled() { return true; } inline bool IsPipelinedReadSecureEndpointEnabled() { return false; } inline bool IsPollsetAlternativeEnabled() { return false; } inline bool IsPrioritizeFinishedRequestsEnabled() { return false; } @@ -172,7 +173,8 @@ inline bool IsMonitoringExperimentEnabled() { return true; } inline bool IsMultipingEnabled() { return false; } inline bool IsOtelExportTelemetryDomainsEnabled() { return false; } inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() { return false; } -inline bool IsPickFirstReadyToConnectingEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_READY_TO_CONNECTING +inline bool IsPickFirstReadyToConnectingEnabled() { return true; } inline bool IsPipelinedReadSecureEndpointEnabled() { return false; } inline bool IsPollsetAlternativeEnabled() { return false; } inline bool IsPrioritizeFinishedRequestsEnabled() { return false; } @@ -244,7 +246,8 @@ inline bool IsMonitoringExperimentEnabled() { return true; } inline bool IsMultipingEnabled() { return false; } inline bool IsOtelExportTelemetryDomainsEnabled() { return false; } inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() { return false; } -inline bool IsPickFirstReadyToConnectingEnabled() { return false; } +#define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_READY_TO_CONNECTING +inline bool IsPickFirstReadyToConnectingEnabled() { return true; } inline bool IsPipelinedReadSecureEndpointEnabled() { return false; } inline bool IsPollsetAlternativeEnabled() { return false; } inline bool IsPrioritizeFinishedRequestsEnabled() { return false; } diff --git a/src/core/lib/experiments/rollouts.yaml b/src/core/lib/experiments/rollouts.yaml index 8d9c8c29b5cce..8033973e781c0 100644 --- a/src/core/lib/experiments/rollouts.yaml +++ b/src/core/lib/experiments/rollouts.yaml @@ -82,6 +82,8 @@ default: true - name: monitoring_experiment default: true +- name: pick_first_ready_to_connecting + default: true - name: pollset_alternative default: false - name: prioritize_finished_requests From fb53717dfa6b264e7f930bb5e9a7e5c86a31ed9e Mon Sep 17 00:00:00 2001 From: "E. John Feig" Date: Fri, 23 Jan 2026 18:07:36 -0800 Subject: [PATCH 22/67] Re-scope secondary licenses listed in LICENSE file (#41476) The gRPC project is primarily covered by the Apache License v2.0. Over the years, several files were added to the repo carrying other licenses, Mozilla Public License Version 2.0, and BSD 3-Clause License. These additional licenses were never intended to cover the entire repository, and were intended to be scoped to the specific files that carried in those different licenses. This change clarifies the scoping of which files are covered by either the MPL v2.0 or BSD 3-Clause License. Closes #41476 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41476 from emil10001:license-scope b5f7fdd618a8b7164fc596b94f860583d029f49a PiperOrigin-RevId: 860326676 --- LICENSE | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/LICENSE b/LICENSE index 0e09a3e90900c..98352651c8f92 100644 --- a/LICENSE +++ b/LICENSE @@ -203,6 +203,16 @@ ----------------------------------------------------------- +Following applies to: +./src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec +./src/objective-c/!ProtoCompiler-gRPCPlugin.podspec +./src/objective-c/!ProtoCompiler.podspec +./src/objective-c/BoringSSL-GRPC.podspec +./templates/src/objective-c/!ProtoCompiler-gRPCCppPlugin.podspec.inja +./templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.inja +./templates/src/objective-c/!ProtoCompiler.podspec.inja +./templates/src/objective-c/BoringSSL-GRPC.podspec.template + BSD 3-Clause License Copyright 2016, Google Inc. @@ -235,6 +245,9 @@ THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------- +Following applies to: +./etc/roots.pem + Mozilla Public License Version 2.0 ================================== From 6155ddcdc600d349147b5846757b76cb6a05ae45 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Jan 2026 09:05:52 -0800 Subject: [PATCH 23/67] Export MessageChunker properties to channelz. Adds an AddData method to MessageChunker to expose max_chunk_size and alignment via channelz, and integrates this into both the client and server ChaoticGood transports. PiperOrigin-RevId: 861218769 --- src/core/ext/transport/chaotic_good/client_transport.cc | 1 + src/core/ext/transport/chaotic_good/message_chunker.h | 6 ++++++ src/core/ext/transport/chaotic_good/server_transport.cc | 1 + 3 files changed, 8 insertions(+) diff --git a/src/core/ext/transport/chaotic_good/client_transport.cc b/src/core/ext/transport/chaotic_good/client_transport.cc index a9c122f21d7e1..ee7540ff3d9e0 100644 --- a/src/core/ext/transport/chaotic_good/client_transport.cc +++ b/src/core/ext/transport/chaotic_good/client_transport.cc @@ -285,6 +285,7 @@ void ChaoticGoodClientTransport::Orphan() { void ChaoticGoodClientTransport::AddData(channelz::DataSink sink) { // TODO(ctiller): add calls in stream dispatch party_->ExportToChannelz("transport_party", sink); + message_chunker_.AddData(sink); } auto ChaoticGoodClientTransport::CallOutboundLoop(uint32_t stream_id, diff --git a/src/core/ext/transport/chaotic_good/message_chunker.h b/src/core/ext/transport/chaotic_good/message_chunker.h index 285694171ee0b..1513c93eabba1 100644 --- a/src/core/ext/transport/chaotic_good/message_chunker.h +++ b/src/core/ext/transport/chaotic_good/message_chunker.h @@ -132,6 +132,12 @@ class MessageChunker { uint32_t max_chunk_size() const { return max_chunk_size_; } uint32_t alignment() const { return alignment_; } + void AddData(channelz::DataSink sink) { + sink.AddData("message_chunker", channelz::PropertyList() + .Set("max_chunk_size", max_chunk_size_) + .Set("alignment", alignment_)); + } + private: bool ShouldChunk(Message& message) { return max_chunk_size_ != 0 && diff --git a/src/core/ext/transport/chaotic_good/server_transport.cc b/src/core/ext/transport/chaotic_good/server_transport.cc index f1af9d6a42bc8..70691959a89b9 100644 --- a/src/core/ext/transport/chaotic_good/server_transport.cc +++ b/src/core/ext/transport/chaotic_good/server_transport.cc @@ -294,6 +294,7 @@ void ChaoticGoodServerTransport::StreamDispatch::AddData( channelz::DataSink sink) { party_->ExportToChannelz("transport_party", sink); MutexLock lock(&mu_); + message_chunker_.AddData(sink); sink.AddData("transport_state", channelz::PropertyList() .Set("stream_map_size", stream_map_.size()) From a19553bea69caa9e77490247498be85a900346ff Mon Sep 17 00:00:00 2001 From: Ana Salazar Maldonado Date: Mon, 26 Jan 2026 09:54:49 -0800 Subject: [PATCH 24/67] [TlsCredentials] allow using a separate cert provider for root and identity certs (#41445) Closes #41445 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41445 from anniefrchz:providers_split e229a4685bc45799653dde7ba7aa9645a1a87374 PiperOrigin-RevId: 861237972 --- grpc.def | 5 +- include/grpc/credentials.h | 29 ++--- .../grpcpp/security/tls_credentials_options.h | 33 ++++- .../transport/channel_creds_registry_init.cc | 15 +-- .../tls/grpc_tls_certificate_distributor.h | 6 +- .../tls/grpc_tls_credentials_options.cc | 42 +++---- .../tls/grpc_tls_credentials_options.h | 39 +++--- .../transport/tls/tls_security_connector.cc | 112 +++++++++++------ .../transport/tls/tls_security_connector.h | 8 +- .../transport/xds/xds_credentials.cc | 21 ++-- src/core/xds/grpc/xds_certificate_provider.h | 6 +- src/cpp/common/tls_credentials_options.cc | 33 +++-- .../grpc/_cython/_cygrpc/credentials.pyx.pxi | 11 +- .../grpcio/grpc/_cython/_cygrpc/grpc.pxi | 16 +-- src/ruby/ext/grpc/rb_grpc_imports.generated.c | 10 +- src/ruby/ext/grpc/rb_grpc_imports.generated.h | 15 +-- ...tls_credentials_options_comparator_test.cc | 50 +++----- .../tls/grpc_tls_credentials_options_test.cc | 74 ++++------- .../tls/tls_security_connector_test.cc | 100 ++++++--------- test/core/end2end/fixtures/h2_tls_common.h | 16 +-- ...ls_peer_property_external_verifier_test.cc | 16 +-- .../chttp2/chttp2_server_listener_test.cc | 8 +- .../core/gen_grpc_tls_credentials_options.py | 116 +++++++++--------- 23 files changed, 396 insertions(+), 385 deletions(-) diff --git a/grpc.def b/grpc.def index 506eb0a580ca0..89ff92a031a67 100644 --- a/grpc.def +++ b/grpc.def @@ -61,10 +61,9 @@ EXPORTS grpc_tls_credentials_options_set_max_tls_version grpc_tls_credentials_options_copy grpc_tls_credentials_options_destroy - grpc_tls_credentials_options_set_certificate_provider - grpc_tls_credentials_options_watch_root_certs + grpc_tls_credentials_options_set_identity_certificate_provider + grpc_tls_credentials_options_set_root_certificate_provider grpc_tls_credentials_options_set_root_cert_name - grpc_tls_credentials_options_watch_identity_key_cert_pairs grpc_tls_credentials_options_set_identity_cert_name grpc_tls_credentials_options_set_cert_request_type grpc_tls_credentials_options_set_crl_directory diff --git a/include/grpc/credentials.h b/include/grpc/credentials.h index bc5cacc1af914..ed98dd317f9fa 100644 --- a/include/grpc/credentials.h +++ b/include/grpc/credentials.h @@ -984,27 +984,22 @@ typedef struct grpc_tls_certificate_provider grpc_tls_certificate_provider; /** * EXPERIMENTAL API - Subject to change * - * Sets the credential provider in the options. + * Sets the identity certificate provider in the options. * The |options| will implicitly take a new ref to the |provider|. */ -GRPCAPI void grpc_tls_credentials_options_set_certificate_provider( +GRPCAPI void grpc_tls_credentials_options_set_identity_certificate_provider( grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); /** * EXPERIMENTAL API - Subject to change * - * If set, gRPC stack will keep watching the root certificates with - * name |root_cert_name|. - * If this is not set on the client side, we will use the root certificates - * stored in the default system location, since client side must provide root - * certificates in TLS. - * If this is not set on the server side, we will not watch any root certificate - * updates, and assume no root certificates needed for the server(single-side - * TLS). Default root certs on the server side is not supported. + * Sets the root certificate provider in the options. + * The |options| will implicitly take a new ref to the |provider|. */ -GRPCAPI void grpc_tls_credentials_options_watch_root_certs( - grpc_tls_credentials_options* options); +GRPCAPI void grpc_tls_credentials_options_set_root_certificate_provider( + grpc_tls_credentials_options* options, + grpc_tls_certificate_provider* provider); /** * EXPERIMENTAL API - Subject to change @@ -1015,16 +1010,6 @@ GRPCAPI void grpc_tls_credentials_options_watch_root_certs( GRPCAPI void grpc_tls_credentials_options_set_root_cert_name( grpc_tls_credentials_options* options, const char* root_cert_name); -/** - * EXPERIMENTAL API - Subject to change - * - * If set, gRPC stack will keep watching the identity key-cert pairs - * with name |identity_cert_name|. - * This is required on the server side, and optional on the client side. - */ -GRPCAPI void grpc_tls_credentials_options_watch_identity_key_cert_pairs( - grpc_tls_credentials_options* options); - /** * EXPERIMENTAL API - Subject to change * diff --git a/include/grpcpp/security/tls_credentials_options.h b/include/grpcpp/security/tls_credentials_options.h index d55d2c6d655fb..fac7381d2d086 100644 --- a/include/grpcpp/security/tls_credentials_options.h +++ b/include/grpcpp/security/tls_credentials_options.h @@ -52,8 +52,15 @@ class TlsCredentialsOptions { // ---- Setters for member fields ---- // Sets the certificate provider used to store root certs and identity certs. + [[deprecated( + "Use set_root_certificate_provider() or " + "set_identity_certificate_provider() instead.")]] void set_certificate_provider( std::shared_ptr certificate_provider); + void set_root_certificate_provider( + std::shared_ptr certificate_provider); + void set_identity_certificate_provider( + std::shared_ptr certificate_provider); // Watches the updates of root certificates with name |root_cert_name|. // If used in TLS credentials, setting this field is optional for both the // client side and the server side. @@ -64,6 +71,7 @@ class TlsCredentialsOptions { // certificate updates, and assume no root certificates needed for the server // (in the one-side TLS scenario, the server is not required to provide root // certs). We don't support default root certs on server side. + [[deprecated("Use set_root_certificate_provider()")]] void watch_root_certs(); // Sets the name of root certificates being watched, if |watch_root_certs| is // called. If not set, an empty string will be used as the name. @@ -74,6 +82,7 @@ class TlsCredentialsOptions { // |identity_cert_name|. If used in TLS credentials, it is required to be set // on the server side, and optional for the client side(in the one-side // TLS scenario, the client is not required to provide identity certs). + [[deprecated("Use set_identity_certificate_provider()")]] void watch_identity_key_cert_pairs(); // Sets the name of identity key-cert pairs being watched, if // |watch_identity_key_cert_pairs| is called. If not set, an empty string will @@ -140,7 +149,9 @@ class TlsCredentialsOptions { } private: - std::shared_ptr certificate_provider_; + std::shared_ptr legacy_certificate_provider_; + std::shared_ptr root_certificate_provider_; + std::shared_ptr identity_certificate_provider_; std::shared_ptr certificate_verifier_; grpc_tls_credentials_options* c_credentials_options_ = nullptr; }; @@ -169,8 +180,22 @@ class TlsChannelCredentialsOptions final : public TlsCredentialsOptions { // It is used for experimental purposes for now and it is subject to change. class TlsServerCredentialsOptions final : public TlsCredentialsOptions { public: - // Server side is required to use a provider, because server always needs to - // use identity certs. + // Server side is required to use an identity provider, because server always + // needs to use identity certs. + static absl::StatusOr Create( + std::shared_ptr + identity_certificate_provider) { + if (identity_certificate_provider == nullptr) { + return absl::InvalidArgumentError( + "identity certificate provider must be non-null"); + } + TlsServerCredentialsOptions options; + options.set_identity_certificate_provider( + std::move(identity_certificate_provider)); + return options; + } + + [[deprecated("Use Create() instead.")]] explicit TlsServerCredentialsOptions( std::shared_ptr certificate_provider) : TlsCredentialsOptions() { @@ -196,6 +221,8 @@ class TlsServerCredentialsOptions final : public TlsCredentialsOptions { void set_send_client_ca_list(bool send_client_ca_list); private: + // Default ctor, to be used by Create(). + TlsServerCredentialsOptions() = default; }; } // namespace experimental diff --git a/src/core/credentials/transport/channel_creds_registry_init.cc b/src/core/credentials/transport/channel_creds_registry_init.cc index 5ea3b0393e379..1be4723a4681a 100644 --- a/src/core/credentials/transport/channel_creds_registry_init.cc +++ b/src/core/credentials/transport/channel_creds_registry_init.cc @@ -89,14 +89,15 @@ class TlsChannelCredsFactory : public ChannelCredsFactory<> { !config->ca_certificate_file().empty()) { // TODO(gtcooke94): Expose the spiffe_bundle_map option in the XDS // bootstrap config to use here. - options->set_certificate_provider( - MakeRefCounted( - config->private_key_file(), config->certificate_file(), - config->ca_certificate_file(), /*spiffe_bundle_map_file=*/"", - config->refresh_interval().millis() / GPR_MS_PER_SEC)); + auto provider = MakeRefCounted( + config->private_key_file(), config->certificate_file(), + config->ca_certificate_file(), /*spiffe_bundle_map_file=*/"", + config->refresh_interval().millis() / GPR_MS_PER_SEC); + options->set_root_certificate_provider( + config->ca_certificate_file().empty() ? nullptr : provider); + options->set_identity_certificate_provider( + config->certificate_file().empty() ? nullptr : provider); } - options->set_watch_root_cert(!config->ca_certificate_file().empty()); - options->set_watch_identity_pair(!config->certificate_file().empty()); options->set_certificate_verifier( MakeRefCounted()); return MakeRefCounted(std::move(options)); diff --git a/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h b/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h index cf79878dd28eb..37f93855d5c3a 100644 --- a/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +++ b/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h @@ -27,20 +27,22 @@ #include #include -#include "src/core/credentials/transport/tls/spiffe_utils.h" #include "src/core/credentials/transport/tls/ssl_utils.h" #include "src/core/lib/iomgr/error.h" #include "src/core/tsi/ssl_transport_security.h" #include "src/core/util/ref_counted.h" #include "src/core/util/sync.h" #include "absl/base/thread_annotations.h" -#include "absl/strings/string_view.h" struct grpc_tls_identity_pairs { grpc_core::PemKeyCertPairList pem_key_cert_pairs; }; // TLS certificate distributor. +// TODO(anasalazar): Since there are no use-cases where we need to update root +// and identity certs as an atomic unit, the flow of the certs through the cert +// providers and to the TLS security connector can be greatly simplified. We may +// even be able to remove the distributor code completely. struct grpc_tls_certificate_distributor : public grpc_core::RefCounted { public: diff --git a/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc b/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc index 12d5c9f94f706..a72acf3be9221 100644 --- a/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +++ b/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc @@ -61,34 +61,12 @@ void grpc_tls_credentials_options_set_verify_server_cert( options->set_verify_server_cert(verify_server_cert); } -void grpc_tls_credentials_options_set_certificate_provider( - grpc_tls_credentials_options* options, - grpc_tls_certificate_provider* provider) { - GRPC_CHECK_NE(options, nullptr); - GRPC_CHECK_NE(provider, nullptr); - grpc_core::ExecCtx exec_ctx; - options->set_certificate_provider( - provider->Ref(DEBUG_LOCATION, "set_certificate_provider")); -} - -void grpc_tls_credentials_options_watch_root_certs( - grpc_tls_credentials_options* options) { - GRPC_CHECK_NE(options, nullptr); - options->set_watch_root_cert(true); -} - void grpc_tls_credentials_options_set_root_cert_name( grpc_tls_credentials_options* options, const char* root_cert_name) { GRPC_CHECK_NE(options, nullptr); options->set_root_cert_name(root_cert_name); } -void grpc_tls_credentials_options_watch_identity_key_cert_pairs( - grpc_tls_credentials_options* options) { - GRPC_CHECK_NE(options, nullptr); - options->set_watch_identity_pair(true); -} - void grpc_tls_credentials_options_set_identity_cert_name( grpc_tls_credentials_options* options, const char* identity_cert_name) { GRPC_CHECK_NE(options, nullptr); @@ -160,6 +138,26 @@ void grpc_tls_credentials_options_set_max_tls_version( options->set_max_tls_version(max_tls_version); } +void grpc_tls_credentials_options_set_identity_certificate_provider( + grpc_tls_credentials_options* options, + grpc_tls_certificate_provider* provider) { + GRPC_CHECK_NE(options, nullptr); + GRPC_CHECK_NE(provider, nullptr); + grpc_core::ExecCtx exec_ctx; + options->set_identity_certificate_provider( + provider->Ref(DEBUG_LOCATION, "set_identity_certificate_provider")); +} + +void grpc_tls_credentials_options_set_root_certificate_provider( + grpc_tls_credentials_options* options, + grpc_tls_certificate_provider* provider) { + GRPC_CHECK_NE(options, nullptr); + GRPC_CHECK_NE(provider, nullptr); + grpc_core::ExecCtx exec_ctx; + options->set_root_certificate_provider( + provider->Ref(DEBUG_LOCATION, "set_root_certificate_provider")); +} + GRPCAPI void grpc_tls_credentials_options_set_sni_override( grpc_tls_credentials_options* options, std::optional sni_override) { diff --git a/src/core/credentials/transport/tls/grpc_tls_credentials_options.h b/src/core/credentials/transport/tls/grpc_tls_credentials_options.h index 21e015609fa1d..d40b6868aa9b6 100644 --- a/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +++ b/src/core/credentials/transport/tls/grpc_tls_credentials_options.h @@ -52,20 +52,23 @@ struct grpc_tls_credentials_options return certificate_verifier_.get(); } bool check_call_host() const { return check_call_host_; } - // Returns the distributor from certificate_provider_ if it is set, nullptr otherwise. - grpc_tls_certificate_distributor* certificate_distributor() { - if (certificate_provider_ != nullptr) { return certificate_provider_->distributor().get(); } - return nullptr; - } - bool watch_root_cert() const { return watch_root_cert_; } const std::string& root_cert_name() const { return root_cert_name_; } - bool watch_identity_pair() const { return watch_identity_pair_; } const std::string& identity_cert_name() const { return identity_cert_name_; } const std::string& tls_session_key_log_file_path() const { return tls_session_key_log_file_path_; } const std::string& crl_directory() const { return crl_directory_; } // Returns the CRL Provider std::shared_ptr crl_provider() const { return crl_provider_; } bool send_client_ca_list() const { return send_client_ca_list_; } + // Returns the distributor from identity_certificate_provider_ if it is set, nullptr otherwise. + grpc_tls_certificate_distributor* identity_certificate_distributor() { + if (identity_certificate_provider_ != nullptr) { return identity_certificate_provider_->distributor().get(); } + return nullptr; + } + // Returns the distributor from root_certificate_provider_ if it is set, nullptr otherwise. + grpc_tls_certificate_distributor* root_certificate_distributor() { + if (root_certificate_provider_ != nullptr) { return root_certificate_provider_->distributor().get(); } + return nullptr; + } const std::optional& sni_override() const { return sni_override_; } // Setters for member fields. @@ -75,13 +78,8 @@ struct grpc_tls_credentials_options void set_max_tls_version(grpc_tls_version max_tls_version) { max_tls_version_ = max_tls_version; } void set_certificate_verifier(grpc_core::RefCountedPtr certificate_verifier) { certificate_verifier_ = std::move(certificate_verifier); } void set_check_call_host(bool check_call_host) { check_call_host_ = check_call_host; } - void set_certificate_provider(grpc_core::RefCountedPtr certificate_provider) { certificate_provider_ = std::move(certificate_provider); } - // If need to watch the updates of root certificates with name |root_cert_name|. The default value is false. If used in tls_credentials, it should always be set to true unless the root certificates are not needed. - void set_watch_root_cert(bool watch_root_cert) { watch_root_cert_ = watch_root_cert; } // Sets the name of root certificates being watched, if |set_watch_root_cert| is called. If not set, an empty string will be used as the name. void set_root_cert_name(std::string root_cert_name) { root_cert_name_ = std::move(root_cert_name); } - // If need to watch the updates of identity certificates with name |identity_cert_name|. The default value is false. If used in tls_credentials, it should always be set to true unless the identity key-cert pairs are not needed. - void set_watch_identity_pair(bool watch_identity_pair) { watch_identity_pair_ = watch_identity_pair; } // Sets the name of identity key-cert pairs being watched, if |set_watch_identity_pair| is called. If not set, an empty string will be used as the name. void set_identity_cert_name(std::string identity_cert_name) { identity_cert_name_ = std::move(identity_cert_name); } void set_tls_session_key_log_file_path(std::string tls_session_key_log_file_path) { tls_session_key_log_file_path_ = std::move(tls_session_key_log_file_path); } @@ -89,6 +87,8 @@ struct grpc_tls_credentials_options void set_crl_directory(std::string crl_directory) { crl_directory_ = std::move(crl_directory); } void set_crl_provider(std::shared_ptr crl_provider) { crl_provider_ = std::move(crl_provider); } void set_send_client_ca_list(bool send_client_ca_list) { send_client_ca_list_ = send_client_ca_list; } + void set_identity_certificate_provider(grpc_core::RefCountedPtr identity_certificate_provider) { identity_certificate_provider_ = std::move(identity_certificate_provider); } + void set_root_certificate_provider(grpc_core::RefCountedPtr root_certificate_provider) { root_certificate_provider_ = std::move(root_certificate_provider); } // If set to nullopt, do not override. If set to empty string, disable sending SNI. Otherwise, override SNI void set_sni_override(std::optional sni_override) { sni_override_ = std::move(sni_override); } @@ -99,15 +99,14 @@ struct grpc_tls_credentials_options max_tls_version_ == other.max_tls_version_ && (certificate_verifier_ == other.certificate_verifier_ || (certificate_verifier_ != nullptr && other.certificate_verifier_ != nullptr && certificate_verifier_->Compare(other.certificate_verifier_.get()) == 0)) && check_call_host_ == other.check_call_host_ && - (certificate_provider_ == other.certificate_provider_ || (certificate_provider_ != nullptr && other.certificate_provider_ != nullptr && certificate_provider_->Compare(other.certificate_provider_.get()) == 0)) && - watch_root_cert_ == other.watch_root_cert_ && root_cert_name_ == other.root_cert_name_ && - watch_identity_pair_ == other.watch_identity_pair_ && identity_cert_name_ == other.identity_cert_name_ && tls_session_key_log_file_path_ == other.tls_session_key_log_file_path_ && crl_directory_ == other.crl_directory_ && (crl_provider_ == other.crl_provider_) && send_client_ca_list_ == other.send_client_ca_list_ && + (identity_certificate_provider_ == other.identity_certificate_provider_ || (identity_certificate_provider_ != nullptr && other.identity_certificate_provider_ != nullptr && identity_certificate_provider_->Compare(other.identity_certificate_provider_.get()) == 0)) && + (root_certificate_provider_ == other.root_certificate_provider_ || (root_certificate_provider_ != nullptr && other.root_certificate_provider_ != nullptr && root_certificate_provider_->Compare(other.root_certificate_provider_.get()) == 0)) && sni_override_ == other.sni_override_; } @@ -118,15 +117,14 @@ struct grpc_tls_credentials_options max_tls_version_(other.max_tls_version_), certificate_verifier_(other.certificate_verifier_), check_call_host_(other.check_call_host_), - certificate_provider_(other.certificate_provider_), - watch_root_cert_(other.watch_root_cert_), root_cert_name_(other.root_cert_name_), - watch_identity_pair_(other.watch_identity_pair_), identity_cert_name_(other.identity_cert_name_), tls_session_key_log_file_path_(other.tls_session_key_log_file_path_), crl_directory_(other.crl_directory_), crl_provider_(other.crl_provider_), send_client_ca_list_(other.send_client_ca_list_), + identity_certificate_provider_(other.identity_certificate_provider_), + root_certificate_provider_(other.root_certificate_provider_), sni_override_(other.sni_override_) {} private: @@ -136,15 +134,14 @@ struct grpc_tls_credentials_options grpc_tls_version max_tls_version_ = grpc_tls_version::TLS1_3; grpc_core::RefCountedPtr certificate_verifier_; bool check_call_host_ = true; - grpc_core::RefCountedPtr certificate_provider_; - bool watch_root_cert_ = false; std::string root_cert_name_; - bool watch_identity_pair_ = false; std::string identity_cert_name_; std::string tls_session_key_log_file_path_; std::string crl_directory_; std::shared_ptr crl_provider_; bool send_client_ca_list_ = false; + grpc_core::RefCountedPtr identity_certificate_provider_; + grpc_core::RefCountedPtr root_certificate_provider_; std::optional sni_override_; }; diff --git a/src/core/credentials/transport/tls/tls_security_connector.cc b/src/core/credentials/transport/tls/tls_security_connector.cc index 8dcdba0a5f34a..75c4516a01317 100644 --- a/src/core/credentials/transport/tls/tls_security_connector.cc +++ b/src/core/credentials/transport/tls/tls_security_connector.cc @@ -291,17 +291,20 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector( SplitHostPort(target_name, &host, &port); target_name_ = std::string(host); // Create a watcher. - auto watcher_ptr = std::make_unique(this); - certificate_watcher_ = watcher_ptr.get(); - // Register the watcher with the distributor. - grpc_tls_certificate_distributor* distributor = - options_->certificate_distributor(); + auto identity_watcher_ptr = + std::make_unique(this); + auto root_watcher_ptr = std::make_unique(this); + root_certificate_watcher_ = root_watcher_ptr.get(); + identity_certificate_watcher_ = identity_watcher_ptr.get(); + bool watch_root_cert = options_->root_certificate_distributor() != nullptr; + bool watch_identity_cert = + options_->identity_certificate_distributor() != nullptr; std::optional watched_root_cert_name; - if (options_->watch_root_cert()) { + if (watch_root_cert) { watched_root_cert_name = options_->root_cert_name(); } std::optional watched_identity_cert_name; - if (options_->watch_identity_pair()) { + if (watch_identity_cert) { watched_identity_cert_name = options_->identity_cert_name(); } // We will use the root certs stored in system default locations if not @@ -310,13 +313,19 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector( // certs" is a valid case(and hence we will need to call // OnCertificatesChanged), but it requires nothing from the provider, and // hence no need to register the watcher. - bool use_default_roots = !options_->watch_root_cert(); - if (use_default_roots && !options_->watch_identity_pair()) { - watcher_ptr->OnCertificatesChanged(nullptr, std::nullopt); + if (!watch_root_cert && !watch_identity_cert) { + root_certificate_watcher_->OnCertificatesChanged(nullptr, std::nullopt); } else { - distributor->WatchTlsCertificates(std::move(watcher_ptr), - watched_root_cert_name, - watched_identity_cert_name); + if (watch_root_cert) { + options_->root_certificate_distributor()->WatchTlsCertificates( + std::move(root_watcher_ptr), watched_root_cert_name, + watched_identity_cert_name); + } + if (watch_identity_cert) { + options_->identity_certificate_distributor()->WatchTlsCertificates( + std::move(identity_watcher_ptr), watched_root_cert_name, + watched_identity_cert_name); + } } } @@ -325,10 +334,16 @@ TlsChannelSecurityConnector::~TlsChannelSecurityConnector() { tsi_ssl_session_cache_unref(ssl_session_cache_); } // Cancel all the watchers. - grpc_tls_certificate_distributor* distributor = - options_->certificate_distributor(); - if (distributor != nullptr) { - distributor->CancelTlsCertificatesWatch(certificate_watcher_); + grpc_tls_certificate_distributor* root_distributor = + options_->root_certificate_distributor(); + if (root_distributor != nullptr) { + root_distributor->CancelTlsCertificatesWatch(root_certificate_watcher_); + } + grpc_tls_certificate_distributor* identity_distributor = + options_->identity_certificate_distributor(); + if (identity_distributor != nullptr) { + identity_distributor->CancelTlsCertificatesWatch( + identity_certificate_watcher_); } if (client_handshaker_factory_ != nullptr) { tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_); @@ -449,10 +464,13 @@ void TlsChannelSecurityConnector::TlsChannelCertificateWatcher:: if (key_cert_pairs.has_value()) { security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs); } - const bool root_ready = !security_connector_->options_->watch_root_cert() || - security_connector_->root_cert_info_ != nullptr; + const bool root_ready = + security_connector_->options_->root_certificate_distributor() == + nullptr || + security_connector_->root_cert_info_ != nullptr; const bool identity_ready = - !security_connector_->options_->watch_identity_pair() || + security_connector_->options_->identity_certificate_distributor() == + nullptr || security_connector_->pem_key_cert_pair_list_.has_value(); if (root_ready && identity_ready) { if (security_connector_->UpdateHandshakerFactoryLocked() != @@ -539,7 +557,7 @@ TlsChannelSecurityConnector::UpdateHandshakerFactoryLocked() { if (pem_key_cert_pair_list_.has_value()) { pem_key_cert_pair = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_); } - bool use_default_roots = !options_->watch_root_cert(); + bool use_default_roots = options_->root_certificate_distributor() == nullptr; grpc_security_status status = grpc_ssl_tsi_client_handshaker_factory_init( pem_key_cert_pair, use_default_roots ? nullptr : root_cert_info_, skip_server_certificate_verification, @@ -586,30 +604,48 @@ TlsServerSecurityConnector::TlsServerSecurityConnector( tsi::TlsSessionKeyLoggerCache::Get(tls_session_key_log_file_path); } // Create a watcher. - auto watcher_ptr = std::make_unique(this); - certificate_watcher_ = watcher_ptr.get(); - // Register the watcher with the distributor. - grpc_tls_certificate_distributor* distributor = - options_->certificate_distributor(); + auto root_watcher_ptr = std::make_unique(this); + auto identity_watcher_ptr = + std::make_unique(this); + root_certificate_watcher_ = root_watcher_ptr.get(); + identity_certificate_watcher_ = identity_watcher_ptr.get(); + bool watch_root_cert = options_->root_certificate_distributor() != nullptr; + bool watch_identity_cert = + options_->identity_certificate_distributor() != nullptr; std::optional watched_root_cert_name; - if (options_->watch_root_cert()) { + if (watch_root_cert) { watched_root_cert_name = options_->root_cert_name(); } std::optional watched_identity_cert_name; - if (options_->watch_identity_pair()) { + if (watch_identity_cert) { watched_identity_cert_name = options_->identity_cert_name(); } - // Server side won't use default system roots at any time. - distributor->WatchTlsCertificates(std::move(watcher_ptr), - watched_root_cert_name, - watched_identity_cert_name); + // Register the watcher with the distributor. + if (watch_root_cert) { + options_->root_certificate_distributor()->WatchTlsCertificates( + std::move(root_watcher_ptr), watched_root_cert_name, + watched_identity_cert_name); + } + if (watch_identity_cert) { + options_->identity_certificate_distributor()->WatchTlsCertificates( + std::move(identity_watcher_ptr), watched_root_cert_name, + watched_identity_cert_name); + } } TlsServerSecurityConnector::~TlsServerSecurityConnector() { // Cancel all the watchers. - grpc_tls_certificate_distributor* distributor = - options_->certificate_distributor(); - distributor->CancelTlsCertificatesWatch(certificate_watcher_); + grpc_tls_certificate_distributor* root_distributor = + options_->root_certificate_distributor(); + if (root_distributor != nullptr) { + root_distributor->CancelTlsCertificatesWatch(root_certificate_watcher_); + } + grpc_tls_certificate_distributor* identity_distributor = + options_->identity_certificate_distributor(); + if (identity_distributor != nullptr) { + identity_distributor->CancelTlsCertificatesWatch( + identity_certificate_watcher_); + } if (server_handshaker_factory_ != nullptr) { tsi_ssl_server_handshaker_factory_unref(server_handshaker_factory_); } @@ -701,10 +737,12 @@ void TlsServerSecurityConnector::TlsServerCertificateWatcher:: if (key_cert_pairs.has_value()) { security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs); } - bool root_being_watched = security_connector_->options_->watch_root_cert(); + bool root_being_watched = + security_connector_->options_->root_certificate_distributor() != nullptr; bool root_has_value = security_connector_->root_cert_info_ != nullptr; bool identity_being_watched = - security_connector_->options_->watch_identity_pair(); + security_connector_->options_->identity_certificate_distributor() != + nullptr; bool identity_has_value = security_connector_->pem_key_cert_pair_list_.has_value(); if ((root_being_watched && root_has_value && identity_being_watched && diff --git a/src/core/credentials/transport/tls/tls_security_connector.h b/src/core/credentials/transport/tls/tls_security_connector.h index 9efdc235e0383..7d5eabf6f104f 100644 --- a/src/core/credentials/transport/tls/tls_security_connector.h +++ b/src/core/credentials/transport/tls/tls_security_connector.h @@ -158,7 +158,9 @@ class TlsChannelSecurityConnector final Mutex verifier_request_map_mu_; RefCountedPtr options_; grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* - certificate_watcher_ = nullptr; + root_certificate_watcher_ = nullptr; + grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* + identity_certificate_watcher_ = nullptr; std::string target_name_; std::string overridden_target_name_; tsi_ssl_client_handshaker_factory* client_handshaker_factory_ @@ -269,7 +271,9 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector { Mutex verifier_request_map_mu_; RefCountedPtr options_; grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* - certificate_watcher_ = nullptr; + root_certificate_watcher_ = nullptr; + grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* + identity_certificate_watcher_ = nullptr; tsi_ssl_server_handshaker_factory* server_handshaker_factory_ ABSL_GUARDED_BY(mu_) = nullptr; std::optional pem_key_cert_pair_list_ diff --git a/src/core/credentials/transport/xds/xds_credentials.cc b/src/core/credentials/transport/xds/xds_credentials.cc index 6e439fec34a20..57ce337052a0d 100644 --- a/src/core/credentials/transport/xds/xds_credentials.cc +++ b/src/core/credentials/transport/xds/xds_credentials.cc @@ -175,15 +175,13 @@ XdsCredentials::create_security_connector( if (watch_root || use_system_root_certs || watch_identity) { auto tls_credentials_options = MakeRefCounted(); - if (watch_root || watch_identity) { - tls_credentials_options->set_certificate_provider( + if (watch_root) { + tls_credentials_options->set_root_certificate_provider( + xds_certificate_provider); + } + if (watch_identity) { + tls_credentials_options->set_identity_certificate_provider( xds_certificate_provider); - if (watch_root) { - tls_credentials_options->set_watch_root_cert(true); - } - if (watch_identity) { - tls_credentials_options->set_watch_identity_pair(true); - } } tls_credentials_options->set_verify_server_cert(true); auto hostname = args->GetOwnedString(GRPC_ARG_ADDRESS_NAME); @@ -233,10 +231,11 @@ XdsServerCredentials::create_security_connector(const ChannelArgs& args) { xds_certificate_provider->ProvidesIdentityCerts()) { auto tls_credentials_options = MakeRefCounted(); - tls_credentials_options->set_watch_identity_pair(true); - tls_credentials_options->set_certificate_provider(xds_certificate_provider); + tls_credentials_options->set_identity_certificate_provider( + xds_certificate_provider); if (xds_certificate_provider->ProvidesRootCerts()) { - tls_credentials_options->set_watch_root_cert(true); + tls_credentials_options->set_root_certificate_provider( + xds_certificate_provider); tls_credentials_options->set_cert_request_type( xds_certificate_provider->require_client_certificate() ? GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY diff --git a/src/core/xds/grpc/xds_certificate_provider.h b/src/core/xds/grpc/xds_certificate_provider.h index 08287ec3a2eb4..54bbd99212428 100644 --- a/src/core/xds/grpc/xds_certificate_provider.h +++ b/src/core/xds/grpc/xds_certificate_provider.h @@ -39,7 +39,11 @@ #include "absl/strings/string_view.h" namespace grpc_core { - +// TODO(roth): Now that we've changed the TLS creds API to configure different +// providers for root and identity certs, we no longer need to multiplex +// multiple providers in an XdsCertificateProvider. Consider removing this code +// and instead just passing down the relevant TLS creds configuration via a +// channel arg. class XdsCertificateProvider final : public grpc_tls_certificate_provider { public: // ctor for client side diff --git a/src/cpp/common/tls_credentials_options.cc b/src/cpp/common/tls_credentials_options.cc index 7bfb8df91f138..0e455f7c2b4e1 100644 --- a/src/cpp/common/tls_credentials_options.cc +++ b/src/cpp/common/tls_credentials_options.cc @@ -50,10 +50,24 @@ TlsCredentialsOptions::TlsCredentialsOptions( void TlsCredentialsOptions::set_certificate_provider( std::shared_ptr certificate_provider) { - certificate_provider_ = certificate_provider; - if (certificate_provider_ != nullptr) { - grpc_tls_credentials_options_set_certificate_provider( - c_credentials_options_, certificate_provider_->c_provider()); + legacy_certificate_provider_ = std::move(certificate_provider); +} + +void TlsCredentialsOptions::set_root_certificate_provider( + std::shared_ptr certificate_provider) { + root_certificate_provider_ = std::move(certificate_provider); + if (root_certificate_provider_ != nullptr) { + grpc_tls_credentials_options_set_root_certificate_provider( + c_credentials_options_, root_certificate_provider_->c_provider()); + } +} + +void TlsCredentialsOptions::set_identity_certificate_provider( + std::shared_ptr certificate_provider) { + identity_certificate_provider_ = std::move(certificate_provider); + if (identity_certificate_provider_ != nullptr) { + grpc_tls_credentials_options_set_identity_certificate_provider( + c_credentials_options_, identity_certificate_provider_->c_provider()); } } @@ -64,7 +78,10 @@ void TlsCredentialsOptions::set_crl_provider( } void TlsCredentialsOptions::watch_root_certs() { - grpc_tls_credentials_options_watch_root_certs(c_credentials_options_); + if (legacy_certificate_provider_ != nullptr) { + grpc_tls_credentials_options_set_root_certificate_provider( + c_credentials_options_, legacy_certificate_provider_->c_provider()); + } } void TlsCredentialsOptions::set_root_cert_name( @@ -74,8 +91,10 @@ void TlsCredentialsOptions::set_root_cert_name( } void TlsCredentialsOptions::watch_identity_key_cert_pairs() { - grpc_tls_credentials_options_watch_identity_key_cert_pairs( - c_credentials_options_); + if (legacy_certificate_provider_ != nullptr) { + grpc_tls_credentials_options_set_identity_certificate_provider( + c_credentials_options_, legacy_certificate_provider_->c_provider()); + } } void TlsCredentialsOptions::set_identity_cert_name( diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi index 488a3367c5eb6..a4a54caabcd43 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi @@ -214,13 +214,14 @@ cdef class SSLChannelCredentials(ChannelCredentials): if c_pem_root_certificates != NULL or c_tls_identity_pairs != NULL: c_tls_certificate_provider = grpc_tls_certificate_provider_static_data_create( - c_pem_root_certificates, c_tls_identity_pairs) - grpc_tls_credentials_options_set_certificate_provider(c_tls_credentials_options, c_tls_certificate_provider) - grpc_tls_certificate_provider_release(c_tls_certificate_provider) + c_pem_root_certificates, c_tls_identity_pairs) if c_pem_root_certificates != NULL: - grpc_tls_credentials_options_watch_root_certs(c_tls_credentials_options) + grpc_tls_credentials_options_set_root_certificate_provider( + c_tls_credentials_options, c_tls_certificate_provider) if c_tls_identity_pairs != NULL: - grpc_tls_credentials_options_watch_identity_key_cert_pairs(c_tls_credentials_options) + grpc_tls_credentials_options_set_identity_certificate_provider( + c_tls_credentials_options, c_tls_certificate_provider) + grpc_tls_certificate_provider_release(c_tls_certificate_provider) with nogil: return grpc_tls_credentials_create(c_tls_credentials_options) diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi index 5aafce2adb138..56f2dbef2833e 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi @@ -594,8 +594,12 @@ cdef extern from "grpc/credentials.h": ctypedef struct grpc_tls_certificate_provider: # We don't care about the internals (and in fact don't know them) pass + + void grpc_tls_credentials_options_set_root_certificate_provider( + grpc_tls_credentials_options *options, + grpc_tls_certificate_provider *provider) nogil - void grpc_tls_credentials_options_set_certificate_provider( + void grpc_tls_credentials_options_set_identity_certificate_provider( grpc_tls_credentials_options *options, grpc_tls_certificate_provider *provider) nogil @@ -613,16 +617,6 @@ cdef extern from "grpc/credentials.h": grpc_tls_certificate_provider *grpc_tls_certificate_provider_static_data_create( const char *root_certificate, grpc_tls_identity_pairs *pem_key_cert_pairs) nogil - void grpc_tls_credentials_options_set_certificate_provider( - grpc_tls_credentials_options *options, - grpc_tls_certificate_provider *provider) nogil - - void grpc_tls_credentials_options_watch_root_certs( - grpc_tls_credentials_options *options) nogil - - void grpc_tls_credentials_options_watch_identity_key_cert_pairs( - grpc_tls_credentials_options *options) nogil - void grpc_tls_certificate_provider_release( grpc_tls_certificate_provider *provider) nogil diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index 3f120f2f15dfd..7c44a44b1faa4 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c @@ -84,10 +84,9 @@ grpc_tls_credentials_options_set_min_tls_version_type grpc_tls_credentials_optio grpc_tls_credentials_options_set_max_tls_version_type grpc_tls_credentials_options_set_max_tls_version_import; grpc_tls_credentials_options_copy_type grpc_tls_credentials_options_copy_import; grpc_tls_credentials_options_destroy_type grpc_tls_credentials_options_destroy_import; -grpc_tls_credentials_options_set_certificate_provider_type grpc_tls_credentials_options_set_certificate_provider_import; -grpc_tls_credentials_options_watch_root_certs_type grpc_tls_credentials_options_watch_root_certs_import; +grpc_tls_credentials_options_set_identity_certificate_provider_type grpc_tls_credentials_options_set_identity_certificate_provider_import; +grpc_tls_credentials_options_set_root_certificate_provider_type grpc_tls_credentials_options_set_root_certificate_provider_import; grpc_tls_credentials_options_set_root_cert_name_type grpc_tls_credentials_options_set_root_cert_name_import; -grpc_tls_credentials_options_watch_identity_key_cert_pairs_type grpc_tls_credentials_options_watch_identity_key_cert_pairs_import; grpc_tls_credentials_options_set_identity_cert_name_type grpc_tls_credentials_options_set_identity_cert_name_import; grpc_tls_credentials_options_set_cert_request_type_type grpc_tls_credentials_options_set_cert_request_type_import; grpc_tls_credentials_options_set_crl_directory_type grpc_tls_credentials_options_set_crl_directory_import; @@ -371,10 +370,9 @@ void grpc_rb_load_imports(HMODULE library) { grpc_tls_credentials_options_set_max_tls_version_import = (grpc_tls_credentials_options_set_max_tls_version_type) GetProcAddress(library, "grpc_tls_credentials_options_set_max_tls_version"); grpc_tls_credentials_options_copy_import = (grpc_tls_credentials_options_copy_type) GetProcAddress(library, "grpc_tls_credentials_options_copy"); grpc_tls_credentials_options_destroy_import = (grpc_tls_credentials_options_destroy_type) GetProcAddress(library, "grpc_tls_credentials_options_destroy"); - grpc_tls_credentials_options_set_certificate_provider_import = (grpc_tls_credentials_options_set_certificate_provider_type) GetProcAddress(library, "grpc_tls_credentials_options_set_certificate_provider"); - grpc_tls_credentials_options_watch_root_certs_import = (grpc_tls_credentials_options_watch_root_certs_type) GetProcAddress(library, "grpc_tls_credentials_options_watch_root_certs"); + grpc_tls_credentials_options_set_identity_certificate_provider_import = (grpc_tls_credentials_options_set_identity_certificate_provider_type) GetProcAddress(library, "grpc_tls_credentials_options_set_identity_certificate_provider"); + grpc_tls_credentials_options_set_root_certificate_provider_import = (grpc_tls_credentials_options_set_root_certificate_provider_type) GetProcAddress(library, "grpc_tls_credentials_options_set_root_certificate_provider"); grpc_tls_credentials_options_set_root_cert_name_import = (grpc_tls_credentials_options_set_root_cert_name_type) GetProcAddress(library, "grpc_tls_credentials_options_set_root_cert_name"); - grpc_tls_credentials_options_watch_identity_key_cert_pairs_import = (grpc_tls_credentials_options_watch_identity_key_cert_pairs_type) GetProcAddress(library, "grpc_tls_credentials_options_watch_identity_key_cert_pairs"); grpc_tls_credentials_options_set_identity_cert_name_import = (grpc_tls_credentials_options_set_identity_cert_name_type) GetProcAddress(library, "grpc_tls_credentials_options_set_identity_cert_name"); grpc_tls_credentials_options_set_cert_request_type_import = (grpc_tls_credentials_options_set_cert_request_type_type) GetProcAddress(library, "grpc_tls_credentials_options_set_cert_request_type"); grpc_tls_credentials_options_set_crl_directory_import = (grpc_tls_credentials_options_set_crl_directory_type) GetProcAddress(library, "grpc_tls_credentials_options_set_crl_directory"); diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index 1ea52e91a1e43..0aa341073eaf0 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -228,18 +228,15 @@ extern grpc_tls_credentials_options_copy_type grpc_tls_credentials_options_copy_ typedef void(*grpc_tls_credentials_options_destroy_type)(grpc_tls_credentials_options* options); extern grpc_tls_credentials_options_destroy_type grpc_tls_credentials_options_destroy_import; #define grpc_tls_credentials_options_destroy grpc_tls_credentials_options_destroy_import -typedef void(*grpc_tls_credentials_options_set_certificate_provider_type)(grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); -extern grpc_tls_credentials_options_set_certificate_provider_type grpc_tls_credentials_options_set_certificate_provider_import; -#define grpc_tls_credentials_options_set_certificate_provider grpc_tls_credentials_options_set_certificate_provider_import -typedef void(*grpc_tls_credentials_options_watch_root_certs_type)(grpc_tls_credentials_options* options); -extern grpc_tls_credentials_options_watch_root_certs_type grpc_tls_credentials_options_watch_root_certs_import; -#define grpc_tls_credentials_options_watch_root_certs grpc_tls_credentials_options_watch_root_certs_import +typedef void(*grpc_tls_credentials_options_set_identity_certificate_provider_type)(grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); +extern grpc_tls_credentials_options_set_identity_certificate_provider_type grpc_tls_credentials_options_set_identity_certificate_provider_import; +#define grpc_tls_credentials_options_set_identity_certificate_provider grpc_tls_credentials_options_set_identity_certificate_provider_import +typedef void(*grpc_tls_credentials_options_set_root_certificate_provider_type)(grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); +extern grpc_tls_credentials_options_set_root_certificate_provider_type grpc_tls_credentials_options_set_root_certificate_provider_import; +#define grpc_tls_credentials_options_set_root_certificate_provider grpc_tls_credentials_options_set_root_certificate_provider_import typedef void(*grpc_tls_credentials_options_set_root_cert_name_type)(grpc_tls_credentials_options* options, const char* root_cert_name); extern grpc_tls_credentials_options_set_root_cert_name_type grpc_tls_credentials_options_set_root_cert_name_import; #define grpc_tls_credentials_options_set_root_cert_name grpc_tls_credentials_options_set_root_cert_name_import -typedef void(*grpc_tls_credentials_options_watch_identity_key_cert_pairs_type)(grpc_tls_credentials_options* options); -extern grpc_tls_credentials_options_watch_identity_key_cert_pairs_type grpc_tls_credentials_options_watch_identity_key_cert_pairs_import; -#define grpc_tls_credentials_options_watch_identity_key_cert_pairs grpc_tls_credentials_options_watch_identity_key_cert_pairs_import typedef void(*grpc_tls_credentials_options_set_identity_cert_name_type)(grpc_tls_credentials_options* options, const char* identity_cert_name); extern grpc_tls_credentials_options_set_identity_cert_name_type grpc_tls_credentials_options_set_identity_cert_name_import; #define grpc_tls_credentials_options_set_identity_cert_name grpc_tls_credentials_options_set_identity_cert_name_import diff --git a/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc b/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc index f19a1330f34b8..cbf4ae1a061c4 100644 --- a/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc +++ b/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc @@ -92,26 +92,6 @@ TEST(TlsCredentialsOptionsComparatorTest, DifferentCheckCallHost) { delete options_1; delete options_2; } -TEST(TlsCredentialsOptionsComparatorTest, DifferentCertificateProvider) { - auto* options_1 = grpc_tls_credentials_options_create(); - auto* options_2 = grpc_tls_credentials_options_create(); - options_1->set_certificate_provider(MakeRefCounted("root_cert_1", PemKeyCertPairList())); - options_2->set_certificate_provider(MakeRefCounted("root_cert_2", PemKeyCertPairList())); - EXPECT_FALSE(*options_1 == *options_2); - EXPECT_FALSE(*options_2 == *options_1); - delete options_1; - delete options_2; -} -TEST(TlsCredentialsOptionsComparatorTest, DifferentWatchRootCert) { - auto* options_1 = grpc_tls_credentials_options_create(); - auto* options_2 = grpc_tls_credentials_options_create(); - options_1->set_watch_root_cert(false); - options_2->set_watch_root_cert(true); - EXPECT_FALSE(*options_1 == *options_2); - EXPECT_FALSE(*options_2 == *options_1); - delete options_1; - delete options_2; -} TEST(TlsCredentialsOptionsComparatorTest, DifferentRootCertName) { auto* options_1 = grpc_tls_credentials_options_create(); auto* options_2 = grpc_tls_credentials_options_create(); @@ -122,16 +102,6 @@ TEST(TlsCredentialsOptionsComparatorTest, DifferentRootCertName) { delete options_1; delete options_2; } -TEST(TlsCredentialsOptionsComparatorTest, DifferentWatchIdentityPair) { - auto* options_1 = grpc_tls_credentials_options_create(); - auto* options_2 = grpc_tls_credentials_options_create(); - options_1->set_watch_identity_pair(false); - options_2->set_watch_identity_pair(true); - EXPECT_FALSE(*options_1 == *options_2); - EXPECT_FALSE(*options_2 == *options_1); - delete options_1; - delete options_2; -} TEST(TlsCredentialsOptionsComparatorTest, DifferentIdentityCertName) { auto* options_1 = grpc_tls_credentials_options_create(); auto* options_2 = grpc_tls_credentials_options_create(); @@ -182,6 +152,26 @@ TEST(TlsCredentialsOptionsComparatorTest, DifferentSendClientCaListValues) { delete options_1; delete options_2; } +TEST(TlsCredentialsOptionsComparatorTest, DifferentIdentityCertificateProvider) { + auto* options_1 = grpc_tls_credentials_options_create(); + auto* options_2 = grpc_tls_credentials_options_create(); + options_1->set_identity_certificate_provider(MakeRefCounted("root_cert_1", PemKeyCertPairList())); + options_2->set_identity_certificate_provider(MakeRefCounted("root_cert_2", PemKeyCertPairList())); + EXPECT_FALSE(*options_1 == *options_2); + EXPECT_FALSE(*options_2 == *options_1); + delete options_1; + delete options_2; +} +TEST(TlsCredentialsOptionsComparatorTest, DifferentRootCertificateProvider) { + auto* options_1 = grpc_tls_credentials_options_create(); + auto* options_2 = grpc_tls_credentials_options_create(); + options_1->set_root_certificate_provider(MakeRefCounted("root_cert_1", PemKeyCertPairList())); + options_2->set_root_certificate_provider(MakeRefCounted("root_cert_2", PemKeyCertPairList())); + EXPECT_FALSE(*options_1 == *options_2); + EXPECT_FALSE(*options_2 == *options_1); + delete options_1; + delete options_2; +} TEST(TlsCredentialsOptionsComparatorTest, DifferentSniOverride) { auto* options_1 = grpc_tls_credentials_options_create(); auto* options_2 = grpc_tls_credentials_options_create(); diff --git a/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc b/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc index efd392111c8dd..15ca10ee66160 100644 --- a/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc +++ b/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc @@ -107,9 +107,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -128,8 +127,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -148,8 +146,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -166,8 +163,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -184,9 +180,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type( GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); auto credentials = MakeRefCounted(options); @@ -205,8 +200,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -224,8 +218,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -246,9 +239,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -267,8 +259,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", "", CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -287,8 +278,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, "", /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -305,8 +295,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", "", INVALID_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -324,9 +313,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type( GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); auto credentials = MakeRefCounted(options); @@ -345,8 +333,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, "", /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -364,8 +351,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", "", CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -381,8 +367,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( INVALID_PATH, INVALID_PATH, "", /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(provider); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -409,9 +394,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( tmp_identity_key.name(), tmp_identity_cert.name(), tmp_root_cert.name(), /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -459,9 +443,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( tmp_identity_key->name(), tmp_identity_cert->name(), tmp_root_cert->name(), /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -533,8 +516,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, ServerOptionsWithExternalVerifier) { // On server side we have to set the provider providing identity certs. auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); auto connector = credentials->create_security_connector(ChannelArgs()); @@ -572,8 +554,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, // On server side we have to set the provider providing identity certs. auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); auto connector = credentials->create_security_connector(ChannelArgs()); @@ -603,9 +584,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, CrlProviderWithServerCredentials) { auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type( GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); auto crl_provider = experimental::CreateStaticCrlProvider({}); diff --git a/test/core/credentials/transport/tls/tls_security_connector_test.cc b/test/core/credentials/transport/tls/tls_security_connector_test.cc index fd2d821b17da1..218c68bb8738f 100644 --- a/test/core/credentials/transport/tls/tls_security_connector_test.cc +++ b/test/core/credentials/transport/tls/tls_security_connector_test.cc @@ -141,9 +141,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -191,8 +190,7 @@ TEST_F(TlsSecurityConnectorTest, // Create options only watching for identity certificates. RefCountedPtr root_options = MakeRefCounted(); - root_options->set_certificate_provider(provider); - root_options->set_watch_identity_pair(true); + root_options->set_identity_certificate_provider(std::move(provider)); root_options->set_identity_cert_name(kIdentityCertName); RefCountedPtr root_credential = MakeRefCounted(root_options); @@ -223,8 +221,7 @@ TEST_F(TlsSecurityConnectorTest, // Create options only watching for root certificates. RefCountedPtr root_options = MakeRefCounted(); - root_options->set_certificate_provider(provider); - root_options->set_watch_root_cert(true); + root_options->set_root_certificate_provider(std::move(provider)); root_options->set_root_cert_name(kRootCertName); RefCountedPtr root_credential = MakeRefCounted(root_options); @@ -253,9 +250,8 @@ TEST_F(TlsSecurityConnectorTest, // available at distributor right now. RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -287,9 +283,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -433,8 +428,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -459,8 +453,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(provider); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -469,10 +462,10 @@ TEST_F(TlsSecurityConnectorTest, credential->create_security_connector(nullptr, kTargetName, &connector_args); auto other_options = MakeRefCounted(); - other_options->set_certificate_provider(provider); - other_options->set_watch_root_cert(true); + other_options->set_root_certificate_provider(provider); + other_options->set_identity_certificate_provider(std::move(provider)); other_options->set_root_cert_name(kRootCertName); - other_options->set_watch_identity_pair(true); + other_options->set_identity_cert_name(kIdentityCertName); RefCountedPtr other_credential = MakeRefCounted(other_options); ChannelArgs other_connector_args; @@ -492,8 +485,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -521,8 +513,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -771,9 +762,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -808,8 +798,7 @@ TEST_F(TlsSecurityConnectorTest, // Create options only watching for identity certificates. RefCountedPtr identity_options = MakeRefCounted(); - identity_options->set_certificate_provider(provider); - identity_options->set_watch_identity_pair(true); + identity_options->set_identity_certificate_provider(std::move(provider)); identity_options->set_identity_cert_name(kIdentityCertName); RefCountedPtr identity_credential = MakeRefCounted(identity_options); @@ -840,9 +829,8 @@ TEST_F(TlsSecurityConnectorTest, // available at distributor right now. RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -873,9 +861,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -924,8 +911,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -946,8 +932,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -976,8 +961,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier.Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1007,8 +991,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier.Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1042,8 +1025,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier->Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1075,8 +1057,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier->Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1112,8 +1093,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier.Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1150,9 +1130,8 @@ TEST_F( MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1186,9 +1165,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1226,9 +1204,8 @@ TEST_F( MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1261,9 +1238,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1300,4 +1276,4 @@ int main(int argc, char** argv) { int ret = RUN_ALL_TESTS(); grpc_shutdown(); return ret; -} +} \ No newline at end of file diff --git a/test/core/end2end/fixtures/h2_tls_common.h b/test/core/end2end/fixtures/h2_tls_common.h index eb32a636bdf2c..bf338cbb3f408 100644 --- a/test/core/end2end/fixtures/h2_tls_common.h +++ b/test/core/end2end/fixtures/h2_tls_common.h @@ -171,10 +171,10 @@ class TlsFixture : public SecureFixture { options->set_min_tls_version(tls_version_); options->set_max_tls_version(tls_version_); // Set credential provider. - grpc_tls_credentials_options_set_certificate_provider(options, - client_provider_); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); + grpc_tls_credentials_options_set_root_certificate_provider( + options, client_provider_); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, client_provider_); // Set credential verifier. grpc_tls_credentials_options_set_certificate_verifier(options, client_verifier_); @@ -191,10 +191,10 @@ class TlsFixture : public SecureFixture { options->set_min_tls_version(tls_version_); options->set_max_tls_version(tls_version_); // Set credential provider. - grpc_tls_credentials_options_set_certificate_provider(options, - server_provider_); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); + grpc_tls_credentials_options_set_root_certificate_provider( + options, server_provider_); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, server_provider_); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); diff --git a/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc b/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc index e7de3e61fa95e..5dba34c5ebfde 100644 --- a/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc +++ b/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc @@ -75,10 +75,10 @@ grpc_server* server_create(grpc_completion_queue* cq, const char* server_addr, server_cert.c_str()); *server_provider = grpc_tls_certificate_provider_static_data_create( ca_cert.c_str(), server_pairs); - grpc_tls_credentials_options_set_certificate_provider(options, - *server_provider); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); + grpc_tls_credentials_options_set_root_certificate_provider(options, + *server_provider); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, *server_provider); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); @@ -116,10 +116,10 @@ grpc_channel* client_create(const char* server_addr, *client_provider = grpc_tls_certificate_provider_static_data_create( ca_cert.c_str(), client_pairs); - grpc_tls_credentials_options_set_certificate_provider(options, - *client_provider); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); + grpc_tls_credentials_options_set_root_certificate_provider(options, + *client_provider); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, *client_provider); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); diff --git a/test/core/transport/chttp2/chttp2_server_listener_test.cc b/test/core/transport/chttp2/chttp2_server_listener_test.cc index ed5552af00b59..8f744fdaecaa4 100644 --- a/test/core/transport/chttp2/chttp2_server_listener_test.cc +++ b/test/core/transport/chttp2/chttp2_server_listener_test.cc @@ -310,11 +310,11 @@ RefCountedPtr CreateSecureServerCredentials() { grpc_tls_certificate_provider* server_provider = grpc_tls_certificate_provider_static_data_create(ca_cert.c_str(), server_pairs); - grpc_tls_credentials_options_set_certificate_provider(options, - server_provider); + grpc_tls_credentials_options_set_root_certificate_provider(options, + server_provider); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, server_provider); grpc_tls_certificate_provider_release(server_provider); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); diff --git a/tools/codegen/core/gen_grpc_tls_credentials_options.py b/tools/codegen/core/gen_grpc_tls_credentials_options.py index 6382620f7c63a..e409036ea6103 100755 --- a/tools/codegen/core/gen_grpc_tls_credentials_options.py +++ b/tools/codegen/core/gen_grpc_tls_credentials_options.py @@ -115,49 +115,6 @@ class DataMember: test_value_1="false", test_value_2="true", ), - DataMember( - name="certificate_provider", - type="grpc_core::RefCountedPtr", - getter_comment=( - "Returns the distributor from certificate_provider_ if it is set," - " nullptr otherwise." - ), - override_getter="""grpc_tls_certificate_distributor* certificate_distributor() { - if (certificate_provider_ != nullptr) { return certificate_provider_->distributor().get(); } - return nullptr; - }""", - setter_move_semantics=True, - special_comparator=( - "(certificate_provider_ == other.certificate_provider_ ||" - " (certificate_provider_ != nullptr && other.certificate_provider_" - " != nullptr &&" - " certificate_provider_->Compare(other.certificate_provider_.get())" - " == 0))" - ), - test_name="DifferentCertificateProvider", - test_value_1=( - 'MakeRefCounted("root_cert_1",' - " PemKeyCertPairList())" - ), - test_value_2=( - 'MakeRefCounted("root_cert_2",' - " PemKeyCertPairList())" - ), - ), - DataMember( - name="watch_root_cert", - type="bool", - default_initializer="false", - setter_comment=( - "If need to watch the updates of root certificates with name" - " |root_cert_name|. The default value is false. If used in" - " tls_credentials, it should always be set to true unless the root" - " certificates are not needed." - ), - test_name="DifferentWatchRootCert", - test_value_1="false", - test_value_2="true", - ), DataMember( name="root_cert_name", type="std::string", @@ -172,20 +129,6 @@ class DataMember: test_value_1='"root_cert_name_1"', test_value_2='"root_cert_name_2"', ), - DataMember( - name="watch_identity_pair", - type="bool", - default_initializer="false", - setter_comment=( - "If need to watch the updates of identity certificates with name" - " |identity_cert_name|. The default value is false. If used in" - " tls_credentials, it should always be set to true unless the" - " identity key-cert pairs are not needed." - ), - test_name="DifferentWatchIdentityPair", - test_value_1="false", - test_value_2="true", - ), DataMember( name="identity_cert_name", type="std::string", @@ -242,6 +185,65 @@ class DataMember: test_value_1="false", test_value_2="true", ), + DataMember( + name="identity_certificate_provider", + type="grpc_core::RefCountedPtr", + getter_comment=( + "Returns the distributor from identity_certificate_provider_ if it" + " is set, nullptr otherwise." + ), + override_getter="""grpc_tls_certificate_distributor* identity_certificate_distributor() { + if (identity_certificate_provider_ != nullptr) { return identity_certificate_provider_->distributor().get(); } + return nullptr; + }""", + setter_move_semantics=True, + special_comparator=( + "(identity_certificate_provider_ ==" + " other.identity_certificate_provider_ ||" + " (identity_certificate_provider_ != nullptr &&" + " other.identity_certificate_provider_ != nullptr &&" + " identity_certificate_provider_->Compare(other.identity_certificate_provider_.get())" + " == 0))" + ), + test_name="DifferentIdentityCertificateProvider", + test_value_1=( + 'MakeRefCounted("root_cert_1",' + " PemKeyCertPairList())" + ), + test_value_2=( + 'MakeRefCounted("root_cert_2",' + " PemKeyCertPairList())" + ), + ), + DataMember( + name="root_certificate_provider", + type="grpc_core::RefCountedPtr", + getter_comment=( + "Returns the distributor from root_certificate_provider_ if it is" + " set, nullptr otherwise." + ), + override_getter="""grpc_tls_certificate_distributor* root_certificate_distributor() { + if (root_certificate_provider_ != nullptr) { return root_certificate_provider_->distributor().get(); } + return nullptr; + }""", + setter_move_semantics=True, + special_comparator=( + "(root_certificate_provider_ == other.root_certificate_provider_ ||" + " (root_certificate_provider_ != nullptr &&" + " other.root_certificate_provider_ != nullptr &&" + " root_certificate_provider_->Compare(other.root_certificate_provider_.get())" + " == 0))" + ), + test_name="DifferentRootCertificateProvider", + test_value_1=( + 'MakeRefCounted("root_cert_1",' + " PemKeyCertPairList())" + ), + test_value_2=( + 'MakeRefCounted("root_cert_2",' + " PemKeyCertPairList())" + ), + ), DataMember( name="sni_override", type="std::optional", From d0030b4ed9d78a0df41a47aa0bdf9f103c667b94 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 26 Jan 2026 10:40:10 -0800 Subject: [PATCH 25/67] [flake-fix] Delay grpc initialization to each sub-test in test_timeout_test (#41395) Previously we did a global init/shutdown for gRPC. This change delays that to each test - this ensures that gRPC does not create threads prior to the EXPECT_DEATH in CrashIfTimeoutExpires. Closes #41395 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41395 from ctiller:testtest 52ff6a0d41fe31451792ecaf94ad4f57e5934096 PiperOrigin-RevId: 861259239 --- test/core/test_util/test_timeout_test.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/core/test_util/test_timeout_test.cc b/test/core/test_util/test_timeout_test.cc index 958c3d0e1f803..645e046811c2b 100644 --- a/test/core/test_util/test_timeout_test.cc +++ b/test/core/test_util/test_timeout_test.cc @@ -27,17 +27,20 @@ namespace grpc_core { namespace { TEST(TestTimeoutTest, NoCrashIfDestroyedBeforeTimeout) { + grpc_init(); auto engine = grpc_event_engine::experimental::GetDefaultEventEngine(); { TestTimeout timeout(Duration::Milliseconds(10), engine); } // Wait longer than timeout to ensure it doesn't crash - std::this_thread::sleep_for(std::chrono::seconds(2)); + std::this_thread::sleep_for(std::chrono::seconds(20)); + grpc_shutdown(); } TEST(TestTimeoutDeathTest, CrashIfTimeoutExpires) { EXPECT_DEATH( { + grpc_init(); auto engine = grpc_event_engine::experimental::GetDefaultEventEngine(); TestTimeout timeout(Duration::Milliseconds(10), engine); std::this_thread::sleep_for(std::chrono::seconds(20)); @@ -50,8 +53,6 @@ TEST(TestTimeoutDeathTest, CrashIfTimeoutExpires) { int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); - grpc_init(); int r = RUN_ALL_TESTS(); - grpc_shutdown(); return r; } From f06c045d3d3e8e383e3988560340f0d07e6c877c Mon Sep 17 00:00:00 2001 From: gRPC Team Bot Date: Mon, 26 Jan 2026 13:44:53 -0800 Subject: [PATCH 26/67] Automated rollback of commit a19553bea69caa9e77490247498be85a900346ff. PiperOrigin-RevId: 861339351 --- grpc.def | 5 +- include/grpc/credentials.h | 29 +++-- .../grpcpp/security/tls_credentials_options.h | 33 +---- .../transport/channel_creds_registry_init.cc | 15 ++- .../tls/grpc_tls_certificate_distributor.h | 6 +- .../tls/grpc_tls_credentials_options.cc | 42 ++++--- .../tls/grpc_tls_credentials_options.h | 39 +++--- .../transport/tls/tls_security_connector.cc | 112 ++++++----------- .../transport/tls/tls_security_connector.h | 8 +- .../transport/xds/xds_credentials.cc | 21 ++-- src/core/xds/grpc/xds_certificate_provider.h | 6 +- src/cpp/common/tls_credentials_options.cc | 33 ++--- .../grpc/_cython/_cygrpc/credentials.pyx.pxi | 11 +- .../grpcio/grpc/_cython/_cygrpc/grpc.pxi | 16 ++- src/ruby/ext/grpc/rb_grpc_imports.generated.c | 10 +- src/ruby/ext/grpc/rb_grpc_imports.generated.h | 15 ++- ...tls_credentials_options_comparator_test.cc | 50 +++++--- .../tls/grpc_tls_credentials_options_test.cc | 74 +++++++---- .../tls/tls_security_connector_test.cc | 100 +++++++++------ test/core/end2end/fixtures/h2_tls_common.h | 16 +-- ...ls_peer_property_external_verifier_test.cc | 16 +-- .../chttp2/chttp2_server_listener_test.cc | 8 +- .../core/gen_grpc_tls_credentials_options.py | 116 +++++++++--------- 23 files changed, 385 insertions(+), 396 deletions(-) diff --git a/grpc.def b/grpc.def index 89ff92a031a67..506eb0a580ca0 100644 --- a/grpc.def +++ b/grpc.def @@ -61,9 +61,10 @@ EXPORTS grpc_tls_credentials_options_set_max_tls_version grpc_tls_credentials_options_copy grpc_tls_credentials_options_destroy - grpc_tls_credentials_options_set_identity_certificate_provider - grpc_tls_credentials_options_set_root_certificate_provider + grpc_tls_credentials_options_set_certificate_provider + grpc_tls_credentials_options_watch_root_certs grpc_tls_credentials_options_set_root_cert_name + grpc_tls_credentials_options_watch_identity_key_cert_pairs grpc_tls_credentials_options_set_identity_cert_name grpc_tls_credentials_options_set_cert_request_type grpc_tls_credentials_options_set_crl_directory diff --git a/include/grpc/credentials.h b/include/grpc/credentials.h index ed98dd317f9fa..bc5cacc1af914 100644 --- a/include/grpc/credentials.h +++ b/include/grpc/credentials.h @@ -984,22 +984,27 @@ typedef struct grpc_tls_certificate_provider grpc_tls_certificate_provider; /** * EXPERIMENTAL API - Subject to change * - * Sets the identity certificate provider in the options. + * Sets the credential provider in the options. * The |options| will implicitly take a new ref to the |provider|. */ -GRPCAPI void grpc_tls_credentials_options_set_identity_certificate_provider( +GRPCAPI void grpc_tls_credentials_options_set_certificate_provider( grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); /** * EXPERIMENTAL API - Subject to change * - * Sets the root certificate provider in the options. - * The |options| will implicitly take a new ref to the |provider|. + * If set, gRPC stack will keep watching the root certificates with + * name |root_cert_name|. + * If this is not set on the client side, we will use the root certificates + * stored in the default system location, since client side must provide root + * certificates in TLS. + * If this is not set on the server side, we will not watch any root certificate + * updates, and assume no root certificates needed for the server(single-side + * TLS). Default root certs on the server side is not supported. */ -GRPCAPI void grpc_tls_credentials_options_set_root_certificate_provider( - grpc_tls_credentials_options* options, - grpc_tls_certificate_provider* provider); +GRPCAPI void grpc_tls_credentials_options_watch_root_certs( + grpc_tls_credentials_options* options); /** * EXPERIMENTAL API - Subject to change @@ -1010,6 +1015,16 @@ GRPCAPI void grpc_tls_credentials_options_set_root_certificate_provider( GRPCAPI void grpc_tls_credentials_options_set_root_cert_name( grpc_tls_credentials_options* options, const char* root_cert_name); +/** + * EXPERIMENTAL API - Subject to change + * + * If set, gRPC stack will keep watching the identity key-cert pairs + * with name |identity_cert_name|. + * This is required on the server side, and optional on the client side. + */ +GRPCAPI void grpc_tls_credentials_options_watch_identity_key_cert_pairs( + grpc_tls_credentials_options* options); + /** * EXPERIMENTAL API - Subject to change * diff --git a/include/grpcpp/security/tls_credentials_options.h b/include/grpcpp/security/tls_credentials_options.h index fac7381d2d086..d55d2c6d655fb 100644 --- a/include/grpcpp/security/tls_credentials_options.h +++ b/include/grpcpp/security/tls_credentials_options.h @@ -52,15 +52,8 @@ class TlsCredentialsOptions { // ---- Setters for member fields ---- // Sets the certificate provider used to store root certs and identity certs. - [[deprecated( - "Use set_root_certificate_provider() or " - "set_identity_certificate_provider() instead.")]] void set_certificate_provider( std::shared_ptr certificate_provider); - void set_root_certificate_provider( - std::shared_ptr certificate_provider); - void set_identity_certificate_provider( - std::shared_ptr certificate_provider); // Watches the updates of root certificates with name |root_cert_name|. // If used in TLS credentials, setting this field is optional for both the // client side and the server side. @@ -71,7 +64,6 @@ class TlsCredentialsOptions { // certificate updates, and assume no root certificates needed for the server // (in the one-side TLS scenario, the server is not required to provide root // certs). We don't support default root certs on server side. - [[deprecated("Use set_root_certificate_provider()")]] void watch_root_certs(); // Sets the name of root certificates being watched, if |watch_root_certs| is // called. If not set, an empty string will be used as the name. @@ -82,7 +74,6 @@ class TlsCredentialsOptions { // |identity_cert_name|. If used in TLS credentials, it is required to be set // on the server side, and optional for the client side(in the one-side // TLS scenario, the client is not required to provide identity certs). - [[deprecated("Use set_identity_certificate_provider()")]] void watch_identity_key_cert_pairs(); // Sets the name of identity key-cert pairs being watched, if // |watch_identity_key_cert_pairs| is called. If not set, an empty string will @@ -149,9 +140,7 @@ class TlsCredentialsOptions { } private: - std::shared_ptr legacy_certificate_provider_; - std::shared_ptr root_certificate_provider_; - std::shared_ptr identity_certificate_provider_; + std::shared_ptr certificate_provider_; std::shared_ptr certificate_verifier_; grpc_tls_credentials_options* c_credentials_options_ = nullptr; }; @@ -180,22 +169,8 @@ class TlsChannelCredentialsOptions final : public TlsCredentialsOptions { // It is used for experimental purposes for now and it is subject to change. class TlsServerCredentialsOptions final : public TlsCredentialsOptions { public: - // Server side is required to use an identity provider, because server always - // needs to use identity certs. - static absl::StatusOr Create( - std::shared_ptr - identity_certificate_provider) { - if (identity_certificate_provider == nullptr) { - return absl::InvalidArgumentError( - "identity certificate provider must be non-null"); - } - TlsServerCredentialsOptions options; - options.set_identity_certificate_provider( - std::move(identity_certificate_provider)); - return options; - } - - [[deprecated("Use Create() instead.")]] + // Server side is required to use a provider, because server always needs to + // use identity certs. explicit TlsServerCredentialsOptions( std::shared_ptr certificate_provider) : TlsCredentialsOptions() { @@ -221,8 +196,6 @@ class TlsServerCredentialsOptions final : public TlsCredentialsOptions { void set_send_client_ca_list(bool send_client_ca_list); private: - // Default ctor, to be used by Create(). - TlsServerCredentialsOptions() = default; }; } // namespace experimental diff --git a/src/core/credentials/transport/channel_creds_registry_init.cc b/src/core/credentials/transport/channel_creds_registry_init.cc index 1be4723a4681a..5ea3b0393e379 100644 --- a/src/core/credentials/transport/channel_creds_registry_init.cc +++ b/src/core/credentials/transport/channel_creds_registry_init.cc @@ -89,15 +89,14 @@ class TlsChannelCredsFactory : public ChannelCredsFactory<> { !config->ca_certificate_file().empty()) { // TODO(gtcooke94): Expose the spiffe_bundle_map option in the XDS // bootstrap config to use here. - auto provider = MakeRefCounted( - config->private_key_file(), config->certificate_file(), - config->ca_certificate_file(), /*spiffe_bundle_map_file=*/"", - config->refresh_interval().millis() / GPR_MS_PER_SEC); - options->set_root_certificate_provider( - config->ca_certificate_file().empty() ? nullptr : provider); - options->set_identity_certificate_provider( - config->certificate_file().empty() ? nullptr : provider); + options->set_certificate_provider( + MakeRefCounted( + config->private_key_file(), config->certificate_file(), + config->ca_certificate_file(), /*spiffe_bundle_map_file=*/"", + config->refresh_interval().millis() / GPR_MS_PER_SEC)); } + options->set_watch_root_cert(!config->ca_certificate_file().empty()); + options->set_watch_identity_pair(!config->certificate_file().empty()); options->set_certificate_verifier( MakeRefCounted()); return MakeRefCounted(std::move(options)); diff --git a/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h b/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h index 37f93855d5c3a..cf79878dd28eb 100644 --- a/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +++ b/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h @@ -27,22 +27,20 @@ #include #include +#include "src/core/credentials/transport/tls/spiffe_utils.h" #include "src/core/credentials/transport/tls/ssl_utils.h" #include "src/core/lib/iomgr/error.h" #include "src/core/tsi/ssl_transport_security.h" #include "src/core/util/ref_counted.h" #include "src/core/util/sync.h" #include "absl/base/thread_annotations.h" +#include "absl/strings/string_view.h" struct grpc_tls_identity_pairs { grpc_core::PemKeyCertPairList pem_key_cert_pairs; }; // TLS certificate distributor. -// TODO(anasalazar): Since there are no use-cases where we need to update root -// and identity certs as an atomic unit, the flow of the certs through the cert -// providers and to the TLS security connector can be greatly simplified. We may -// even be able to remove the distributor code completely. struct grpc_tls_certificate_distributor : public grpc_core::RefCounted { public: diff --git a/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc b/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc index a72acf3be9221..12d5c9f94f706 100644 --- a/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +++ b/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc @@ -61,12 +61,34 @@ void grpc_tls_credentials_options_set_verify_server_cert( options->set_verify_server_cert(verify_server_cert); } +void grpc_tls_credentials_options_set_certificate_provider( + grpc_tls_credentials_options* options, + grpc_tls_certificate_provider* provider) { + GRPC_CHECK_NE(options, nullptr); + GRPC_CHECK_NE(provider, nullptr); + grpc_core::ExecCtx exec_ctx; + options->set_certificate_provider( + provider->Ref(DEBUG_LOCATION, "set_certificate_provider")); +} + +void grpc_tls_credentials_options_watch_root_certs( + grpc_tls_credentials_options* options) { + GRPC_CHECK_NE(options, nullptr); + options->set_watch_root_cert(true); +} + void grpc_tls_credentials_options_set_root_cert_name( grpc_tls_credentials_options* options, const char* root_cert_name) { GRPC_CHECK_NE(options, nullptr); options->set_root_cert_name(root_cert_name); } +void grpc_tls_credentials_options_watch_identity_key_cert_pairs( + grpc_tls_credentials_options* options) { + GRPC_CHECK_NE(options, nullptr); + options->set_watch_identity_pair(true); +} + void grpc_tls_credentials_options_set_identity_cert_name( grpc_tls_credentials_options* options, const char* identity_cert_name) { GRPC_CHECK_NE(options, nullptr); @@ -138,26 +160,6 @@ void grpc_tls_credentials_options_set_max_tls_version( options->set_max_tls_version(max_tls_version); } -void grpc_tls_credentials_options_set_identity_certificate_provider( - grpc_tls_credentials_options* options, - grpc_tls_certificate_provider* provider) { - GRPC_CHECK_NE(options, nullptr); - GRPC_CHECK_NE(provider, nullptr); - grpc_core::ExecCtx exec_ctx; - options->set_identity_certificate_provider( - provider->Ref(DEBUG_LOCATION, "set_identity_certificate_provider")); -} - -void grpc_tls_credentials_options_set_root_certificate_provider( - grpc_tls_credentials_options* options, - grpc_tls_certificate_provider* provider) { - GRPC_CHECK_NE(options, nullptr); - GRPC_CHECK_NE(provider, nullptr); - grpc_core::ExecCtx exec_ctx; - options->set_root_certificate_provider( - provider->Ref(DEBUG_LOCATION, "set_root_certificate_provider")); -} - GRPCAPI void grpc_tls_credentials_options_set_sni_override( grpc_tls_credentials_options* options, std::optional sni_override) { diff --git a/src/core/credentials/transport/tls/grpc_tls_credentials_options.h b/src/core/credentials/transport/tls/grpc_tls_credentials_options.h index d40b6868aa9b6..21e015609fa1d 100644 --- a/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +++ b/src/core/credentials/transport/tls/grpc_tls_credentials_options.h @@ -52,23 +52,20 @@ struct grpc_tls_credentials_options return certificate_verifier_.get(); } bool check_call_host() const { return check_call_host_; } + // Returns the distributor from certificate_provider_ if it is set, nullptr otherwise. + grpc_tls_certificate_distributor* certificate_distributor() { + if (certificate_provider_ != nullptr) { return certificate_provider_->distributor().get(); } + return nullptr; + } + bool watch_root_cert() const { return watch_root_cert_; } const std::string& root_cert_name() const { return root_cert_name_; } + bool watch_identity_pair() const { return watch_identity_pair_; } const std::string& identity_cert_name() const { return identity_cert_name_; } const std::string& tls_session_key_log_file_path() const { return tls_session_key_log_file_path_; } const std::string& crl_directory() const { return crl_directory_; } // Returns the CRL Provider std::shared_ptr crl_provider() const { return crl_provider_; } bool send_client_ca_list() const { return send_client_ca_list_; } - // Returns the distributor from identity_certificate_provider_ if it is set, nullptr otherwise. - grpc_tls_certificate_distributor* identity_certificate_distributor() { - if (identity_certificate_provider_ != nullptr) { return identity_certificate_provider_->distributor().get(); } - return nullptr; - } - // Returns the distributor from root_certificate_provider_ if it is set, nullptr otherwise. - grpc_tls_certificate_distributor* root_certificate_distributor() { - if (root_certificate_provider_ != nullptr) { return root_certificate_provider_->distributor().get(); } - return nullptr; - } const std::optional& sni_override() const { return sni_override_; } // Setters for member fields. @@ -78,8 +75,13 @@ struct grpc_tls_credentials_options void set_max_tls_version(grpc_tls_version max_tls_version) { max_tls_version_ = max_tls_version; } void set_certificate_verifier(grpc_core::RefCountedPtr certificate_verifier) { certificate_verifier_ = std::move(certificate_verifier); } void set_check_call_host(bool check_call_host) { check_call_host_ = check_call_host; } + void set_certificate_provider(grpc_core::RefCountedPtr certificate_provider) { certificate_provider_ = std::move(certificate_provider); } + // If need to watch the updates of root certificates with name |root_cert_name|. The default value is false. If used in tls_credentials, it should always be set to true unless the root certificates are not needed. + void set_watch_root_cert(bool watch_root_cert) { watch_root_cert_ = watch_root_cert; } // Sets the name of root certificates being watched, if |set_watch_root_cert| is called. If not set, an empty string will be used as the name. void set_root_cert_name(std::string root_cert_name) { root_cert_name_ = std::move(root_cert_name); } + // If need to watch the updates of identity certificates with name |identity_cert_name|. The default value is false. If used in tls_credentials, it should always be set to true unless the identity key-cert pairs are not needed. + void set_watch_identity_pair(bool watch_identity_pair) { watch_identity_pair_ = watch_identity_pair; } // Sets the name of identity key-cert pairs being watched, if |set_watch_identity_pair| is called. If not set, an empty string will be used as the name. void set_identity_cert_name(std::string identity_cert_name) { identity_cert_name_ = std::move(identity_cert_name); } void set_tls_session_key_log_file_path(std::string tls_session_key_log_file_path) { tls_session_key_log_file_path_ = std::move(tls_session_key_log_file_path); } @@ -87,8 +89,6 @@ struct grpc_tls_credentials_options void set_crl_directory(std::string crl_directory) { crl_directory_ = std::move(crl_directory); } void set_crl_provider(std::shared_ptr crl_provider) { crl_provider_ = std::move(crl_provider); } void set_send_client_ca_list(bool send_client_ca_list) { send_client_ca_list_ = send_client_ca_list; } - void set_identity_certificate_provider(grpc_core::RefCountedPtr identity_certificate_provider) { identity_certificate_provider_ = std::move(identity_certificate_provider); } - void set_root_certificate_provider(grpc_core::RefCountedPtr root_certificate_provider) { root_certificate_provider_ = std::move(root_certificate_provider); } // If set to nullopt, do not override. If set to empty string, disable sending SNI. Otherwise, override SNI void set_sni_override(std::optional sni_override) { sni_override_ = std::move(sni_override); } @@ -99,14 +99,15 @@ struct grpc_tls_credentials_options max_tls_version_ == other.max_tls_version_ && (certificate_verifier_ == other.certificate_verifier_ || (certificate_verifier_ != nullptr && other.certificate_verifier_ != nullptr && certificate_verifier_->Compare(other.certificate_verifier_.get()) == 0)) && check_call_host_ == other.check_call_host_ && + (certificate_provider_ == other.certificate_provider_ || (certificate_provider_ != nullptr && other.certificate_provider_ != nullptr && certificate_provider_->Compare(other.certificate_provider_.get()) == 0)) && + watch_root_cert_ == other.watch_root_cert_ && root_cert_name_ == other.root_cert_name_ && + watch_identity_pair_ == other.watch_identity_pair_ && identity_cert_name_ == other.identity_cert_name_ && tls_session_key_log_file_path_ == other.tls_session_key_log_file_path_ && crl_directory_ == other.crl_directory_ && (crl_provider_ == other.crl_provider_) && send_client_ca_list_ == other.send_client_ca_list_ && - (identity_certificate_provider_ == other.identity_certificate_provider_ || (identity_certificate_provider_ != nullptr && other.identity_certificate_provider_ != nullptr && identity_certificate_provider_->Compare(other.identity_certificate_provider_.get()) == 0)) && - (root_certificate_provider_ == other.root_certificate_provider_ || (root_certificate_provider_ != nullptr && other.root_certificate_provider_ != nullptr && root_certificate_provider_->Compare(other.root_certificate_provider_.get()) == 0)) && sni_override_ == other.sni_override_; } @@ -117,14 +118,15 @@ struct grpc_tls_credentials_options max_tls_version_(other.max_tls_version_), certificate_verifier_(other.certificate_verifier_), check_call_host_(other.check_call_host_), + certificate_provider_(other.certificate_provider_), + watch_root_cert_(other.watch_root_cert_), root_cert_name_(other.root_cert_name_), + watch_identity_pair_(other.watch_identity_pair_), identity_cert_name_(other.identity_cert_name_), tls_session_key_log_file_path_(other.tls_session_key_log_file_path_), crl_directory_(other.crl_directory_), crl_provider_(other.crl_provider_), send_client_ca_list_(other.send_client_ca_list_), - identity_certificate_provider_(other.identity_certificate_provider_), - root_certificate_provider_(other.root_certificate_provider_), sni_override_(other.sni_override_) {} private: @@ -134,14 +136,15 @@ struct grpc_tls_credentials_options grpc_tls_version max_tls_version_ = grpc_tls_version::TLS1_3; grpc_core::RefCountedPtr certificate_verifier_; bool check_call_host_ = true; + grpc_core::RefCountedPtr certificate_provider_; + bool watch_root_cert_ = false; std::string root_cert_name_; + bool watch_identity_pair_ = false; std::string identity_cert_name_; std::string tls_session_key_log_file_path_; std::string crl_directory_; std::shared_ptr crl_provider_; bool send_client_ca_list_ = false; - grpc_core::RefCountedPtr identity_certificate_provider_; - grpc_core::RefCountedPtr root_certificate_provider_; std::optional sni_override_; }; diff --git a/src/core/credentials/transport/tls/tls_security_connector.cc b/src/core/credentials/transport/tls/tls_security_connector.cc index 75c4516a01317..8dcdba0a5f34a 100644 --- a/src/core/credentials/transport/tls/tls_security_connector.cc +++ b/src/core/credentials/transport/tls/tls_security_connector.cc @@ -291,20 +291,17 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector( SplitHostPort(target_name, &host, &port); target_name_ = std::string(host); // Create a watcher. - auto identity_watcher_ptr = - std::make_unique(this); - auto root_watcher_ptr = std::make_unique(this); - root_certificate_watcher_ = root_watcher_ptr.get(); - identity_certificate_watcher_ = identity_watcher_ptr.get(); - bool watch_root_cert = options_->root_certificate_distributor() != nullptr; - bool watch_identity_cert = - options_->identity_certificate_distributor() != nullptr; + auto watcher_ptr = std::make_unique(this); + certificate_watcher_ = watcher_ptr.get(); + // Register the watcher with the distributor. + grpc_tls_certificate_distributor* distributor = + options_->certificate_distributor(); std::optional watched_root_cert_name; - if (watch_root_cert) { + if (options_->watch_root_cert()) { watched_root_cert_name = options_->root_cert_name(); } std::optional watched_identity_cert_name; - if (watch_identity_cert) { + if (options_->watch_identity_pair()) { watched_identity_cert_name = options_->identity_cert_name(); } // We will use the root certs stored in system default locations if not @@ -313,19 +310,13 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector( // certs" is a valid case(and hence we will need to call // OnCertificatesChanged), but it requires nothing from the provider, and // hence no need to register the watcher. - if (!watch_root_cert && !watch_identity_cert) { - root_certificate_watcher_->OnCertificatesChanged(nullptr, std::nullopt); + bool use_default_roots = !options_->watch_root_cert(); + if (use_default_roots && !options_->watch_identity_pair()) { + watcher_ptr->OnCertificatesChanged(nullptr, std::nullopt); } else { - if (watch_root_cert) { - options_->root_certificate_distributor()->WatchTlsCertificates( - std::move(root_watcher_ptr), watched_root_cert_name, - watched_identity_cert_name); - } - if (watch_identity_cert) { - options_->identity_certificate_distributor()->WatchTlsCertificates( - std::move(identity_watcher_ptr), watched_root_cert_name, - watched_identity_cert_name); - } + distributor->WatchTlsCertificates(std::move(watcher_ptr), + watched_root_cert_name, + watched_identity_cert_name); } } @@ -334,16 +325,10 @@ TlsChannelSecurityConnector::~TlsChannelSecurityConnector() { tsi_ssl_session_cache_unref(ssl_session_cache_); } // Cancel all the watchers. - grpc_tls_certificate_distributor* root_distributor = - options_->root_certificate_distributor(); - if (root_distributor != nullptr) { - root_distributor->CancelTlsCertificatesWatch(root_certificate_watcher_); - } - grpc_tls_certificate_distributor* identity_distributor = - options_->identity_certificate_distributor(); - if (identity_distributor != nullptr) { - identity_distributor->CancelTlsCertificatesWatch( - identity_certificate_watcher_); + grpc_tls_certificate_distributor* distributor = + options_->certificate_distributor(); + if (distributor != nullptr) { + distributor->CancelTlsCertificatesWatch(certificate_watcher_); } if (client_handshaker_factory_ != nullptr) { tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_); @@ -464,13 +449,10 @@ void TlsChannelSecurityConnector::TlsChannelCertificateWatcher:: if (key_cert_pairs.has_value()) { security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs); } - const bool root_ready = - security_connector_->options_->root_certificate_distributor() == - nullptr || - security_connector_->root_cert_info_ != nullptr; + const bool root_ready = !security_connector_->options_->watch_root_cert() || + security_connector_->root_cert_info_ != nullptr; const bool identity_ready = - security_connector_->options_->identity_certificate_distributor() == - nullptr || + !security_connector_->options_->watch_identity_pair() || security_connector_->pem_key_cert_pair_list_.has_value(); if (root_ready && identity_ready) { if (security_connector_->UpdateHandshakerFactoryLocked() != @@ -557,7 +539,7 @@ TlsChannelSecurityConnector::UpdateHandshakerFactoryLocked() { if (pem_key_cert_pair_list_.has_value()) { pem_key_cert_pair = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_); } - bool use_default_roots = options_->root_certificate_distributor() == nullptr; + bool use_default_roots = !options_->watch_root_cert(); grpc_security_status status = grpc_ssl_tsi_client_handshaker_factory_init( pem_key_cert_pair, use_default_roots ? nullptr : root_cert_info_, skip_server_certificate_verification, @@ -604,48 +586,30 @@ TlsServerSecurityConnector::TlsServerSecurityConnector( tsi::TlsSessionKeyLoggerCache::Get(tls_session_key_log_file_path); } // Create a watcher. - auto root_watcher_ptr = std::make_unique(this); - auto identity_watcher_ptr = - std::make_unique(this); - root_certificate_watcher_ = root_watcher_ptr.get(); - identity_certificate_watcher_ = identity_watcher_ptr.get(); - bool watch_root_cert = options_->root_certificate_distributor() != nullptr; - bool watch_identity_cert = - options_->identity_certificate_distributor() != nullptr; + auto watcher_ptr = std::make_unique(this); + certificate_watcher_ = watcher_ptr.get(); + // Register the watcher with the distributor. + grpc_tls_certificate_distributor* distributor = + options_->certificate_distributor(); std::optional watched_root_cert_name; - if (watch_root_cert) { + if (options_->watch_root_cert()) { watched_root_cert_name = options_->root_cert_name(); } std::optional watched_identity_cert_name; - if (watch_identity_cert) { + if (options_->watch_identity_pair()) { watched_identity_cert_name = options_->identity_cert_name(); } - // Register the watcher with the distributor. - if (watch_root_cert) { - options_->root_certificate_distributor()->WatchTlsCertificates( - std::move(root_watcher_ptr), watched_root_cert_name, - watched_identity_cert_name); - } - if (watch_identity_cert) { - options_->identity_certificate_distributor()->WatchTlsCertificates( - std::move(identity_watcher_ptr), watched_root_cert_name, - watched_identity_cert_name); - } + // Server side won't use default system roots at any time. + distributor->WatchTlsCertificates(std::move(watcher_ptr), + watched_root_cert_name, + watched_identity_cert_name); } TlsServerSecurityConnector::~TlsServerSecurityConnector() { // Cancel all the watchers. - grpc_tls_certificate_distributor* root_distributor = - options_->root_certificate_distributor(); - if (root_distributor != nullptr) { - root_distributor->CancelTlsCertificatesWatch(root_certificate_watcher_); - } - grpc_tls_certificate_distributor* identity_distributor = - options_->identity_certificate_distributor(); - if (identity_distributor != nullptr) { - identity_distributor->CancelTlsCertificatesWatch( - identity_certificate_watcher_); - } + grpc_tls_certificate_distributor* distributor = + options_->certificate_distributor(); + distributor->CancelTlsCertificatesWatch(certificate_watcher_); if (server_handshaker_factory_ != nullptr) { tsi_ssl_server_handshaker_factory_unref(server_handshaker_factory_); } @@ -737,12 +701,10 @@ void TlsServerSecurityConnector::TlsServerCertificateWatcher:: if (key_cert_pairs.has_value()) { security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs); } - bool root_being_watched = - security_connector_->options_->root_certificate_distributor() != nullptr; + bool root_being_watched = security_connector_->options_->watch_root_cert(); bool root_has_value = security_connector_->root_cert_info_ != nullptr; bool identity_being_watched = - security_connector_->options_->identity_certificate_distributor() != - nullptr; + security_connector_->options_->watch_identity_pair(); bool identity_has_value = security_connector_->pem_key_cert_pair_list_.has_value(); if ((root_being_watched && root_has_value && identity_being_watched && diff --git a/src/core/credentials/transport/tls/tls_security_connector.h b/src/core/credentials/transport/tls/tls_security_connector.h index 7d5eabf6f104f..9efdc235e0383 100644 --- a/src/core/credentials/transport/tls/tls_security_connector.h +++ b/src/core/credentials/transport/tls/tls_security_connector.h @@ -158,9 +158,7 @@ class TlsChannelSecurityConnector final Mutex verifier_request_map_mu_; RefCountedPtr options_; grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* - root_certificate_watcher_ = nullptr; - grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* - identity_certificate_watcher_ = nullptr; + certificate_watcher_ = nullptr; std::string target_name_; std::string overridden_target_name_; tsi_ssl_client_handshaker_factory* client_handshaker_factory_ @@ -271,9 +269,7 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector { Mutex verifier_request_map_mu_; RefCountedPtr options_; grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* - root_certificate_watcher_ = nullptr; - grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* - identity_certificate_watcher_ = nullptr; + certificate_watcher_ = nullptr; tsi_ssl_server_handshaker_factory* server_handshaker_factory_ ABSL_GUARDED_BY(mu_) = nullptr; std::optional pem_key_cert_pair_list_ diff --git a/src/core/credentials/transport/xds/xds_credentials.cc b/src/core/credentials/transport/xds/xds_credentials.cc index 57ce337052a0d..6e439fec34a20 100644 --- a/src/core/credentials/transport/xds/xds_credentials.cc +++ b/src/core/credentials/transport/xds/xds_credentials.cc @@ -175,13 +175,15 @@ XdsCredentials::create_security_connector( if (watch_root || use_system_root_certs || watch_identity) { auto tls_credentials_options = MakeRefCounted(); - if (watch_root) { - tls_credentials_options->set_root_certificate_provider( - xds_certificate_provider); - } - if (watch_identity) { - tls_credentials_options->set_identity_certificate_provider( + if (watch_root || watch_identity) { + tls_credentials_options->set_certificate_provider( xds_certificate_provider); + if (watch_root) { + tls_credentials_options->set_watch_root_cert(true); + } + if (watch_identity) { + tls_credentials_options->set_watch_identity_pair(true); + } } tls_credentials_options->set_verify_server_cert(true); auto hostname = args->GetOwnedString(GRPC_ARG_ADDRESS_NAME); @@ -231,11 +233,10 @@ XdsServerCredentials::create_security_connector(const ChannelArgs& args) { xds_certificate_provider->ProvidesIdentityCerts()) { auto tls_credentials_options = MakeRefCounted(); - tls_credentials_options->set_identity_certificate_provider( - xds_certificate_provider); + tls_credentials_options->set_watch_identity_pair(true); + tls_credentials_options->set_certificate_provider(xds_certificate_provider); if (xds_certificate_provider->ProvidesRootCerts()) { - tls_credentials_options->set_root_certificate_provider( - xds_certificate_provider); + tls_credentials_options->set_watch_root_cert(true); tls_credentials_options->set_cert_request_type( xds_certificate_provider->require_client_certificate() ? GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY diff --git a/src/core/xds/grpc/xds_certificate_provider.h b/src/core/xds/grpc/xds_certificate_provider.h index 54bbd99212428..08287ec3a2eb4 100644 --- a/src/core/xds/grpc/xds_certificate_provider.h +++ b/src/core/xds/grpc/xds_certificate_provider.h @@ -39,11 +39,7 @@ #include "absl/strings/string_view.h" namespace grpc_core { -// TODO(roth): Now that we've changed the TLS creds API to configure different -// providers for root and identity certs, we no longer need to multiplex -// multiple providers in an XdsCertificateProvider. Consider removing this code -// and instead just passing down the relevant TLS creds configuration via a -// channel arg. + class XdsCertificateProvider final : public grpc_tls_certificate_provider { public: // ctor for client side diff --git a/src/cpp/common/tls_credentials_options.cc b/src/cpp/common/tls_credentials_options.cc index 0e455f7c2b4e1..7bfb8df91f138 100644 --- a/src/cpp/common/tls_credentials_options.cc +++ b/src/cpp/common/tls_credentials_options.cc @@ -50,24 +50,10 @@ TlsCredentialsOptions::TlsCredentialsOptions( void TlsCredentialsOptions::set_certificate_provider( std::shared_ptr certificate_provider) { - legacy_certificate_provider_ = std::move(certificate_provider); -} - -void TlsCredentialsOptions::set_root_certificate_provider( - std::shared_ptr certificate_provider) { - root_certificate_provider_ = std::move(certificate_provider); - if (root_certificate_provider_ != nullptr) { - grpc_tls_credentials_options_set_root_certificate_provider( - c_credentials_options_, root_certificate_provider_->c_provider()); - } -} - -void TlsCredentialsOptions::set_identity_certificate_provider( - std::shared_ptr certificate_provider) { - identity_certificate_provider_ = std::move(certificate_provider); - if (identity_certificate_provider_ != nullptr) { - grpc_tls_credentials_options_set_identity_certificate_provider( - c_credentials_options_, identity_certificate_provider_->c_provider()); + certificate_provider_ = certificate_provider; + if (certificate_provider_ != nullptr) { + grpc_tls_credentials_options_set_certificate_provider( + c_credentials_options_, certificate_provider_->c_provider()); } } @@ -78,10 +64,7 @@ void TlsCredentialsOptions::set_crl_provider( } void TlsCredentialsOptions::watch_root_certs() { - if (legacy_certificate_provider_ != nullptr) { - grpc_tls_credentials_options_set_root_certificate_provider( - c_credentials_options_, legacy_certificate_provider_->c_provider()); - } + grpc_tls_credentials_options_watch_root_certs(c_credentials_options_); } void TlsCredentialsOptions::set_root_cert_name( @@ -91,10 +74,8 @@ void TlsCredentialsOptions::set_root_cert_name( } void TlsCredentialsOptions::watch_identity_key_cert_pairs() { - if (legacy_certificate_provider_ != nullptr) { - grpc_tls_credentials_options_set_identity_certificate_provider( - c_credentials_options_, legacy_certificate_provider_->c_provider()); - } + grpc_tls_credentials_options_watch_identity_key_cert_pairs( + c_credentials_options_); } void TlsCredentialsOptions::set_identity_cert_name( diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi index a4a54caabcd43..488a3367c5eb6 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi @@ -214,14 +214,13 @@ cdef class SSLChannelCredentials(ChannelCredentials): if c_pem_root_certificates != NULL or c_tls_identity_pairs != NULL: c_tls_certificate_provider = grpc_tls_certificate_provider_static_data_create( - c_pem_root_certificates, c_tls_identity_pairs) + c_pem_root_certificates, c_tls_identity_pairs) + grpc_tls_credentials_options_set_certificate_provider(c_tls_credentials_options, c_tls_certificate_provider) + grpc_tls_certificate_provider_release(c_tls_certificate_provider) if c_pem_root_certificates != NULL: - grpc_tls_credentials_options_set_root_certificate_provider( - c_tls_credentials_options, c_tls_certificate_provider) + grpc_tls_credentials_options_watch_root_certs(c_tls_credentials_options) if c_tls_identity_pairs != NULL: - grpc_tls_credentials_options_set_identity_certificate_provider( - c_tls_credentials_options, c_tls_certificate_provider) - grpc_tls_certificate_provider_release(c_tls_certificate_provider) + grpc_tls_credentials_options_watch_identity_key_cert_pairs(c_tls_credentials_options) with nogil: return grpc_tls_credentials_create(c_tls_credentials_options) diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi index 56f2dbef2833e..5aafce2adb138 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi @@ -594,12 +594,8 @@ cdef extern from "grpc/credentials.h": ctypedef struct grpc_tls_certificate_provider: # We don't care about the internals (and in fact don't know them) pass - - void grpc_tls_credentials_options_set_root_certificate_provider( - grpc_tls_credentials_options *options, - grpc_tls_certificate_provider *provider) nogil - void grpc_tls_credentials_options_set_identity_certificate_provider( + void grpc_tls_credentials_options_set_certificate_provider( grpc_tls_credentials_options *options, grpc_tls_certificate_provider *provider) nogil @@ -617,6 +613,16 @@ cdef extern from "grpc/credentials.h": grpc_tls_certificate_provider *grpc_tls_certificate_provider_static_data_create( const char *root_certificate, grpc_tls_identity_pairs *pem_key_cert_pairs) nogil + void grpc_tls_credentials_options_set_certificate_provider( + grpc_tls_credentials_options *options, + grpc_tls_certificate_provider *provider) nogil + + void grpc_tls_credentials_options_watch_root_certs( + grpc_tls_credentials_options *options) nogil + + void grpc_tls_credentials_options_watch_identity_key_cert_pairs( + grpc_tls_credentials_options *options) nogil + void grpc_tls_certificate_provider_release( grpc_tls_certificate_provider *provider) nogil diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index 7c44a44b1faa4..3f120f2f15dfd 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c @@ -84,9 +84,10 @@ grpc_tls_credentials_options_set_min_tls_version_type grpc_tls_credentials_optio grpc_tls_credentials_options_set_max_tls_version_type grpc_tls_credentials_options_set_max_tls_version_import; grpc_tls_credentials_options_copy_type grpc_tls_credentials_options_copy_import; grpc_tls_credentials_options_destroy_type grpc_tls_credentials_options_destroy_import; -grpc_tls_credentials_options_set_identity_certificate_provider_type grpc_tls_credentials_options_set_identity_certificate_provider_import; -grpc_tls_credentials_options_set_root_certificate_provider_type grpc_tls_credentials_options_set_root_certificate_provider_import; +grpc_tls_credentials_options_set_certificate_provider_type grpc_tls_credentials_options_set_certificate_provider_import; +grpc_tls_credentials_options_watch_root_certs_type grpc_tls_credentials_options_watch_root_certs_import; grpc_tls_credentials_options_set_root_cert_name_type grpc_tls_credentials_options_set_root_cert_name_import; +grpc_tls_credentials_options_watch_identity_key_cert_pairs_type grpc_tls_credentials_options_watch_identity_key_cert_pairs_import; grpc_tls_credentials_options_set_identity_cert_name_type grpc_tls_credentials_options_set_identity_cert_name_import; grpc_tls_credentials_options_set_cert_request_type_type grpc_tls_credentials_options_set_cert_request_type_import; grpc_tls_credentials_options_set_crl_directory_type grpc_tls_credentials_options_set_crl_directory_import; @@ -370,9 +371,10 @@ void grpc_rb_load_imports(HMODULE library) { grpc_tls_credentials_options_set_max_tls_version_import = (grpc_tls_credentials_options_set_max_tls_version_type) GetProcAddress(library, "grpc_tls_credentials_options_set_max_tls_version"); grpc_tls_credentials_options_copy_import = (grpc_tls_credentials_options_copy_type) GetProcAddress(library, "grpc_tls_credentials_options_copy"); grpc_tls_credentials_options_destroy_import = (grpc_tls_credentials_options_destroy_type) GetProcAddress(library, "grpc_tls_credentials_options_destroy"); - grpc_tls_credentials_options_set_identity_certificate_provider_import = (grpc_tls_credentials_options_set_identity_certificate_provider_type) GetProcAddress(library, "grpc_tls_credentials_options_set_identity_certificate_provider"); - grpc_tls_credentials_options_set_root_certificate_provider_import = (grpc_tls_credentials_options_set_root_certificate_provider_type) GetProcAddress(library, "grpc_tls_credentials_options_set_root_certificate_provider"); + grpc_tls_credentials_options_set_certificate_provider_import = (grpc_tls_credentials_options_set_certificate_provider_type) GetProcAddress(library, "grpc_tls_credentials_options_set_certificate_provider"); + grpc_tls_credentials_options_watch_root_certs_import = (grpc_tls_credentials_options_watch_root_certs_type) GetProcAddress(library, "grpc_tls_credentials_options_watch_root_certs"); grpc_tls_credentials_options_set_root_cert_name_import = (grpc_tls_credentials_options_set_root_cert_name_type) GetProcAddress(library, "grpc_tls_credentials_options_set_root_cert_name"); + grpc_tls_credentials_options_watch_identity_key_cert_pairs_import = (grpc_tls_credentials_options_watch_identity_key_cert_pairs_type) GetProcAddress(library, "grpc_tls_credentials_options_watch_identity_key_cert_pairs"); grpc_tls_credentials_options_set_identity_cert_name_import = (grpc_tls_credentials_options_set_identity_cert_name_type) GetProcAddress(library, "grpc_tls_credentials_options_set_identity_cert_name"); grpc_tls_credentials_options_set_cert_request_type_import = (grpc_tls_credentials_options_set_cert_request_type_type) GetProcAddress(library, "grpc_tls_credentials_options_set_cert_request_type"); grpc_tls_credentials_options_set_crl_directory_import = (grpc_tls_credentials_options_set_crl_directory_type) GetProcAddress(library, "grpc_tls_credentials_options_set_crl_directory"); diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index 0aa341073eaf0..1ea52e91a1e43 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -228,15 +228,18 @@ extern grpc_tls_credentials_options_copy_type grpc_tls_credentials_options_copy_ typedef void(*grpc_tls_credentials_options_destroy_type)(grpc_tls_credentials_options* options); extern grpc_tls_credentials_options_destroy_type grpc_tls_credentials_options_destroy_import; #define grpc_tls_credentials_options_destroy grpc_tls_credentials_options_destroy_import -typedef void(*grpc_tls_credentials_options_set_identity_certificate_provider_type)(grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); -extern grpc_tls_credentials_options_set_identity_certificate_provider_type grpc_tls_credentials_options_set_identity_certificate_provider_import; -#define grpc_tls_credentials_options_set_identity_certificate_provider grpc_tls_credentials_options_set_identity_certificate_provider_import -typedef void(*grpc_tls_credentials_options_set_root_certificate_provider_type)(grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); -extern grpc_tls_credentials_options_set_root_certificate_provider_type grpc_tls_credentials_options_set_root_certificate_provider_import; -#define grpc_tls_credentials_options_set_root_certificate_provider grpc_tls_credentials_options_set_root_certificate_provider_import +typedef void(*grpc_tls_credentials_options_set_certificate_provider_type)(grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); +extern grpc_tls_credentials_options_set_certificate_provider_type grpc_tls_credentials_options_set_certificate_provider_import; +#define grpc_tls_credentials_options_set_certificate_provider grpc_tls_credentials_options_set_certificate_provider_import +typedef void(*grpc_tls_credentials_options_watch_root_certs_type)(grpc_tls_credentials_options* options); +extern grpc_tls_credentials_options_watch_root_certs_type grpc_tls_credentials_options_watch_root_certs_import; +#define grpc_tls_credentials_options_watch_root_certs grpc_tls_credentials_options_watch_root_certs_import typedef void(*grpc_tls_credentials_options_set_root_cert_name_type)(grpc_tls_credentials_options* options, const char* root_cert_name); extern grpc_tls_credentials_options_set_root_cert_name_type grpc_tls_credentials_options_set_root_cert_name_import; #define grpc_tls_credentials_options_set_root_cert_name grpc_tls_credentials_options_set_root_cert_name_import +typedef void(*grpc_tls_credentials_options_watch_identity_key_cert_pairs_type)(grpc_tls_credentials_options* options); +extern grpc_tls_credentials_options_watch_identity_key_cert_pairs_type grpc_tls_credentials_options_watch_identity_key_cert_pairs_import; +#define grpc_tls_credentials_options_watch_identity_key_cert_pairs grpc_tls_credentials_options_watch_identity_key_cert_pairs_import typedef void(*grpc_tls_credentials_options_set_identity_cert_name_type)(grpc_tls_credentials_options* options, const char* identity_cert_name); extern grpc_tls_credentials_options_set_identity_cert_name_type grpc_tls_credentials_options_set_identity_cert_name_import; #define grpc_tls_credentials_options_set_identity_cert_name grpc_tls_credentials_options_set_identity_cert_name_import diff --git a/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc b/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc index cbf4ae1a061c4..f19a1330f34b8 100644 --- a/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc +++ b/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc @@ -92,6 +92,26 @@ TEST(TlsCredentialsOptionsComparatorTest, DifferentCheckCallHost) { delete options_1; delete options_2; } +TEST(TlsCredentialsOptionsComparatorTest, DifferentCertificateProvider) { + auto* options_1 = grpc_tls_credentials_options_create(); + auto* options_2 = grpc_tls_credentials_options_create(); + options_1->set_certificate_provider(MakeRefCounted("root_cert_1", PemKeyCertPairList())); + options_2->set_certificate_provider(MakeRefCounted("root_cert_2", PemKeyCertPairList())); + EXPECT_FALSE(*options_1 == *options_2); + EXPECT_FALSE(*options_2 == *options_1); + delete options_1; + delete options_2; +} +TEST(TlsCredentialsOptionsComparatorTest, DifferentWatchRootCert) { + auto* options_1 = grpc_tls_credentials_options_create(); + auto* options_2 = grpc_tls_credentials_options_create(); + options_1->set_watch_root_cert(false); + options_2->set_watch_root_cert(true); + EXPECT_FALSE(*options_1 == *options_2); + EXPECT_FALSE(*options_2 == *options_1); + delete options_1; + delete options_2; +} TEST(TlsCredentialsOptionsComparatorTest, DifferentRootCertName) { auto* options_1 = grpc_tls_credentials_options_create(); auto* options_2 = grpc_tls_credentials_options_create(); @@ -102,6 +122,16 @@ TEST(TlsCredentialsOptionsComparatorTest, DifferentRootCertName) { delete options_1; delete options_2; } +TEST(TlsCredentialsOptionsComparatorTest, DifferentWatchIdentityPair) { + auto* options_1 = grpc_tls_credentials_options_create(); + auto* options_2 = grpc_tls_credentials_options_create(); + options_1->set_watch_identity_pair(false); + options_2->set_watch_identity_pair(true); + EXPECT_FALSE(*options_1 == *options_2); + EXPECT_FALSE(*options_2 == *options_1); + delete options_1; + delete options_2; +} TEST(TlsCredentialsOptionsComparatorTest, DifferentIdentityCertName) { auto* options_1 = grpc_tls_credentials_options_create(); auto* options_2 = grpc_tls_credentials_options_create(); @@ -152,26 +182,6 @@ TEST(TlsCredentialsOptionsComparatorTest, DifferentSendClientCaListValues) { delete options_1; delete options_2; } -TEST(TlsCredentialsOptionsComparatorTest, DifferentIdentityCertificateProvider) { - auto* options_1 = grpc_tls_credentials_options_create(); - auto* options_2 = grpc_tls_credentials_options_create(); - options_1->set_identity_certificate_provider(MakeRefCounted("root_cert_1", PemKeyCertPairList())); - options_2->set_identity_certificate_provider(MakeRefCounted("root_cert_2", PemKeyCertPairList())); - EXPECT_FALSE(*options_1 == *options_2); - EXPECT_FALSE(*options_2 == *options_1); - delete options_1; - delete options_2; -} -TEST(TlsCredentialsOptionsComparatorTest, DifferentRootCertificateProvider) { - auto* options_1 = grpc_tls_credentials_options_create(); - auto* options_2 = grpc_tls_credentials_options_create(); - options_1->set_root_certificate_provider(MakeRefCounted("root_cert_1", PemKeyCertPairList())); - options_2->set_root_certificate_provider(MakeRefCounted("root_cert_2", PemKeyCertPairList())); - EXPECT_FALSE(*options_1 == *options_2); - EXPECT_FALSE(*options_2 == *options_1); - delete options_1; - delete options_2; -} TEST(TlsCredentialsOptionsComparatorTest, DifferentSniOverride) { auto* options_1 = grpc_tls_credentials_options_create(); auto* options_2 = grpc_tls_credentials_options_create(); diff --git a/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc b/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc index 15ca10ee66160..efd392111c8dd 100644 --- a/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc +++ b/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc @@ -107,8 +107,9 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -127,7 +128,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_root_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -146,7 +148,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_root_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -163,7 +166,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -180,8 +184,9 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_cert_request_type( GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); auto credentials = MakeRefCounted(options); @@ -200,7 +205,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -218,7 +224,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -239,8 +246,9 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -259,7 +267,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", "", CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_root_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -278,7 +287,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, "", /*spiffe_bundle_map_file=*/"", 1); - options->set_root_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -295,7 +305,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", "", INVALID_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_root_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -313,8 +324,9 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_cert_request_type( GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); auto credentials = MakeRefCounted(options); @@ -333,7 +345,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, "", /*spiffe_bundle_map_file=*/"", 1); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -351,7 +364,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", "", CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -367,7 +381,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( INVALID_PATH, INVALID_PATH, "", /*spiffe_bundle_map_file=*/"", 1); - options->set_identity_certificate_provider(provider); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -394,8 +409,9 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( tmp_identity_key.name(), tmp_identity_cert.name(), tmp_root_cert.name(), /*spiffe_bundle_map_file=*/"", 1); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -443,8 +459,9 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( tmp_identity_key->name(), tmp_identity_cert->name(), tmp_root_cert->name(), /*spiffe_bundle_map_file=*/"", 1); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -516,7 +533,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, ServerOptionsWithExternalVerifier) { // On server side we have to set the provider providing identity certs. auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); auto connector = credentials->create_security_connector(ChannelArgs()); @@ -554,7 +572,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, // On server side we have to set the provider providing identity certs. auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); auto connector = credentials->create_security_connector(ChannelArgs()); @@ -584,8 +603,9 @@ TEST_F(GrpcTlsCredentialsOptionsTest, CrlProviderWithServerCredentials) { auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_cert_request_type( GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); auto crl_provider = experimental::CreateStaticCrlProvider({}); diff --git a/test/core/credentials/transport/tls/tls_security_connector_test.cc b/test/core/credentials/transport/tls/tls_security_connector_test.cc index 218c68bb8738f..fd2d821b17da1 100644 --- a/test/core/credentials/transport/tls/tls_security_connector_test.cc +++ b/test/core/credentials/transport/tls/tls_security_connector_test.cc @@ -141,8 +141,9 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -190,7 +191,8 @@ TEST_F(TlsSecurityConnectorTest, // Create options only watching for identity certificates. RefCountedPtr root_options = MakeRefCounted(); - root_options->set_identity_certificate_provider(std::move(provider)); + root_options->set_certificate_provider(provider); + root_options->set_watch_identity_pair(true); root_options->set_identity_cert_name(kIdentityCertName); RefCountedPtr root_credential = MakeRefCounted(root_options); @@ -221,7 +223,8 @@ TEST_F(TlsSecurityConnectorTest, // Create options only watching for root certificates. RefCountedPtr root_options = MakeRefCounted(); - root_options->set_root_certificate_provider(std::move(provider)); + root_options->set_certificate_provider(provider); + root_options->set_watch_root_cert(true); root_options->set_root_cert_name(kRootCertName); RefCountedPtr root_credential = MakeRefCounted(root_options); @@ -250,8 +253,9 @@ TEST_F(TlsSecurityConnectorTest, // available at distributor right now. RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -283,8 +287,9 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -428,7 +433,8 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_root_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -453,7 +459,8 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_root_certificate_provider(provider); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -462,10 +469,10 @@ TEST_F(TlsSecurityConnectorTest, credential->create_security_connector(nullptr, kTargetName, &connector_args); auto other_options = MakeRefCounted(); - other_options->set_root_certificate_provider(provider); - other_options->set_identity_certificate_provider(std::move(provider)); + other_options->set_certificate_provider(provider); + other_options->set_watch_root_cert(true); other_options->set_root_cert_name(kRootCertName); - other_options->set_identity_cert_name(kIdentityCertName); + other_options->set_watch_identity_pair(true); RefCountedPtr other_credential = MakeRefCounted(other_options); ChannelArgs other_connector_args; @@ -485,7 +492,8 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_root_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -513,7 +521,8 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_root_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -762,8 +771,9 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -798,7 +808,8 @@ TEST_F(TlsSecurityConnectorTest, // Create options only watching for identity certificates. RefCountedPtr identity_options = MakeRefCounted(); - identity_options->set_identity_certificate_provider(std::move(provider)); + identity_options->set_certificate_provider(provider); + identity_options->set_watch_identity_pair(true); identity_options->set_identity_cert_name(kIdentityCertName); RefCountedPtr identity_credential = MakeRefCounted(identity_options); @@ -829,8 +840,9 @@ TEST_F(TlsSecurityConnectorTest, // available at distributor right now. RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -861,8 +873,9 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -911,7 +924,8 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_identity_pair(true); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -932,7 +946,8 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_identity_pair(true); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -961,7 +976,8 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier.Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -991,7 +1007,8 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier.Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1025,7 +1042,8 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier->Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1057,7 +1075,8 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier->Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1093,7 +1112,8 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier.Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(std::move(provider)); + options->set_watch_identity_pair(true); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1130,8 +1150,9 @@ TEST_F( MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1165,8 +1186,9 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1204,8 +1226,9 @@ TEST_F( MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1238,8 +1261,9 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_root_certificate_provider(provider); - options->set_identity_certificate_provider(std::move(provider)); + options->set_certificate_provider(provider); + options->set_watch_root_cert(true); + options->set_watch_identity_pair(true); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1276,4 +1300,4 @@ int main(int argc, char** argv) { int ret = RUN_ALL_TESTS(); grpc_shutdown(); return ret; -} \ No newline at end of file +} diff --git a/test/core/end2end/fixtures/h2_tls_common.h b/test/core/end2end/fixtures/h2_tls_common.h index bf338cbb3f408..eb32a636bdf2c 100644 --- a/test/core/end2end/fixtures/h2_tls_common.h +++ b/test/core/end2end/fixtures/h2_tls_common.h @@ -171,10 +171,10 @@ class TlsFixture : public SecureFixture { options->set_min_tls_version(tls_version_); options->set_max_tls_version(tls_version_); // Set credential provider. - grpc_tls_credentials_options_set_root_certificate_provider( - options, client_provider_); - grpc_tls_credentials_options_set_identity_certificate_provider( - options, client_provider_); + grpc_tls_credentials_options_set_certificate_provider(options, + client_provider_); + grpc_tls_credentials_options_watch_root_certs(options); + grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); // Set credential verifier. grpc_tls_credentials_options_set_certificate_verifier(options, client_verifier_); @@ -191,10 +191,10 @@ class TlsFixture : public SecureFixture { options->set_min_tls_version(tls_version_); options->set_max_tls_version(tls_version_); // Set credential provider. - grpc_tls_credentials_options_set_root_certificate_provider( - options, server_provider_); - grpc_tls_credentials_options_set_identity_certificate_provider( - options, server_provider_); + grpc_tls_credentials_options_set_certificate_provider(options, + server_provider_); + grpc_tls_credentials_options_watch_root_certs(options); + grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); diff --git a/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc b/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc index 5dba34c5ebfde..e7de3e61fa95e 100644 --- a/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc +++ b/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc @@ -75,10 +75,10 @@ grpc_server* server_create(grpc_completion_queue* cq, const char* server_addr, server_cert.c_str()); *server_provider = grpc_tls_certificate_provider_static_data_create( ca_cert.c_str(), server_pairs); - grpc_tls_credentials_options_set_root_certificate_provider(options, - *server_provider); - grpc_tls_credentials_options_set_identity_certificate_provider( - options, *server_provider); + grpc_tls_credentials_options_set_certificate_provider(options, + *server_provider); + grpc_tls_credentials_options_watch_root_certs(options); + grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); @@ -116,10 +116,10 @@ grpc_channel* client_create(const char* server_addr, *client_provider = grpc_tls_certificate_provider_static_data_create( ca_cert.c_str(), client_pairs); - grpc_tls_credentials_options_set_root_certificate_provider(options, - *client_provider); - grpc_tls_credentials_options_set_identity_certificate_provider( - options, *client_provider); + grpc_tls_credentials_options_set_certificate_provider(options, + *client_provider); + grpc_tls_credentials_options_watch_root_certs(options); + grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); diff --git a/test/core/transport/chttp2/chttp2_server_listener_test.cc b/test/core/transport/chttp2/chttp2_server_listener_test.cc index 8f744fdaecaa4..ed5552af00b59 100644 --- a/test/core/transport/chttp2/chttp2_server_listener_test.cc +++ b/test/core/transport/chttp2/chttp2_server_listener_test.cc @@ -310,11 +310,11 @@ RefCountedPtr CreateSecureServerCredentials() { grpc_tls_certificate_provider* server_provider = grpc_tls_certificate_provider_static_data_create(ca_cert.c_str(), server_pairs); - grpc_tls_credentials_options_set_root_certificate_provider(options, - server_provider); - grpc_tls_credentials_options_set_identity_certificate_provider( - options, server_provider); + grpc_tls_credentials_options_set_certificate_provider(options, + server_provider); grpc_tls_certificate_provider_release(server_provider); + grpc_tls_credentials_options_watch_root_certs(options); + grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); diff --git a/tools/codegen/core/gen_grpc_tls_credentials_options.py b/tools/codegen/core/gen_grpc_tls_credentials_options.py index e409036ea6103..6382620f7c63a 100755 --- a/tools/codegen/core/gen_grpc_tls_credentials_options.py +++ b/tools/codegen/core/gen_grpc_tls_credentials_options.py @@ -115,6 +115,49 @@ class DataMember: test_value_1="false", test_value_2="true", ), + DataMember( + name="certificate_provider", + type="grpc_core::RefCountedPtr", + getter_comment=( + "Returns the distributor from certificate_provider_ if it is set," + " nullptr otherwise." + ), + override_getter="""grpc_tls_certificate_distributor* certificate_distributor() { + if (certificate_provider_ != nullptr) { return certificate_provider_->distributor().get(); } + return nullptr; + }""", + setter_move_semantics=True, + special_comparator=( + "(certificate_provider_ == other.certificate_provider_ ||" + " (certificate_provider_ != nullptr && other.certificate_provider_" + " != nullptr &&" + " certificate_provider_->Compare(other.certificate_provider_.get())" + " == 0))" + ), + test_name="DifferentCertificateProvider", + test_value_1=( + 'MakeRefCounted("root_cert_1",' + " PemKeyCertPairList())" + ), + test_value_2=( + 'MakeRefCounted("root_cert_2",' + " PemKeyCertPairList())" + ), + ), + DataMember( + name="watch_root_cert", + type="bool", + default_initializer="false", + setter_comment=( + "If need to watch the updates of root certificates with name" + " |root_cert_name|. The default value is false. If used in" + " tls_credentials, it should always be set to true unless the root" + " certificates are not needed." + ), + test_name="DifferentWatchRootCert", + test_value_1="false", + test_value_2="true", + ), DataMember( name="root_cert_name", type="std::string", @@ -129,6 +172,20 @@ class DataMember: test_value_1='"root_cert_name_1"', test_value_2='"root_cert_name_2"', ), + DataMember( + name="watch_identity_pair", + type="bool", + default_initializer="false", + setter_comment=( + "If need to watch the updates of identity certificates with name" + " |identity_cert_name|. The default value is false. If used in" + " tls_credentials, it should always be set to true unless the" + " identity key-cert pairs are not needed." + ), + test_name="DifferentWatchIdentityPair", + test_value_1="false", + test_value_2="true", + ), DataMember( name="identity_cert_name", type="std::string", @@ -185,65 +242,6 @@ class DataMember: test_value_1="false", test_value_2="true", ), - DataMember( - name="identity_certificate_provider", - type="grpc_core::RefCountedPtr", - getter_comment=( - "Returns the distributor from identity_certificate_provider_ if it" - " is set, nullptr otherwise." - ), - override_getter="""grpc_tls_certificate_distributor* identity_certificate_distributor() { - if (identity_certificate_provider_ != nullptr) { return identity_certificate_provider_->distributor().get(); } - return nullptr; - }""", - setter_move_semantics=True, - special_comparator=( - "(identity_certificate_provider_ ==" - " other.identity_certificate_provider_ ||" - " (identity_certificate_provider_ != nullptr &&" - " other.identity_certificate_provider_ != nullptr &&" - " identity_certificate_provider_->Compare(other.identity_certificate_provider_.get())" - " == 0))" - ), - test_name="DifferentIdentityCertificateProvider", - test_value_1=( - 'MakeRefCounted("root_cert_1",' - " PemKeyCertPairList())" - ), - test_value_2=( - 'MakeRefCounted("root_cert_2",' - " PemKeyCertPairList())" - ), - ), - DataMember( - name="root_certificate_provider", - type="grpc_core::RefCountedPtr", - getter_comment=( - "Returns the distributor from root_certificate_provider_ if it is" - " set, nullptr otherwise." - ), - override_getter="""grpc_tls_certificate_distributor* root_certificate_distributor() { - if (root_certificate_provider_ != nullptr) { return root_certificate_provider_->distributor().get(); } - return nullptr; - }""", - setter_move_semantics=True, - special_comparator=( - "(root_certificate_provider_ == other.root_certificate_provider_ ||" - " (root_certificate_provider_ != nullptr &&" - " other.root_certificate_provider_ != nullptr &&" - " root_certificate_provider_->Compare(other.root_certificate_provider_.get())" - " == 0))" - ), - test_name="DifferentRootCertificateProvider", - test_value_1=( - 'MakeRefCounted("root_cert_1",' - " PemKeyCertPairList())" - ), - test_value_2=( - 'MakeRefCounted("root_cert_2",' - " PemKeyCertPairList())" - ), - ), DataMember( name="sni_override", type="std::optional", From 004367923f31fd11dd88a0dd38e97d646b84fbbe Mon Sep 17 00:00:00 2001 From: "E. John Feig" Date: Mon, 26 Jan 2026 21:06:43 -0800 Subject: [PATCH 27/67] Update issue template for 'ask a question' (#41474) Update issue template for 'ask a question' template. Removes the reference to StackOverflow. --- .github/ISSUE_TEMPLATE/question.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 3e38e722ecdfe..8c4362915e2fe 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -8,8 +8,6 @@ labels: kind/question, priority/P3, untriaged PLEASE DO NOT POST A QUESTION HERE. This form is for bug reports and feature requests ONLY! -For general questions and troubleshooting, please ask/look for answers at StackOverflow, with "grpc" tag: https://stackoverflow.com/questions/tagged/grpc - For questions that specifically need to be answered by gRPC team members, please ask/look for answers at grpc.io mailing list: https://groups.google.com/forum/#!forum/grpc-io This issue will be closed down once seen by the repo managers. From 82c279e07d43eb05293231a1ab81bf902dabc257 Mon Sep 17 00:00:00 2001 From: yuanweiz Date: Tue, 27 Jan 2026 21:01:05 -0800 Subject: [PATCH 28/67] [bzlmod] Enable bzlmod for a set of RBE tests. (#41488) Enable bzlmod by default for remote tests (exceptions apply on a per-check basis). Linux tests seem mostly fine. MacOS and Windows have different issues. Language specific testings (like csharp, ruby, php etc) don't seem affected by `tools/remote_build` at all so we need a separate change to migrate them. The end goal is to enable bzlmod for everything from `tools/bazel.rc`, and we'll need to come up with a better strategy for testing. More about known issues: see #41487 Closes #41488 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41488 from yuanweiz:linux_bzlmod e43e9fb9af532e5b89bf9f11eb0657bd9a7c321a PiperOrigin-RevId: 862021150 --- MODULE.bazel | 22 +++++++++++++++++++ templates/MODULE.bazel.inja | 22 +++++++++++++++++++ .../include/disable_bzlmod.bazelrc | 4 ++++ .../include/enable_bzlmod.bazelrc | 7 ++++++ .../include/test_config_common.bazelrc | 2 ++ ...t_locally_with_resultstore_results.bazelrc | 2 ++ tools/remote_build/linux_bzlmod.bazelrc | 7 ------ tools/remote_build/mac.bazelrc | 2 ++ tools/remote_build/windows.bazelrc | 2 ++ 9 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 tools/remote_build/include/disable_bzlmod.bazelrc create mode 100644 tools/remote_build/include/enable_bzlmod.bazelrc diff --git a/MODULE.bazel b/MODULE.bazel index be8a380122f53..ea55411605201 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,7 +22,14 @@ module( # Regular dependencies # ==================== +# -- Abseil library. +# Pinning version to be consistent with third_party/abseil-cpp bazel_dep(name = "abseil-cpp", version = "20250512.1", repo_name = "com_google_absl") +single_version_override( + module_name = "abseil-cpp", + version = "20250512.1", +) + bazel_dep(name = "apple_support", version = "1.17.1", repo_name = "build_bazel_apple_support") bazel_dep(name = "bazel_skylib", version = "1.8.1") bazel_dep(name = "boringssl", version = "0.20241024.0") # mistmatched 20241211 @@ -36,7 +43,15 @@ bazel_dep(name = "opencensus-cpp", version = "0.0.0-20230502-50eb5de.bcr.2", rep bazel_dep(name = "openssl", version = "3.3.1.bcr.1") bazel_dep(name = "opentelemetry-cpp", version = "1.19.0", repo_name = "io_opentelemetry_cpp") bazel_dep(name = "platforms", version = "0.0.11") + +# --- Protobuf related packages. +# Pinning to 31.1 to avoid xDs breakage until we can upgrade to Protobuf >= 33.0 bazel_dep(name = "protobuf", version = "31.1", repo_name = "com_google_protobuf") +single_version_override( + module_name = "protobuf", + version = "31.1", +) + bazel_dep(name = "protoc-gen-validate", version = "1.2.1.bcr.1", repo_name = "com_envoyproxy_protoc_gen_validate") # Not needed directly bazel_dep(name = "re2", version = "2024-07-02.bcr.1", repo_name = "com_googlesource_code_re2") # mistmached 2022-04-01 bazel_dep(name = "rules_apple", version = "3.16.0", repo_name = "build_bazel_rules_apple") @@ -126,3 +141,10 @@ archive_override( "https://github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.35.0.tar.gz", ], ) + +# --- Python headers +# TODO(weizheyuan): Maybe replace this with python header exposed by rules_python. +# See also https://github.com/grpc/grpc/issues/24665 +python_configure = use_repo_rule("//third_party/py:python_configure.bzl", "python_configure") + +python_configure(name = "local_config_python") diff --git a/templates/MODULE.bazel.inja b/templates/MODULE.bazel.inja index 80127173df8b1..7e8a655bff600 100644 --- a/templates/MODULE.bazel.inja +++ b/templates/MODULE.bazel.inja @@ -22,7 +22,14 @@ module( # Regular dependencies # ==================== +# -- Abseil library. +# Pinning version to be consistent with third_party/abseil-cpp bazel_dep(name = "abseil-cpp", version = "20250512.1", repo_name = "com_google_absl") +single_version_override( + module_name = "abseil-cpp", + version = "20250512.1", +) + bazel_dep(name = "apple_support", version = "1.17.1", repo_name = "build_bazel_apple_support") bazel_dep(name = "bazel_skylib", version = "1.8.1") bazel_dep(name = "boringssl", version = "0.20241024.0") # mistmatched 20241211 @@ -36,7 +43,15 @@ bazel_dep(name = "opencensus-cpp", version = "0.0.0-20230502-50eb5de.bcr.2", rep bazel_dep(name = "openssl", version = "3.3.1.bcr.1") bazel_dep(name = "opentelemetry-cpp", version = "1.19.0", repo_name = "io_opentelemetry_cpp") bazel_dep(name = "platforms", version = "0.0.11") + +# --- Protobuf related packages. +# Pinning to 31.1 to avoid xDs breakage until we can upgrade to Protobuf >= 33.0 bazel_dep(name = "protobuf", version = "31.1", repo_name = "com_google_protobuf") +single_version_override( + module_name = "protobuf", + version = "31.1", +) + bazel_dep(name = "protoc-gen-validate", version = "1.2.1.bcr.1", repo_name = "com_envoyproxy_protoc_gen_validate") # Not needed directly bazel_dep(name = "re2", version = "2024-07-02.bcr.1", repo_name = "com_googlesource_code_re2") # mistmached 2022-04-01 bazel_dep(name = "rules_apple", version = "3.16.0", repo_name = "build_bazel_rules_apple") @@ -126,3 +141,10 @@ archive_override( "https://github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.35.0.tar.gz", ], ) + +# --- Python headers +# TODO(weizheyuan): Maybe replace this with python header exposed by rules_python. +# See also https://github.com/grpc/grpc/issues/24665 +python_configure = use_repo_rule("//third_party/py:python_configure.bzl", "python_configure") + +python_configure(name = "local_config_python") diff --git a/tools/remote_build/include/disable_bzlmod.bazelrc b/tools/remote_build/include/disable_bzlmod.bazelrc new file mode 100644 index 0000000000000..19dc950845cb3 --- /dev/null +++ b/tools/remote_build/include/disable_bzlmod.bazelrc @@ -0,0 +1,4 @@ +# Explicitly disable bzlmod. Used for migraion. +# This can be imported by individual test suites to take precedence over `enable_bzlmod.bazelrc`. +common --enable_bzlmod=false +common --enable_workspace=true diff --git a/tools/remote_build/include/enable_bzlmod.bazelrc b/tools/remote_build/include/enable_bzlmod.bazelrc new file mode 100644 index 0000000000000..2105e34f1ce50 --- /dev/null +++ b/tools/remote_build/include/enable_bzlmod.bazelrc @@ -0,0 +1,7 @@ +# Enable bzlmod. Used for migraion. +common --enable_bzlmod=true +common --enable_workspace=false +# TODO(weizheyuan): Re-enable this check once we upgrade all of the +# transitive dependencies that are currently at mismatched versions. +#common --check_direct_dependencies=error +common --ignore_dev_dependency=false diff --git a/tools/remote_build/include/test_config_common.bazelrc b/tools/remote_build/include/test_config_common.bazelrc index 63b5b50c08e74..2c9f5d0a816b9 100644 --- a/tools/remote_build/include/test_config_common.bazelrc +++ b/tools/remote_build/include/test_config_common.bazelrc @@ -15,6 +15,8 @@ # bazelrc for common configuration of gRPC tests +import %workspace%/tools/remote_build/include/enable_bzlmod.bazelrc + build --verbose_failures=true # without verbose gRPC logs the test outputs are not very useful diff --git a/tools/remote_build/include/test_locally_with_resultstore_results.bazelrc b/tools/remote_build/include/test_locally_with_resultstore_results.bazelrc index c39d173e98211..5301bab7ec76b 100644 --- a/tools/remote_build/include/test_locally_with_resultstore_results.bazelrc +++ b/tools/remote_build/include/test_locally_with_resultstore_results.bazelrc @@ -13,3 +13,5 @@ import %workspace%/tools/remote_build/include/rbe_base_config.bazelrc build --remote_upload_local_results=false import %workspace%/tools/remote_build/include/test_config_common.bazelrc +# TODO(weizheyuan): Fix test failures. See https://github.com/grpc/grpc/issues/41487 +import %workspace%/tools/remote_build/include/disable_bzlmod.bazelrc diff --git a/tools/remote_build/linux_bzlmod.bazelrc b/tools/remote_build/linux_bzlmod.bazelrc index 2da01a11255cd..0d62510be3f59 100644 --- a/tools/remote_build/linux_bzlmod.bazelrc +++ b/tools/remote_build/linux_bzlmod.bazelrc @@ -17,11 +17,4 @@ import %workspace%/tools/remote_build/include/test_config_common.bazelrc -common --enable_bzlmod=true -common --enable_workspace=false -# TODO(weizheyuan): Re-enable this check once we upgrade all of the -# transitive dependencies that are currently at mismatched versions. -#common --check_direct_dependencies=error -common --ignore_dev_dependency=false - build --jobs=200 diff --git a/tools/remote_build/mac.bazelrc b/tools/remote_build/mac.bazelrc index bb262b5103a93..8759edac780cf 100644 --- a/tools/remote_build/mac.bazelrc +++ b/tools/remote_build/mac.bazelrc @@ -21,3 +21,5 @@ build --build_tag_filters=-no_mac build --dynamic_mode=off import %workspace%/tools/remote_build/include/test_config_common.bazelrc +# TODO(weizheyuan): Fix test failures. See https://github.com/grpc/grpc/issues/41487 +import %workspace%/tools/remote_build/include/disable_bzlmod.bazelrc diff --git a/tools/remote_build/windows.bazelrc b/tools/remote_build/windows.bazelrc index 67052e872141a..0f27c7d0c43cd 100644 --- a/tools/remote_build/windows.bazelrc +++ b/tools/remote_build/windows.bazelrc @@ -25,3 +25,5 @@ build --dynamic_mode=off build --test_timeout=60,600,1800,3600 import %workspace%/tools/remote_build/include/test_config_common.bazelrc +# TODO(weizheyuan): Fix test failures. See https://github.com/grpc/grpc/issues/41487 +import %workspace%/tools/remote_build/include/disable_bzlmod.bazelrc From 10616727e4ae4f036a0708b32d86d006fb095f2e Mon Sep 17 00:00:00 2001 From: Sergii Tkachenko Date: Thu, 29 Jan 2026 00:43:56 -0800 Subject: [PATCH 29/67] [Fix][CI] Fix upload_rbe_results.py pyOpenSSL dependency (#41506) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes the issue with upload_rbe_results.py ```pytb Traceback (most recent call last): File "/tmpfs/altsrc/github/grpc/./tools/run_tests/python_utils/upload_rbe_results.py", line 31, in import big_query_utils File "/tmpfs/altsrc/github/grpc/tools/gcp/utils/big_query_utils.py", line 21, in from apiclient import discovery File "/home/kbuilder/.local/lib/python3.10/site-packages/apiclient/__init__.py", line 3, in from googleapiclient import channel, discovery, errors, http, mimeparse, model File "/home/kbuilder/.local/lib/python3.10/site-packages/googleapiclient/discovery.py", line 64, in from googleapiclient import _auth, mimeparse File "/home/kbuilder/.local/lib/python3.10/site-packages/googleapiclient/_auth.py", line 34, in import oauth2client.client File "/home/kbuilder/.local/lib/python3.10/site-packages/oauth2client/client.py", line 45, in from oauth2client import crypt File "/home/kbuilder/.local/lib/python3.10/site-packages/oauth2client/crypt.py", line 45, in from oauth2client import _openssl_crypt File "/home/kbuilder/.local/lib/python3.10/site-packages/oauth2client/_openssl_crypt.py", line 16, in from OpenSSL import crypto File "/usr/lib/python3/dist-packages/OpenSSL/__init__.py", line 8, in from OpenSSL import crypto, SSL File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 1579, in class X509StoreFlags(object): File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 1598, in X509StoreFlags NOTIFY_POLICY = _lib.X509_V_FLAG_NOTIFY_POLICY AttributeError: module 'lib' has no attribute 'X509_V_FLAG_NOTIFY_POLICY'. Did you mean: 'X509_V_FLAG_EXPLICIT_POLICY'? ``` oauth2client is deprecated for a while and didn't account for declaring its dependency correctly. Problematic code: ``` try: from oauth2client import _openssl_crypt OpenSSLSigner = _openssl_crypt.OpenSSLSigner OpenSSLVerifier = _openssl_crypt.OpenSSLVerifier pkcs12_key_as_pem = _openssl_crypt.pkcs12_key_as_pem except ImportError: # pragma: NO COVER OpenSSLVerifier = None OpenSSLSigner = None pkcs12_key_as_pem = _bad_pkcs12_key_as_pem ``` However, oauth2client._openssl_crypt will fail to load when `cryptography` is out of sync with `pyOpenSSL`. Both had `X509_V_FLAG_NOTIFY_POLICY` removed: in PyOpenSSL v23.2.0, cryptography v42.0.0. Our default infra setup had `PyOpenSSL` 21.0.0, but `oauth2client` pulls in `cryptography` 46.0.4. This PR changes our build scripts to explicitly require `pyOpenSSL>=23.2.0`. Closes #41506 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41506 from sergiitk:fix/ci/upload_rbe_results 563315b149cdc65c46b1e6a3d2b49b1f5e5d3a4d PiperOrigin-RevId: 862603978 --- tools/internal_ci/linux/grpc_bazel_rbe.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/internal_ci/linux/grpc_bazel_rbe.sh b/tools/internal_ci/linux/grpc_bazel_rbe.sh index 589df7e821b1f..4e2d42fa8e004 100755 --- a/tools/internal_ci/linux/grpc_bazel_rbe.sh +++ b/tools/internal_ci/linux/grpc_bazel_rbe.sh @@ -29,7 +29,9 @@ tools/bazel version # Needed for upload_rbe_results.py big_query_utils called by bazel_report_helper.py # Note: the versions are locked to the ones supporting python3.10. # Google will drop Python 3.10 once it reaches its end of life (2026-10-04) -pip install --user google-api-python-client==2.187.0 oauth2client==4.1.3 +# TODO(sergiitk): we need to migrate off of oauth2client: https://google-auth.readthedocs.io/en/latest/oauth2client-deprecation.html +pip install --user google-api-python-client==2.187.0 oauth2client==4.1.3 \ + "pyOpenSSL>=23.2.0" python3 tools/run_tests/python_utils/bazel_report_helper.py --report_path bazel_rbe From 9a1f6a11cd567fe4237399d6137c75b368431e07 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Thu, 29 Jan 2026 09:35:54 -0800 Subject: [PATCH 30/67] [PHP] ignore PHPUnit security advisory in Mac build (#41504) This should fix a build problem we are seeing with the error message > Root composer.json requires phpunit/phpunit 9.5.9 (exact version match: 9.5.9 or 9.5.9.0), found phpunit/phpunit[9.5.9] but these were not loaded, because they are affected by security advisories ("PKSA-z3gr-8qht-p93v"). Go to https://packagist.org/security-advisories/ to find advisory details. To ignore the advisories, add them to the audit "ignore" config. To turn the feature off entirely, you can set "block-insecure" to false in your "audit" config. [The referenced vulnerability](https://github.com/advisories/GHSA-vvj3-c3rp-c85p) says that the impacted function is `cleanupForCoverage()`, which we don't call as far as I can tell, so we shouldn't be impacted by this. In the long run, it would probably be good to upgrade to a newer version of PHPUnit, but this should get the build to work in the short term. Closes #41504 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41504 from murgatroid99:phpunit_ignore_advisory 31be947db1e13a5619c04a774648f6f458156ccc PiperOrigin-RevId: 862772952 --- tools/internal_ci/helper_scripts/prepare_build_macos_rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/internal_ci/helper_scripts/prepare_build_macos_rc b/tools/internal_ci/helper_scripts/prepare_build_macos_rc index 7cb70caef07d7..09a503429a128 100644 --- a/tools/internal_ci/helper_scripts/prepare_build_macos_rc +++ b/tools/internal_ci/helper_scripts/prepare_build_macos_rc @@ -261,7 +261,7 @@ then rm composer-setup.php # Install PHP test dependencies. - php /tmp/composer.phar global require phpunit/phpunit:9.5.9 + php /tmp/composer.phar global require phpunit/phpunit:9.5.9 --no-security-blocking else # Workaround for https://github.com/Homebrew/homebrew-core/issues/41081 mkdir -p /usr/local/lib/php/pecl From 6afabeb74db5d73db249731c60677138aa23aa6c Mon Sep 17 00:00:00 2001 From: Sergii Tkachenko Date: Thu, 29 Jan 2026 13:33:05 -0800 Subject: [PATCH 31/67] [PSM Interop] Legacy driver: fix missing X509_V_FLAG_NOTIFY_POLICY attr (#41509) The same fix as #41506, but for Legacy PSM Interop. Ref b/479748913 Closes #41509 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41509 from sergiitk:fix/psm/legacy/oauth2client-pyopenssll dde67bd3328652573d0bc7edd57b006cd4d37242 PiperOrigin-RevId: 862877812 --- .../internal_ci/linux/grpc_xds_bazel_python_test_in_docker.sh | 4 +++- tools/internal_ci/linux/grpc_xds_bazel_test_in_docker.sh | 4 +++- tools/run_tests/helper_scripts/prep_xds.sh | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/internal_ci/linux/grpc_xds_bazel_python_test_in_docker.sh b/tools/internal_ci/linux/grpc_xds_bazel_python_test_in_docker.sh index 69bfa58eeccf2..e6803f7828f12 100755 --- a/tools/internal_ci/linux/grpc_xds_bazel_python_test_in_docker.sh +++ b/tools/internal_ci/linux/grpc_xds_bazel_python_test_in_docker.sh @@ -34,13 +34,15 @@ python -VV pip install --upgrade pip==25.2 # Note that these are only test driver's dependencies. gRPC version # shouldn't matter, as it's only used for getting the LB stats from the client. +# TODO(sergiitk): we need to migrate off of oauth2client: https://google-auth.readthedocs.io/en/latest/oauth2client-deprecation.html pip install --upgrade \ grpcio-tools==1.74.0 \ grpcio==1.74.0 \ xds-protos==1.74.0 \ google-api-python-client==2.179.0 \ google-auth-httplib2==0.2.0 \ - oauth2client==4.1.3 + oauth2client==4.1.3 \ + "pyOpenSSL>=23.2.0" pip list # Prepare generated Python code. diff --git a/tools/internal_ci/linux/grpc_xds_bazel_test_in_docker.sh b/tools/internal_ci/linux/grpc_xds_bazel_test_in_docker.sh index 63d572aac1c01..1cc34e0987404 100755 --- a/tools/internal_ci/linux/grpc_xds_bazel_test_in_docker.sh +++ b/tools/internal_ci/linux/grpc_xds_bazel_test_in_docker.sh @@ -34,13 +34,15 @@ python -VV pip install --upgrade pip==25.2 # Note that these are only test driver's dependencies. gRPC version # shouldn't matter, as it's only used for getting the LB stats from the client. +# TODO(sergiitk): we need to migrate off of oauth2client: https://google-auth.readthedocs.io/en/latest/oauth2client-deprecation.html pip install --upgrade \ grpcio-tools==1.74.0 \ grpcio==1.74.0 \ xds-protos==1.74.0 \ google-api-python-client==2.179.0 \ google-auth-httplib2==0.2.0 \ - oauth2client==4.1.3 + oauth2client==4.1.3 \ + "pyOpenSSL>=23.2.0" pip list # Prepare generated Python code. diff --git a/tools/run_tests/helper_scripts/prep_xds.sh b/tools/run_tests/helper_scripts/prep_xds.sh index 27825ceab2300..f086fccb359ba 100755 --- a/tools/run_tests/helper_scripts/prep_xds.sh +++ b/tools/run_tests/helper_scripts/prep_xds.sh @@ -35,13 +35,15 @@ python3 -VV sudo python3 -m pip install --upgrade pip==25.2 # TODO(sergiitk): Unpin grpcio-tools when a version of xds-protos # compatible with protobuf 4.X is uploaded to PyPi. +# TODO(sergiitk): we need to migrate off of oauth2client: https://google-auth.readthedocs.io/en/latest/oauth2client-deprecation.html sudo python3 -m pip install --upgrade \ grpcio-tools==1.74.0 \ grpcio==1.74.0 \ xds-protos==1.74.0 \ google-api-python-client==2.179.0 \ google-auth-httplib2==0.2.0 \ - oauth2client==4.1.3 + oauth2client==4.1.3 \ + "pyOpenSSL>=23.2.0" python3 -m pip list # Prepare generated Python code. From a685d2b7babdd96cf744248128a0b70118060910 Mon Sep 17 00:00:00 2001 From: Ashesh Vidyut Date: Thu, 29 Jan 2026 19:46:23 -0800 Subject: [PATCH 32/67] [Python] Add tests for proto gen and using strict_mode (#41368) ### Description Using `strict_mode` and add tests for detecting proto generation issues. **Note** - Did not add `strict_mode` [here](https://github.com/grpc/grpc/blob/master/src/python/grpcio_tests/commands.py#L95), since some tests start failing. ### Testing CI link running the test added in this PR from below - https://btx.cloud.google.com/invocations/1e018387-de8c-4e8d-b064-b07153414b01/log Closes #41368 PiperOrigin-RevId: 863016052 --- src/python/grpcio_channelz/channelz_commands.py | 2 +- src/python/grpcio_health_checking/health_commands.py | 2 +- src/python/grpcio_reflection/reflection_commands.py | 2 +- .../grpcio_tests/tests/protoc_plugin/_python_plugin_test.py | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/python/grpcio_channelz/channelz_commands.py b/src/python/grpcio_channelz/channelz_commands.py index 298262df7152b..3a1cc260da436 100644 --- a/src/python/grpcio_channelz/channelz_commands.py +++ b/src/python/grpcio_channelz/channelz_commands.py @@ -65,4 +65,4 @@ def run(self): from grpc_tools import command # find and build all protos in the current package - command.build_package_protos(ROOT_REL_DIR) + command.build_package_protos(ROOT_REL_DIR, strict_mode=True) diff --git a/src/python/grpcio_health_checking/health_commands.py b/src/python/grpcio_health_checking/health_commands.py index 82f2ac96c55f3..6b90962c0f105 100644 --- a/src/python/grpcio_health_checking/health_commands.py +++ b/src/python/grpcio_health_checking/health_commands.py @@ -65,4 +65,4 @@ def run(self): from grpc_tools import command # find and build all protos in the current package - command.build_package_protos(ROOT_REL_DIR) + command.build_package_protos(ROOT_REL_DIR, strict_mode=True) diff --git a/src/python/grpcio_reflection/reflection_commands.py b/src/python/grpcio_reflection/reflection_commands.py index 8b48a6031283c..49cd4c4fb35e2 100644 --- a/src/python/grpcio_reflection/reflection_commands.py +++ b/src/python/grpcio_reflection/reflection_commands.py @@ -67,4 +67,4 @@ def run(self): from grpc_tools import command # find and build all protos in the current package - command.build_package_protos(ROOT_REL_DIR) + command.build_package_protos(ROOT_REL_DIR, strict_mode=True) diff --git a/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py b/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py index c6e41b3ae8c85..a9d4f26efc5a2 100644 --- a/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py +++ b/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py @@ -724,12 +724,11 @@ def test_clean_output(self): invocation, stdout=streams[0], stderr=streams[1] ) proc.wait() - outs = [] for stream in streams: stream.seek(0) self.assertEqual(0, len(stream.read())) self.assertEqual(0, proc.returncode) - except Exception: # pylint: disable=broad-except + finally: shutil.rmtree(work_dir) From c59942f8e21c4ff9f4a3d46b89698650131c844d Mon Sep 17 00:00:00 2001 From: Dmytro Bieliaiev Date: Fri, 30 Jan 2026 06:38:14 -0800 Subject: [PATCH 33/67] [Bazel] Use Python headers from rules_python (#40660) This PR is an attempt to revive https://github.com/grpc/grpc/pull/35666 as I'd like to try to help getting it merged. The changes I did: - rebased original changes made by @mering from the master branch(dropped last commit, because rules_python was already updated in master) - called `python_register_toolchains` in a workspace setup as @rickeylev recommended [here](https://github.com/grpc/grpc/pull/35666#issuecomment-2394526934) I'm not sure what could be affected, so I'd appreciate a feedback. CC: @gnossen Closes #40660 PiperOrigin-RevId: 863213518 --- MODULE.bazel | 7 - WORKSPACE | 7 + bazel/cython_library.bzl | 4 +- bazel/grpc_python_deps.bzl | 8 - third_party/py/BUILD | 5 - third_party/py/BUILD.tpl | 30 --- third_party/py/python_configure.bzl | 384 ---------------------------- third_party/py/variety.tpl | 26 -- 8 files changed, 10 insertions(+), 461 deletions(-) delete mode 100644 third_party/py/BUILD delete mode 100644 third_party/py/BUILD.tpl delete mode 100644 third_party/py/python_configure.bzl delete mode 100644 third_party/py/variety.tpl diff --git a/MODULE.bazel b/MODULE.bazel index ea55411605201..f204efdfe4c06 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -141,10 +141,3 @@ archive_override( "https://github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.35.0.tar.gz", ], ) - -# --- Python headers -# TODO(weizheyuan): Maybe replace this with python header exposed by rules_python. -# See also https://github.com/grpc/grpc/issues/24665 -python_configure = use_repo_rule("//third_party/py:python_configure.bzl", "python_configure") - -python_configure(name = "local_config_python") diff --git a/WORKSPACE b/WORKSPACE index 1ef577e79ffee..a92661fdaeea6 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -115,3 +115,10 @@ bind( name = "madler_zlib", actual = "@zlib//:zlib", ) + +load("@rules_python//python:repositories.bzl", "python_register_toolchains") + +python_register_toolchains( + name = "python_3_11", + python_version = "3.11", +) diff --git a/bazel/cython_library.bzl b/bazel/cython_library.bzl index dc7f518e1105a..fcd76c08f9bcf 100644 --- a/bazel/cython_library.bzl +++ b/bazel/cython_library.bzl @@ -75,7 +75,9 @@ def pyx_library(name, deps = [], py_deps = [], srcs = [], **kwargs): cc_binary( name = shared_object_name, srcs = [stem + ".cpp"], - deps = deps + ["@local_config_python//:python_headers"], + deps = deps + [ + "@rules_python//python/cc:current_py_cc_headers", + ], defines = defines, linkshared = 1, ) diff --git a/bazel/grpc_python_deps.bzl b/bazel/grpc_python_deps.bzl index a07079057c11d..d5a0358072e4e 100644 --- a/bazel/grpc_python_deps.bzl +++ b/bazel/grpc_python_deps.bzl @@ -14,7 +14,6 @@ """Load dependencies needed to compile and test the grpc python library as a 3rd-party consumer.""" load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -load("@com_github_grpc_grpc//third_party/py:python_configure.bzl", "python_configure") # buildifier: disable=unnamed-macro def grpc_python_deps(): @@ -27,13 +26,6 @@ def grpc_python_deps(): url = "https://github.com/bazel-contrib/rules_python/releases/download/1.6.3/rules_python-1.6.3.tar.gz", ) - python_configure(name = "local_config_python") - - native.bind( - name = "python_headers", - actual = "@local_config_python//:python_headers", - ) - # This version should be same as that in G3 http_archive( name = "typing_extensions", diff --git a/third_party/py/BUILD b/third_party/py/BUILD deleted file mode 100644 index 9d87fb885943c..0000000000000 --- a/third_party/py/BUILD +++ /dev/null @@ -1,5 +0,0 @@ -exports_files([ - "BUILD.tpl", - "python_configure.bzl", - "variety.tpl", -]) diff --git a/third_party/py/BUILD.tpl b/third_party/py/BUILD.tpl deleted file mode 100644 index a64eaeaac6c11..0000000000000 --- a/third_party/py/BUILD.tpl +++ /dev/null @@ -1,30 +0,0 @@ -# Adapted with modifications from tensorflow/third_party/py/ - -package(default_visibility=["//visibility:public"]) - -config_setting( - name="windows", - values={"cpu": "x64_windows"}, - visibility=["//visibility:public"], -) - -config_setting( - name="python3", - flag_values = {"@rules_python//python:python_version": "PY3"} -) - -cc_library( - name = "python_lib", - deps = select({ - ":python3": ["//_python3:_python3_lib"], - "//conditions:default": ["not-existing.lib"], - }) -) - -cc_library( - name = "python_headers", - deps = select({ - ":python3": ["//_python3:_python3_headers"], - "//conditions:default": ["not-existing.headers"], - }) -) diff --git a/third_party/py/python_configure.bzl b/third_party/py/python_configure.bzl deleted file mode 100644 index 6569d3e9c1f99..0000000000000 --- a/third_party/py/python_configure.bzl +++ /dev/null @@ -1,384 +0,0 @@ -# Adapted with modifications from tensorflow/third_party/py/ -"""Repository rule for Python autoconfiguration. - -`python_configure` depends on the following environment variables: - - * `PYTHON3_BIN_PATH`: location of python binary. - * `PYTHON3_LIB_PATH`: Location of python libraries. -""" - -_BAZEL_SH = "BAZEL_SH" -_PYTHON3_BIN_PATH = "PYTHON3_BIN_PATH" -_PYTHON3_LIB_PATH = "PYTHON3_LIB_PATH" - -_HEADERS_HELP = ( - "Are Python headers installed? Try installing " + - "python3-dev on Debian-based systems. Try python3-devel " + - "on Redhat-based systems." -) - -def _tpl(repository_ctx, tpl, substitutions = {}, out = None): - if not out: - out = tpl - repository_ctx.template( - out, - Label("//third_party/py:%s.tpl" % tpl), - substitutions, - ) - -def _fail(msg): - """Output failure message when auto configuration fails.""" - red = "\033[0;31m" - no_color = "\033[0m" - fail("%sPython Configuration Error:%s %s\n" % (red, no_color, msg)) - -def _is_windows(repository_ctx): - """Returns true if the host operating system is windows.""" - os_name = repository_ctx.os.name.lower() - return os_name.find("windows") != -1 - -def _execute( - repository_ctx, - cmdline, - error_msg = None, - error_details = None, - empty_stdout_fine = False): - """Executes an arbitrary shell command. - - Args: - repository_ctx: the repository_ctx object - cmdline: list of strings, the command to execute - error_msg: string, a summary of the error if the command fails - error_details: string, details about the error or steps to fix it - empty_stdout_fine: bool, if True, an empty stdout result is fine, otherwise - it's an error - Return: - the result of repository_ctx.execute(cmdline) - """ - result = repository_ctx.execute(cmdline) - if result.stderr or not (empty_stdout_fine or result.stdout): - _fail("\n".join([ - error_msg.strip() if error_msg else "Repository command failed", - result.stderr.strip(), - error_details if error_details else "", - ])) - else: - return result - -def _read_dir(repository_ctx, src_dir): - """Returns a string with all files in a directory. - - Finds all files inside a directory, traversing subfolders and following - symlinks. The returned string contains the full path of all files - separated by line breaks. - """ - if _is_windows(repository_ctx): - src_dir = src_dir.replace("/", "\\") - find_result = _execute( - repository_ctx, - ["cmd.exe", "/c", "dir", src_dir, "/b", "/s", "/a-d"], - empty_stdout_fine = True, - ) - - # src_files will be used in genrule.outs where the paths must - # use forward slashes. - return find_result.stdout.replace("\\", "/") - else: - find_result = _execute( - repository_ctx, - ["find", src_dir, "-follow", "-type", "f"], - empty_stdout_fine = True, - ) - return find_result.stdout - -def _genrule(src_dir, genrule_name, command, outs): - """Returns a string with a genrule. - - Genrule executes the given command and produces the given outputs. - """ - return ("genrule(\n" + ' name = "' + genrule_name + '",\n' + - " outs = [\n" + outs + "\n ],\n" + ' cmd = """\n' + - command + '\n """,\n' + ")\n") - -def _normalize_path(path): - """Returns a path with '/' and remove the trailing slash.""" - path = path.replace("\\", "/") - if path[-1] == "/": - path = path[:-1] - return path - -def _symlink_genrule_for_dir( - repository_ctx, - src_dir, - dest_dir, - genrule_name, - src_files = [], - dest_files = []): - """Returns a genrule to symlink(or copy if on Windows) a set of files. - - If src_dir is passed, files will be read from the given directory; otherwise - we assume files are in src_files and dest_files - """ - if src_dir != None: - src_dir = _normalize_path(src_dir) - dest_dir = _normalize_path(dest_dir) - files = "\n".join( - sorted(_read_dir(repository_ctx, src_dir).splitlines()), - ) - - # Create a list with the src_dir stripped to use for outputs. - dest_files = files.replace(src_dir, "").splitlines() - src_files = files.splitlines() - command = [] - outs = [] - for i in range(len(dest_files)): - if dest_files[i] != "": - # If we have only one file to link we do not want to use the dest_dir, as - # $(@D) will include the full path to the file. - dest = "$(@D)/" + dest_dir + dest_files[i] if len( - dest_files, - ) != 1 else "$(@D)/" + dest_files[i] - - # On Windows, symlink is not supported, so we just copy all the files. - cmd = "cp -f" if _is_windows(repository_ctx) else "ln -s" - command.append(cmd + ' "%s" "%s"' % (src_files[i], dest)) - outs.append(' "' + dest_dir + dest_files[i] + '",') - return _genrule( - src_dir, - genrule_name, - " && ".join(command), - "\n".join(outs), - ) - -def _get_python_bin(repository_ctx, bin_path_key, default_bin_path, allow_absent): - """Gets the python bin path.""" - python_bin = repository_ctx.os.environ.get(bin_path_key, default_bin_path) - if not repository_ctx.path(python_bin).exists: - # It's a command, use 'which' to find its path. - python_bin_path = repository_ctx.which(python_bin) - else: - # It's a path, use it as it is. - python_bin_path = python_bin - if python_bin_path != None: - return str(python_bin_path) - if not allow_absent: - _fail("Cannot find python in PATH, please make sure " + - "python is installed and add its directory in PATH, or --define " + - "%s='/something/else'.\nPATH=%s" % - (bin_path_key, repository_ctx.os.environ.get("PATH", ""))) - else: - return None - -def _get_bash_bin(repository_ctx): - """Gets the bash bin path.""" - bash_bin = repository_ctx.os.environ.get(_BAZEL_SH) - if bash_bin != None: - return bash_bin - else: - bash_bin_path = repository_ctx.which("bash") - if bash_bin_path != None: - return str(bash_bin_path) - else: - _fail( - "Cannot find bash in PATH, please make sure " + - "bash is installed and add its directory in PATH, or --define " + - "%s='/path/to/bash'.\nPATH=%s" % - (_BAZEL_SH, repository_ctx.os.environ.get("PATH", "")), - ) - -def _get_python_lib(repository_ctx, python_bin, lib_path_key): - """Gets the python lib path.""" - python_lib = repository_ctx.os.environ.get(lib_path_key) - if python_lib != None: - return python_lib - print_lib = ( - "<=1:\n" + - " print(paths[0])\n" + "END" - ) - cmd = '"%s" - %s' % (python_bin, print_lib) - result = repository_ctx.execute([_get_bash_bin(repository_ctx), "-c", cmd]) - return result.stdout.strip("\n") - -def _check_python_lib(repository_ctx, python_lib): - """Checks the python lib path.""" - cmd = 'test -d "%s" -a -x "%s"' % (python_lib, python_lib) - result = repository_ctx.execute([_get_bash_bin(repository_ctx), "-c", cmd]) - if result.return_code == 1: - _fail("Invalid python library path: %s" % python_lib) - -def _check_python_bin(repository_ctx, python_bin, bin_path_key, allow_absent): - """Checks the python bin path.""" - cmd = '[[ -x "%s" ]] && [[ ! -d "%s" ]]' % (python_bin, python_bin) - result = repository_ctx.execute([_get_bash_bin(repository_ctx), "-c", cmd]) - if result.return_code == 1: - if not allow_absent: - _fail("--define %s='%s' is not executable. Is it the python binary?" % - (bin_path_key, python_bin)) - else: - return None - return True - -def _get_python_include(repository_ctx, python_bin): - """Gets the python include path.""" - result = _execute( - repository_ctx, - [ - python_bin, - "-c", - "from __future__ import print_function;" + - "import sysconfig;" + - "print(sysconfig.get_path('include'))", - ], - error_msg = "Problem getting python include path for {}.".format(python_bin), - error_details = ( - "Is the Python binary path set up right? " + "(See ./configure or " + - python_bin + ".) " + _HEADERS_HELP - ), - ) - include_path = result.stdout.splitlines()[0] - _execute( - repository_ctx, - [ - python_bin, - "-c", - "import os;" + - "main_header = os.path.join(r'{}', 'Python.h');".format(include_path) + - "assert os.path.exists(main_header), main_header + ' does not exist.'", - ], - error_msg = "Unable to find Python headers for {}".format(python_bin), - error_details = _HEADERS_HELP, - empty_stdout_fine = True, - ) - return include_path - -def _get_python_import_lib_name(repository_ctx, python_bin, bin_path_key): - """Get Python import library name (pythonXY.lib) on Windows.""" - result = _execute( - repository_ctx, - [ - python_bin, - "-c", - "import sys;" + 'print("python" + str(sys.version_info[0]) + ' + - ' str(sys.version_info[1]) + ".lib")', - ], - error_msg = "Problem getting python import library.", - error_details = ("Is the Python binary path set up right? " + - "(See ./configure or " + bin_path_key + ".) "), - ) - return result.stdout.splitlines()[0] - -def _create_single_version_package( - repository_ctx, - variety_name, - bin_path_key, - default_bin_path, - lib_path_key, - allow_absent): - """Creates the repository containing files set up to build with Python.""" - empty_include_rule = "filegroup(\n name=\"{}_include\",\n srcs=[],\n)".format(variety_name) - - python_bin = _get_python_bin(repository_ctx, bin_path_key, default_bin_path, allow_absent) - if (python_bin == None or - _check_python_bin(repository_ctx, - python_bin, - bin_path_key, - allow_absent) == None) and allow_absent: - python_include_rule = empty_include_rule - else: - python_lib = _get_python_lib(repository_ctx, python_bin, lib_path_key) - _check_python_lib(repository_ctx, python_lib) - python_include = _get_python_include(repository_ctx, python_bin) - python_include_rule = _symlink_genrule_for_dir( - repository_ctx, - python_include, - "{}_include".format(variety_name), - "{}_include".format(variety_name), - ) - python_import_lib_genrule = "" - - # To build Python C/C++ extension on Windows, we need to link to python import library pythonXY.lib - # See https://docs.python.org/3/extending/windows.html - if _is_windows(repository_ctx): - python_include = _normalize_path(python_include) - python_import_lib_name = _get_python_import_lib_name( - repository_ctx, - python_bin, - bin_path_key, - ) - python_import_lib_src = python_include.rsplit( - "/", - 1, - )[0] + "/libs/" + python_import_lib_name - python_import_lib_genrule = _symlink_genrule_for_dir( - repository_ctx, - None, - "", - "{}_import_lib".format(variety_name), - [python_import_lib_src], - [python_import_lib_name], - ) - _tpl( - repository_ctx, - "variety", - { - "%{PYTHON_INCLUDE_GENRULE}": python_include_rule, - "%{PYTHON_IMPORT_LIB_GENRULE}": python_import_lib_genrule, - "%{VARIETY_NAME}": variety_name, - }, - out = "{}/BUILD".format(variety_name), - ) - -def _python_autoconf_impl(repository_ctx): - """Implementation of the python_autoconf repository rule.""" - _create_single_version_package( - repository_ctx, - "_python3", - _PYTHON3_BIN_PATH, - "python3" if not _is_windows(repository_ctx) else "python.exe", - _PYTHON3_LIB_PATH, - False - ) - _tpl(repository_ctx, "BUILD") - -python_configure = repository_rule( - implementation = _python_autoconf_impl, - environ = [ - _BAZEL_SH, - _PYTHON3_BIN_PATH, - _PYTHON3_LIB_PATH, - ], - attrs = { - "_build_tpl": attr.label( - default = Label("//third_party/py:BUILD.tpl"), - allow_single_file = True, - ), - "_variety_tpl": attr.label( - default = Label("//third_party/py:variety.tpl"), - allow_single_file = True, - ), - }, -) -"""Detects and configures the local Python. - -It expects the system have a working Python 3 installation. - -Add the following to your WORKSPACE FILE: - -```python -python_configure(name = "local_config_python") -``` - -Args: - name: A unique name for this workspace rule. -""" diff --git a/third_party/py/variety.tpl b/third_party/py/variety.tpl deleted file mode 100644 index 0c466d6d8f0bd..0000000000000 --- a/third_party/py/variety.tpl +++ /dev/null @@ -1,26 +0,0 @@ -package(default_visibility=["//visibility:public"]) - -# To build Python C/C++ extension on Windows, we need to link to python import library pythonXY.lib -# See https://docs.python.org/3/extending/windows.html -cc_import( - name="%{VARIETY_NAME}_lib", - interface_library=select({ - "//:windows": ":%{VARIETY_NAME}_import_lib", - # A placeholder for Unix platforms which makes --no_build happy. - "//conditions:default": "not-existing.lib", - }), - system_provided=1, -) - -cc_library( - name="%{VARIETY_NAME}_headers", - hdrs=[":%{VARIETY_NAME}_include"], - deps=select({ - "//:windows": [":%{VARIETY_NAME}_lib"], - "//conditions:default": [], - }), - includes=["%{VARIETY_NAME}_include"], -) - -%{PYTHON_INCLUDE_GENRULE} -%{PYTHON_IMPORT_LIB_GENRULE} From be9dd0611665201b019e79749bb7f4ede428b192 Mon Sep 17 00:00:00 2001 From: Ana Salazar Maldonado Date: Fri, 30 Jan 2026 11:36:16 -0800 Subject: [PATCH 34/67] [TlsCredentials]: Reapply allow using a separate cert provider for root and identity certs (#41490) This PR is a reapply of[ PR#41445](https://github.com/grpc/grpc/pull/41445). A bug was introduced during the C++ TLSCredentialsOptions configuration where setting a legacy watch_root_cert or watch_identity_cert before actually setting the certificate provider would end up ignoring the legacy certificate provider. For this PR, make sure that the TLSCredentialsObject does not assign legacy providers until the TlsCredentials object is built. SecureCredentials and SecureServerCredentials use TlsCredentialsOptions::c_credentials_options() to make a deep copy of the c-core tls_credentials_object previous to buil the TlsCredentials. Closes #41490 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41490 from anniefrchz:re_apply_split_providers 6f715932b8d037bb3d87783e3fd02c71ed235a0e PiperOrigin-RevId: 863326515 --- grpc.def | 5 +- include/grpc/credentials.h | 29 ++--- .../grpcpp/security/tls_credentials_options.h | 39 +++++- .../transport/channel_creds_registry_init.cc | 15 +-- .../tls/grpc_tls_certificate_distributor.h | 6 +- .../tls/grpc_tls_credentials_options.cc | 42 +++---- .../tls/grpc_tls_credentials_options.h | 39 +++--- .../transport/tls/tls_security_connector.cc | 112 +++++++++++------ .../transport/tls/tls_security_connector.h | 8 +- .../transport/xds/xds_credentials.cc | 21 ++-- src/core/xds/grpc/xds_certificate_provider.h | 6 +- src/cpp/common/tls_credentials_options.cc | 39 ++++-- .../grpc/_cython/_cygrpc/credentials.pyx.pxi | 11 +- .../grpcio/grpc/_cython/_cygrpc/grpc.pxi | 16 +-- src/ruby/ext/grpc/rb_grpc_imports.generated.c | 10 +- src/ruby/ext/grpc/rb_grpc_imports.generated.h | 15 +-- ...tls_credentials_options_comparator_test.cc | 50 +++----- .../tls/grpc_tls_credentials_options_test.cc | 74 ++++------- .../tls/tls_security_connector_test.cc | 100 ++++++--------- test/core/end2end/fixtures/h2_tls_common.h | 16 +-- ...ls_peer_property_external_verifier_test.cc | 16 +-- .../chttp2/chttp2_server_listener_test.cc | 8 +- .../core/gen_grpc_tls_credentials_options.py | 116 +++++++++--------- 23 files changed, 404 insertions(+), 389 deletions(-) diff --git a/grpc.def b/grpc.def index 506eb0a580ca0..89ff92a031a67 100644 --- a/grpc.def +++ b/grpc.def @@ -61,10 +61,9 @@ EXPORTS grpc_tls_credentials_options_set_max_tls_version grpc_tls_credentials_options_copy grpc_tls_credentials_options_destroy - grpc_tls_credentials_options_set_certificate_provider - grpc_tls_credentials_options_watch_root_certs + grpc_tls_credentials_options_set_identity_certificate_provider + grpc_tls_credentials_options_set_root_certificate_provider grpc_tls_credentials_options_set_root_cert_name - grpc_tls_credentials_options_watch_identity_key_cert_pairs grpc_tls_credentials_options_set_identity_cert_name grpc_tls_credentials_options_set_cert_request_type grpc_tls_credentials_options_set_crl_directory diff --git a/include/grpc/credentials.h b/include/grpc/credentials.h index bc5cacc1af914..ed98dd317f9fa 100644 --- a/include/grpc/credentials.h +++ b/include/grpc/credentials.h @@ -984,27 +984,22 @@ typedef struct grpc_tls_certificate_provider grpc_tls_certificate_provider; /** * EXPERIMENTAL API - Subject to change * - * Sets the credential provider in the options. + * Sets the identity certificate provider in the options. * The |options| will implicitly take a new ref to the |provider|. */ -GRPCAPI void grpc_tls_credentials_options_set_certificate_provider( +GRPCAPI void grpc_tls_credentials_options_set_identity_certificate_provider( grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); /** * EXPERIMENTAL API - Subject to change * - * If set, gRPC stack will keep watching the root certificates with - * name |root_cert_name|. - * If this is not set on the client side, we will use the root certificates - * stored in the default system location, since client side must provide root - * certificates in TLS. - * If this is not set on the server side, we will not watch any root certificate - * updates, and assume no root certificates needed for the server(single-side - * TLS). Default root certs on the server side is not supported. + * Sets the root certificate provider in the options. + * The |options| will implicitly take a new ref to the |provider|. */ -GRPCAPI void grpc_tls_credentials_options_watch_root_certs( - grpc_tls_credentials_options* options); +GRPCAPI void grpc_tls_credentials_options_set_root_certificate_provider( + grpc_tls_credentials_options* options, + grpc_tls_certificate_provider* provider); /** * EXPERIMENTAL API - Subject to change @@ -1015,16 +1010,6 @@ GRPCAPI void grpc_tls_credentials_options_watch_root_certs( GRPCAPI void grpc_tls_credentials_options_set_root_cert_name( grpc_tls_credentials_options* options, const char* root_cert_name); -/** - * EXPERIMENTAL API - Subject to change - * - * If set, gRPC stack will keep watching the identity key-cert pairs - * with name |identity_cert_name|. - * This is required on the server side, and optional on the client side. - */ -GRPCAPI void grpc_tls_credentials_options_watch_identity_key_cert_pairs( - grpc_tls_credentials_options* options); - /** * EXPERIMENTAL API - Subject to change * diff --git a/include/grpcpp/security/tls_credentials_options.h b/include/grpcpp/security/tls_credentials_options.h index d55d2c6d655fb..b4aab82aee7a8 100644 --- a/include/grpcpp/security/tls_credentials_options.h +++ b/include/grpcpp/security/tls_credentials_options.h @@ -52,8 +52,15 @@ class TlsCredentialsOptions { // ---- Setters for member fields ---- // Sets the certificate provider used to store root certs and identity certs. + [[deprecated( + "Use set_root_certificate_provider() or " + "set_identity_certificate_provider() instead.")]] void set_certificate_provider( std::shared_ptr certificate_provider); + void set_root_certificate_provider( + std::shared_ptr certificate_provider); + void set_identity_certificate_provider( + std::shared_ptr certificate_provider); // Watches the updates of root certificates with name |root_cert_name|. // If used in TLS credentials, setting this field is optional for both the // client side and the server side. @@ -64,6 +71,7 @@ class TlsCredentialsOptions { // certificate updates, and assume no root certificates needed for the server // (in the one-side TLS scenario, the server is not required to provide root // certs). We don't support default root certs on server side. + [[deprecated("Use set_root_certificate_provider()")]] void watch_root_certs(); // Sets the name of root certificates being watched, if |watch_root_certs| is // called. If not set, an empty string will be used as the name. @@ -74,6 +82,7 @@ class TlsCredentialsOptions { // |identity_cert_name|. If used in TLS credentials, it is required to be set // on the server side, and optional for the client side(in the one-side // TLS scenario, the client is not required to provide identity certs). + [[deprecated("Use set_identity_certificate_provider()")]] void watch_identity_key_cert_pairs(); // Sets the name of identity key-cert pairs being watched, if // |watch_identity_key_cert_pairs| is called. If not set, an empty string will @@ -133,16 +142,20 @@ class TlsCredentialsOptions { grpc_tls_credentials_options* c_credentials_options() const; protected: - // Returns the internal c options. The caller does not take ownership of the - // returned pointer. + // Returns the internal c options. The caller does not take ownership of + // the returned pointer. grpc_tls_credentials_options* mutable_c_credentials_options() { return c_credentials_options_; } private: - std::shared_ptr certificate_provider_; + std::shared_ptr legacy_certificate_provider_; + std::shared_ptr root_certificate_provider_; + std::shared_ptr identity_certificate_provider_; std::shared_ptr certificate_verifier_; grpc_tls_credentials_options* c_credentials_options_ = nullptr; + bool is_watching_roots_ = false; + bool is_watching_identity_ = false; }; // Contains configurable options on the client side. @@ -169,8 +182,22 @@ class TlsChannelCredentialsOptions final : public TlsCredentialsOptions { // It is used for experimental purposes for now and it is subject to change. class TlsServerCredentialsOptions final : public TlsCredentialsOptions { public: - // Server side is required to use a provider, because server always needs to - // use identity certs. + // Server side is required to use an identity provider, because server always + // needs to use identity certs. + static absl::StatusOr Create( + std::shared_ptr + identity_certificate_provider) { + if (identity_certificate_provider == nullptr) { + return absl::InvalidArgumentError( + "identity certificate provider must be non-null"); + } + TlsServerCredentialsOptions options; + options.set_identity_certificate_provider( + std::move(identity_certificate_provider)); + return options; + } + + [[deprecated("Use Create() instead.")]] explicit TlsServerCredentialsOptions( std::shared_ptr certificate_provider) : TlsCredentialsOptions() { @@ -196,6 +223,8 @@ class TlsServerCredentialsOptions final : public TlsCredentialsOptions { void set_send_client_ca_list(bool send_client_ca_list); private: + // Default ctor, to be used by Create(). + TlsServerCredentialsOptions() = default; }; } // namespace experimental diff --git a/src/core/credentials/transport/channel_creds_registry_init.cc b/src/core/credentials/transport/channel_creds_registry_init.cc index 5ea3b0393e379..1be4723a4681a 100644 --- a/src/core/credentials/transport/channel_creds_registry_init.cc +++ b/src/core/credentials/transport/channel_creds_registry_init.cc @@ -89,14 +89,15 @@ class TlsChannelCredsFactory : public ChannelCredsFactory<> { !config->ca_certificate_file().empty()) { // TODO(gtcooke94): Expose the spiffe_bundle_map option in the XDS // bootstrap config to use here. - options->set_certificate_provider( - MakeRefCounted( - config->private_key_file(), config->certificate_file(), - config->ca_certificate_file(), /*spiffe_bundle_map_file=*/"", - config->refresh_interval().millis() / GPR_MS_PER_SEC)); + auto provider = MakeRefCounted( + config->private_key_file(), config->certificate_file(), + config->ca_certificate_file(), /*spiffe_bundle_map_file=*/"", + config->refresh_interval().millis() / GPR_MS_PER_SEC); + options->set_root_certificate_provider( + config->ca_certificate_file().empty() ? nullptr : provider); + options->set_identity_certificate_provider( + config->certificate_file().empty() ? nullptr : provider); } - options->set_watch_root_cert(!config->ca_certificate_file().empty()); - options->set_watch_identity_pair(!config->certificate_file().empty()); options->set_certificate_verifier( MakeRefCounted()); return MakeRefCounted(std::move(options)); diff --git a/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h b/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h index cf79878dd28eb..37f93855d5c3a 100644 --- a/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +++ b/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h @@ -27,20 +27,22 @@ #include #include -#include "src/core/credentials/transport/tls/spiffe_utils.h" #include "src/core/credentials/transport/tls/ssl_utils.h" #include "src/core/lib/iomgr/error.h" #include "src/core/tsi/ssl_transport_security.h" #include "src/core/util/ref_counted.h" #include "src/core/util/sync.h" #include "absl/base/thread_annotations.h" -#include "absl/strings/string_view.h" struct grpc_tls_identity_pairs { grpc_core::PemKeyCertPairList pem_key_cert_pairs; }; // TLS certificate distributor. +// TODO(anasalazar): Since there are no use-cases where we need to update root +// and identity certs as an atomic unit, the flow of the certs through the cert +// providers and to the TLS security connector can be greatly simplified. We may +// even be able to remove the distributor code completely. struct grpc_tls_certificate_distributor : public grpc_core::RefCounted { public: diff --git a/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc b/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc index 12d5c9f94f706..a72acf3be9221 100644 --- a/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +++ b/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc @@ -61,34 +61,12 @@ void grpc_tls_credentials_options_set_verify_server_cert( options->set_verify_server_cert(verify_server_cert); } -void grpc_tls_credentials_options_set_certificate_provider( - grpc_tls_credentials_options* options, - grpc_tls_certificate_provider* provider) { - GRPC_CHECK_NE(options, nullptr); - GRPC_CHECK_NE(provider, nullptr); - grpc_core::ExecCtx exec_ctx; - options->set_certificate_provider( - provider->Ref(DEBUG_LOCATION, "set_certificate_provider")); -} - -void grpc_tls_credentials_options_watch_root_certs( - grpc_tls_credentials_options* options) { - GRPC_CHECK_NE(options, nullptr); - options->set_watch_root_cert(true); -} - void grpc_tls_credentials_options_set_root_cert_name( grpc_tls_credentials_options* options, const char* root_cert_name) { GRPC_CHECK_NE(options, nullptr); options->set_root_cert_name(root_cert_name); } -void grpc_tls_credentials_options_watch_identity_key_cert_pairs( - grpc_tls_credentials_options* options) { - GRPC_CHECK_NE(options, nullptr); - options->set_watch_identity_pair(true); -} - void grpc_tls_credentials_options_set_identity_cert_name( grpc_tls_credentials_options* options, const char* identity_cert_name) { GRPC_CHECK_NE(options, nullptr); @@ -160,6 +138,26 @@ void grpc_tls_credentials_options_set_max_tls_version( options->set_max_tls_version(max_tls_version); } +void grpc_tls_credentials_options_set_identity_certificate_provider( + grpc_tls_credentials_options* options, + grpc_tls_certificate_provider* provider) { + GRPC_CHECK_NE(options, nullptr); + GRPC_CHECK_NE(provider, nullptr); + grpc_core::ExecCtx exec_ctx; + options->set_identity_certificate_provider( + provider->Ref(DEBUG_LOCATION, "set_identity_certificate_provider")); +} + +void grpc_tls_credentials_options_set_root_certificate_provider( + grpc_tls_credentials_options* options, + grpc_tls_certificate_provider* provider) { + GRPC_CHECK_NE(options, nullptr); + GRPC_CHECK_NE(provider, nullptr); + grpc_core::ExecCtx exec_ctx; + options->set_root_certificate_provider( + provider->Ref(DEBUG_LOCATION, "set_root_certificate_provider")); +} + GRPCAPI void grpc_tls_credentials_options_set_sni_override( grpc_tls_credentials_options* options, std::optional sni_override) { diff --git a/src/core/credentials/transport/tls/grpc_tls_credentials_options.h b/src/core/credentials/transport/tls/grpc_tls_credentials_options.h index 21e015609fa1d..d40b6868aa9b6 100644 --- a/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +++ b/src/core/credentials/transport/tls/grpc_tls_credentials_options.h @@ -52,20 +52,23 @@ struct grpc_tls_credentials_options return certificate_verifier_.get(); } bool check_call_host() const { return check_call_host_; } - // Returns the distributor from certificate_provider_ if it is set, nullptr otherwise. - grpc_tls_certificate_distributor* certificate_distributor() { - if (certificate_provider_ != nullptr) { return certificate_provider_->distributor().get(); } - return nullptr; - } - bool watch_root_cert() const { return watch_root_cert_; } const std::string& root_cert_name() const { return root_cert_name_; } - bool watch_identity_pair() const { return watch_identity_pair_; } const std::string& identity_cert_name() const { return identity_cert_name_; } const std::string& tls_session_key_log_file_path() const { return tls_session_key_log_file_path_; } const std::string& crl_directory() const { return crl_directory_; } // Returns the CRL Provider std::shared_ptr crl_provider() const { return crl_provider_; } bool send_client_ca_list() const { return send_client_ca_list_; } + // Returns the distributor from identity_certificate_provider_ if it is set, nullptr otherwise. + grpc_tls_certificate_distributor* identity_certificate_distributor() { + if (identity_certificate_provider_ != nullptr) { return identity_certificate_provider_->distributor().get(); } + return nullptr; + } + // Returns the distributor from root_certificate_provider_ if it is set, nullptr otherwise. + grpc_tls_certificate_distributor* root_certificate_distributor() { + if (root_certificate_provider_ != nullptr) { return root_certificate_provider_->distributor().get(); } + return nullptr; + } const std::optional& sni_override() const { return sni_override_; } // Setters for member fields. @@ -75,13 +78,8 @@ struct grpc_tls_credentials_options void set_max_tls_version(grpc_tls_version max_tls_version) { max_tls_version_ = max_tls_version; } void set_certificate_verifier(grpc_core::RefCountedPtr certificate_verifier) { certificate_verifier_ = std::move(certificate_verifier); } void set_check_call_host(bool check_call_host) { check_call_host_ = check_call_host; } - void set_certificate_provider(grpc_core::RefCountedPtr certificate_provider) { certificate_provider_ = std::move(certificate_provider); } - // If need to watch the updates of root certificates with name |root_cert_name|. The default value is false. If used in tls_credentials, it should always be set to true unless the root certificates are not needed. - void set_watch_root_cert(bool watch_root_cert) { watch_root_cert_ = watch_root_cert; } // Sets the name of root certificates being watched, if |set_watch_root_cert| is called. If not set, an empty string will be used as the name. void set_root_cert_name(std::string root_cert_name) { root_cert_name_ = std::move(root_cert_name); } - // If need to watch the updates of identity certificates with name |identity_cert_name|. The default value is false. If used in tls_credentials, it should always be set to true unless the identity key-cert pairs are not needed. - void set_watch_identity_pair(bool watch_identity_pair) { watch_identity_pair_ = watch_identity_pair; } // Sets the name of identity key-cert pairs being watched, if |set_watch_identity_pair| is called. If not set, an empty string will be used as the name. void set_identity_cert_name(std::string identity_cert_name) { identity_cert_name_ = std::move(identity_cert_name); } void set_tls_session_key_log_file_path(std::string tls_session_key_log_file_path) { tls_session_key_log_file_path_ = std::move(tls_session_key_log_file_path); } @@ -89,6 +87,8 @@ struct grpc_tls_credentials_options void set_crl_directory(std::string crl_directory) { crl_directory_ = std::move(crl_directory); } void set_crl_provider(std::shared_ptr crl_provider) { crl_provider_ = std::move(crl_provider); } void set_send_client_ca_list(bool send_client_ca_list) { send_client_ca_list_ = send_client_ca_list; } + void set_identity_certificate_provider(grpc_core::RefCountedPtr identity_certificate_provider) { identity_certificate_provider_ = std::move(identity_certificate_provider); } + void set_root_certificate_provider(grpc_core::RefCountedPtr root_certificate_provider) { root_certificate_provider_ = std::move(root_certificate_provider); } // If set to nullopt, do not override. If set to empty string, disable sending SNI. Otherwise, override SNI void set_sni_override(std::optional sni_override) { sni_override_ = std::move(sni_override); } @@ -99,15 +99,14 @@ struct grpc_tls_credentials_options max_tls_version_ == other.max_tls_version_ && (certificate_verifier_ == other.certificate_verifier_ || (certificate_verifier_ != nullptr && other.certificate_verifier_ != nullptr && certificate_verifier_->Compare(other.certificate_verifier_.get()) == 0)) && check_call_host_ == other.check_call_host_ && - (certificate_provider_ == other.certificate_provider_ || (certificate_provider_ != nullptr && other.certificate_provider_ != nullptr && certificate_provider_->Compare(other.certificate_provider_.get()) == 0)) && - watch_root_cert_ == other.watch_root_cert_ && root_cert_name_ == other.root_cert_name_ && - watch_identity_pair_ == other.watch_identity_pair_ && identity_cert_name_ == other.identity_cert_name_ && tls_session_key_log_file_path_ == other.tls_session_key_log_file_path_ && crl_directory_ == other.crl_directory_ && (crl_provider_ == other.crl_provider_) && send_client_ca_list_ == other.send_client_ca_list_ && + (identity_certificate_provider_ == other.identity_certificate_provider_ || (identity_certificate_provider_ != nullptr && other.identity_certificate_provider_ != nullptr && identity_certificate_provider_->Compare(other.identity_certificate_provider_.get()) == 0)) && + (root_certificate_provider_ == other.root_certificate_provider_ || (root_certificate_provider_ != nullptr && other.root_certificate_provider_ != nullptr && root_certificate_provider_->Compare(other.root_certificate_provider_.get()) == 0)) && sni_override_ == other.sni_override_; } @@ -118,15 +117,14 @@ struct grpc_tls_credentials_options max_tls_version_(other.max_tls_version_), certificate_verifier_(other.certificate_verifier_), check_call_host_(other.check_call_host_), - certificate_provider_(other.certificate_provider_), - watch_root_cert_(other.watch_root_cert_), root_cert_name_(other.root_cert_name_), - watch_identity_pair_(other.watch_identity_pair_), identity_cert_name_(other.identity_cert_name_), tls_session_key_log_file_path_(other.tls_session_key_log_file_path_), crl_directory_(other.crl_directory_), crl_provider_(other.crl_provider_), send_client_ca_list_(other.send_client_ca_list_), + identity_certificate_provider_(other.identity_certificate_provider_), + root_certificate_provider_(other.root_certificate_provider_), sni_override_(other.sni_override_) {} private: @@ -136,15 +134,14 @@ struct grpc_tls_credentials_options grpc_tls_version max_tls_version_ = grpc_tls_version::TLS1_3; grpc_core::RefCountedPtr certificate_verifier_; bool check_call_host_ = true; - grpc_core::RefCountedPtr certificate_provider_; - bool watch_root_cert_ = false; std::string root_cert_name_; - bool watch_identity_pair_ = false; std::string identity_cert_name_; std::string tls_session_key_log_file_path_; std::string crl_directory_; std::shared_ptr crl_provider_; bool send_client_ca_list_ = false; + grpc_core::RefCountedPtr identity_certificate_provider_; + grpc_core::RefCountedPtr root_certificate_provider_; std::optional sni_override_; }; diff --git a/src/core/credentials/transport/tls/tls_security_connector.cc b/src/core/credentials/transport/tls/tls_security_connector.cc index 8dcdba0a5f34a..75c4516a01317 100644 --- a/src/core/credentials/transport/tls/tls_security_connector.cc +++ b/src/core/credentials/transport/tls/tls_security_connector.cc @@ -291,17 +291,20 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector( SplitHostPort(target_name, &host, &port); target_name_ = std::string(host); // Create a watcher. - auto watcher_ptr = std::make_unique(this); - certificate_watcher_ = watcher_ptr.get(); - // Register the watcher with the distributor. - grpc_tls_certificate_distributor* distributor = - options_->certificate_distributor(); + auto identity_watcher_ptr = + std::make_unique(this); + auto root_watcher_ptr = std::make_unique(this); + root_certificate_watcher_ = root_watcher_ptr.get(); + identity_certificate_watcher_ = identity_watcher_ptr.get(); + bool watch_root_cert = options_->root_certificate_distributor() != nullptr; + bool watch_identity_cert = + options_->identity_certificate_distributor() != nullptr; std::optional watched_root_cert_name; - if (options_->watch_root_cert()) { + if (watch_root_cert) { watched_root_cert_name = options_->root_cert_name(); } std::optional watched_identity_cert_name; - if (options_->watch_identity_pair()) { + if (watch_identity_cert) { watched_identity_cert_name = options_->identity_cert_name(); } // We will use the root certs stored in system default locations if not @@ -310,13 +313,19 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector( // certs" is a valid case(and hence we will need to call // OnCertificatesChanged), but it requires nothing from the provider, and // hence no need to register the watcher. - bool use_default_roots = !options_->watch_root_cert(); - if (use_default_roots && !options_->watch_identity_pair()) { - watcher_ptr->OnCertificatesChanged(nullptr, std::nullopt); + if (!watch_root_cert && !watch_identity_cert) { + root_certificate_watcher_->OnCertificatesChanged(nullptr, std::nullopt); } else { - distributor->WatchTlsCertificates(std::move(watcher_ptr), - watched_root_cert_name, - watched_identity_cert_name); + if (watch_root_cert) { + options_->root_certificate_distributor()->WatchTlsCertificates( + std::move(root_watcher_ptr), watched_root_cert_name, + watched_identity_cert_name); + } + if (watch_identity_cert) { + options_->identity_certificate_distributor()->WatchTlsCertificates( + std::move(identity_watcher_ptr), watched_root_cert_name, + watched_identity_cert_name); + } } } @@ -325,10 +334,16 @@ TlsChannelSecurityConnector::~TlsChannelSecurityConnector() { tsi_ssl_session_cache_unref(ssl_session_cache_); } // Cancel all the watchers. - grpc_tls_certificate_distributor* distributor = - options_->certificate_distributor(); - if (distributor != nullptr) { - distributor->CancelTlsCertificatesWatch(certificate_watcher_); + grpc_tls_certificate_distributor* root_distributor = + options_->root_certificate_distributor(); + if (root_distributor != nullptr) { + root_distributor->CancelTlsCertificatesWatch(root_certificate_watcher_); + } + grpc_tls_certificate_distributor* identity_distributor = + options_->identity_certificate_distributor(); + if (identity_distributor != nullptr) { + identity_distributor->CancelTlsCertificatesWatch( + identity_certificate_watcher_); } if (client_handshaker_factory_ != nullptr) { tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_); @@ -449,10 +464,13 @@ void TlsChannelSecurityConnector::TlsChannelCertificateWatcher:: if (key_cert_pairs.has_value()) { security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs); } - const bool root_ready = !security_connector_->options_->watch_root_cert() || - security_connector_->root_cert_info_ != nullptr; + const bool root_ready = + security_connector_->options_->root_certificate_distributor() == + nullptr || + security_connector_->root_cert_info_ != nullptr; const bool identity_ready = - !security_connector_->options_->watch_identity_pair() || + security_connector_->options_->identity_certificate_distributor() == + nullptr || security_connector_->pem_key_cert_pair_list_.has_value(); if (root_ready && identity_ready) { if (security_connector_->UpdateHandshakerFactoryLocked() != @@ -539,7 +557,7 @@ TlsChannelSecurityConnector::UpdateHandshakerFactoryLocked() { if (pem_key_cert_pair_list_.has_value()) { pem_key_cert_pair = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_); } - bool use_default_roots = !options_->watch_root_cert(); + bool use_default_roots = options_->root_certificate_distributor() == nullptr; grpc_security_status status = grpc_ssl_tsi_client_handshaker_factory_init( pem_key_cert_pair, use_default_roots ? nullptr : root_cert_info_, skip_server_certificate_verification, @@ -586,30 +604,48 @@ TlsServerSecurityConnector::TlsServerSecurityConnector( tsi::TlsSessionKeyLoggerCache::Get(tls_session_key_log_file_path); } // Create a watcher. - auto watcher_ptr = std::make_unique(this); - certificate_watcher_ = watcher_ptr.get(); - // Register the watcher with the distributor. - grpc_tls_certificate_distributor* distributor = - options_->certificate_distributor(); + auto root_watcher_ptr = std::make_unique(this); + auto identity_watcher_ptr = + std::make_unique(this); + root_certificate_watcher_ = root_watcher_ptr.get(); + identity_certificate_watcher_ = identity_watcher_ptr.get(); + bool watch_root_cert = options_->root_certificate_distributor() != nullptr; + bool watch_identity_cert = + options_->identity_certificate_distributor() != nullptr; std::optional watched_root_cert_name; - if (options_->watch_root_cert()) { + if (watch_root_cert) { watched_root_cert_name = options_->root_cert_name(); } std::optional watched_identity_cert_name; - if (options_->watch_identity_pair()) { + if (watch_identity_cert) { watched_identity_cert_name = options_->identity_cert_name(); } - // Server side won't use default system roots at any time. - distributor->WatchTlsCertificates(std::move(watcher_ptr), - watched_root_cert_name, - watched_identity_cert_name); + // Register the watcher with the distributor. + if (watch_root_cert) { + options_->root_certificate_distributor()->WatchTlsCertificates( + std::move(root_watcher_ptr), watched_root_cert_name, + watched_identity_cert_name); + } + if (watch_identity_cert) { + options_->identity_certificate_distributor()->WatchTlsCertificates( + std::move(identity_watcher_ptr), watched_root_cert_name, + watched_identity_cert_name); + } } TlsServerSecurityConnector::~TlsServerSecurityConnector() { // Cancel all the watchers. - grpc_tls_certificate_distributor* distributor = - options_->certificate_distributor(); - distributor->CancelTlsCertificatesWatch(certificate_watcher_); + grpc_tls_certificate_distributor* root_distributor = + options_->root_certificate_distributor(); + if (root_distributor != nullptr) { + root_distributor->CancelTlsCertificatesWatch(root_certificate_watcher_); + } + grpc_tls_certificate_distributor* identity_distributor = + options_->identity_certificate_distributor(); + if (identity_distributor != nullptr) { + identity_distributor->CancelTlsCertificatesWatch( + identity_certificate_watcher_); + } if (server_handshaker_factory_ != nullptr) { tsi_ssl_server_handshaker_factory_unref(server_handshaker_factory_); } @@ -701,10 +737,12 @@ void TlsServerSecurityConnector::TlsServerCertificateWatcher:: if (key_cert_pairs.has_value()) { security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs); } - bool root_being_watched = security_connector_->options_->watch_root_cert(); + bool root_being_watched = + security_connector_->options_->root_certificate_distributor() != nullptr; bool root_has_value = security_connector_->root_cert_info_ != nullptr; bool identity_being_watched = - security_connector_->options_->watch_identity_pair(); + security_connector_->options_->identity_certificate_distributor() != + nullptr; bool identity_has_value = security_connector_->pem_key_cert_pair_list_.has_value(); if ((root_being_watched && root_has_value && identity_being_watched && diff --git a/src/core/credentials/transport/tls/tls_security_connector.h b/src/core/credentials/transport/tls/tls_security_connector.h index 9efdc235e0383..7d5eabf6f104f 100644 --- a/src/core/credentials/transport/tls/tls_security_connector.h +++ b/src/core/credentials/transport/tls/tls_security_connector.h @@ -158,7 +158,9 @@ class TlsChannelSecurityConnector final Mutex verifier_request_map_mu_; RefCountedPtr options_; grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* - certificate_watcher_ = nullptr; + root_certificate_watcher_ = nullptr; + grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* + identity_certificate_watcher_ = nullptr; std::string target_name_; std::string overridden_target_name_; tsi_ssl_client_handshaker_factory* client_handshaker_factory_ @@ -269,7 +271,9 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector { Mutex verifier_request_map_mu_; RefCountedPtr options_; grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* - certificate_watcher_ = nullptr; + root_certificate_watcher_ = nullptr; + grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface* + identity_certificate_watcher_ = nullptr; tsi_ssl_server_handshaker_factory* server_handshaker_factory_ ABSL_GUARDED_BY(mu_) = nullptr; std::optional pem_key_cert_pair_list_ diff --git a/src/core/credentials/transport/xds/xds_credentials.cc b/src/core/credentials/transport/xds/xds_credentials.cc index 6e439fec34a20..57ce337052a0d 100644 --- a/src/core/credentials/transport/xds/xds_credentials.cc +++ b/src/core/credentials/transport/xds/xds_credentials.cc @@ -175,15 +175,13 @@ XdsCredentials::create_security_connector( if (watch_root || use_system_root_certs || watch_identity) { auto tls_credentials_options = MakeRefCounted(); - if (watch_root || watch_identity) { - tls_credentials_options->set_certificate_provider( + if (watch_root) { + tls_credentials_options->set_root_certificate_provider( + xds_certificate_provider); + } + if (watch_identity) { + tls_credentials_options->set_identity_certificate_provider( xds_certificate_provider); - if (watch_root) { - tls_credentials_options->set_watch_root_cert(true); - } - if (watch_identity) { - tls_credentials_options->set_watch_identity_pair(true); - } } tls_credentials_options->set_verify_server_cert(true); auto hostname = args->GetOwnedString(GRPC_ARG_ADDRESS_NAME); @@ -233,10 +231,11 @@ XdsServerCredentials::create_security_connector(const ChannelArgs& args) { xds_certificate_provider->ProvidesIdentityCerts()) { auto tls_credentials_options = MakeRefCounted(); - tls_credentials_options->set_watch_identity_pair(true); - tls_credentials_options->set_certificate_provider(xds_certificate_provider); + tls_credentials_options->set_identity_certificate_provider( + xds_certificate_provider); if (xds_certificate_provider->ProvidesRootCerts()) { - tls_credentials_options->set_watch_root_cert(true); + tls_credentials_options->set_root_certificate_provider( + xds_certificate_provider); tls_credentials_options->set_cert_request_type( xds_certificate_provider->require_client_certificate() ? GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY diff --git a/src/core/xds/grpc/xds_certificate_provider.h b/src/core/xds/grpc/xds_certificate_provider.h index 08287ec3a2eb4..54bbd99212428 100644 --- a/src/core/xds/grpc/xds_certificate_provider.h +++ b/src/core/xds/grpc/xds_certificate_provider.h @@ -39,7 +39,11 @@ #include "absl/strings/string_view.h" namespace grpc_core { - +// TODO(roth): Now that we've changed the TLS creds API to configure different +// providers for root and identity certs, we no longer need to multiplex +// multiple providers in an XdsCertificateProvider. Consider removing this code +// and instead just passing down the relevant TLS creds configuration via a +// channel arg. class XdsCertificateProvider final : public grpc_tls_certificate_provider { public: // ctor for client side diff --git a/src/cpp/common/tls_credentials_options.cc b/src/cpp/common/tls_credentials_options.cc index 7bfb8df91f138..e7e04ca8cca99 100644 --- a/src/cpp/common/tls_credentials_options.cc +++ b/src/cpp/common/tls_credentials_options.cc @@ -50,10 +50,24 @@ TlsCredentialsOptions::TlsCredentialsOptions( void TlsCredentialsOptions::set_certificate_provider( std::shared_ptr certificate_provider) { - certificate_provider_ = certificate_provider; - if (certificate_provider_ != nullptr) { - grpc_tls_credentials_options_set_certificate_provider( - c_credentials_options_, certificate_provider_->c_provider()); + legacy_certificate_provider_ = std::move(certificate_provider); +} + +void TlsCredentialsOptions::set_root_certificate_provider( + std::shared_ptr certificate_provider) { + root_certificate_provider_ = std::move(certificate_provider); + if (root_certificate_provider_ != nullptr) { + grpc_tls_credentials_options_set_root_certificate_provider( + c_credentials_options_, root_certificate_provider_->c_provider()); + } +} + +void TlsCredentialsOptions::set_identity_certificate_provider( + std::shared_ptr certificate_provider) { + identity_certificate_provider_ = std::move(certificate_provider); + if (identity_certificate_provider_ != nullptr) { + grpc_tls_credentials_options_set_identity_certificate_provider( + c_credentials_options_, identity_certificate_provider_->c_provider()); } } @@ -63,9 +77,7 @@ void TlsCredentialsOptions::set_crl_provider( crl_provider); } -void TlsCredentialsOptions::watch_root_certs() { - grpc_tls_credentials_options_watch_root_certs(c_credentials_options_); -} +void TlsCredentialsOptions::watch_root_certs() { is_watching_roots_ = true; } void TlsCredentialsOptions::set_root_cert_name( const std::string& root_cert_name) { @@ -74,8 +86,7 @@ void TlsCredentialsOptions::set_root_cert_name( } void TlsCredentialsOptions::watch_identity_key_cert_pairs() { - grpc_tls_credentials_options_watch_identity_key_cert_pairs( - c_credentials_options_); + is_watching_identity_ = true; } void TlsCredentialsOptions::set_identity_cert_name( @@ -118,6 +129,16 @@ void TlsCredentialsOptions::set_max_tls_version(grpc_tls_version tls_version) { grpc_tls_credentials_options* TlsCredentialsOptions::c_credentials_options() const { + if (legacy_certificate_provider_ != nullptr) { + if (is_watching_roots_) { + grpc_tls_credentials_options_set_root_certificate_provider( + c_credentials_options_, legacy_certificate_provider_->c_provider()); + } + if (is_watching_identity_) { + grpc_tls_credentials_options_set_identity_certificate_provider( + c_credentials_options_, legacy_certificate_provider_->c_provider()); + } + } return grpc_tls_credentials_options_copy(c_credentials_options_); } diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi index 488a3367c5eb6..a4a54caabcd43 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi @@ -214,13 +214,14 @@ cdef class SSLChannelCredentials(ChannelCredentials): if c_pem_root_certificates != NULL or c_tls_identity_pairs != NULL: c_tls_certificate_provider = grpc_tls_certificate_provider_static_data_create( - c_pem_root_certificates, c_tls_identity_pairs) - grpc_tls_credentials_options_set_certificate_provider(c_tls_credentials_options, c_tls_certificate_provider) - grpc_tls_certificate_provider_release(c_tls_certificate_provider) + c_pem_root_certificates, c_tls_identity_pairs) if c_pem_root_certificates != NULL: - grpc_tls_credentials_options_watch_root_certs(c_tls_credentials_options) + grpc_tls_credentials_options_set_root_certificate_provider( + c_tls_credentials_options, c_tls_certificate_provider) if c_tls_identity_pairs != NULL: - grpc_tls_credentials_options_watch_identity_key_cert_pairs(c_tls_credentials_options) + grpc_tls_credentials_options_set_identity_certificate_provider( + c_tls_credentials_options, c_tls_certificate_provider) + grpc_tls_certificate_provider_release(c_tls_certificate_provider) with nogil: return grpc_tls_credentials_create(c_tls_credentials_options) diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi index 5aafce2adb138..56f2dbef2833e 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi @@ -594,8 +594,12 @@ cdef extern from "grpc/credentials.h": ctypedef struct grpc_tls_certificate_provider: # We don't care about the internals (and in fact don't know them) pass + + void grpc_tls_credentials_options_set_root_certificate_provider( + grpc_tls_credentials_options *options, + grpc_tls_certificate_provider *provider) nogil - void grpc_tls_credentials_options_set_certificate_provider( + void grpc_tls_credentials_options_set_identity_certificate_provider( grpc_tls_credentials_options *options, grpc_tls_certificate_provider *provider) nogil @@ -613,16 +617,6 @@ cdef extern from "grpc/credentials.h": grpc_tls_certificate_provider *grpc_tls_certificate_provider_static_data_create( const char *root_certificate, grpc_tls_identity_pairs *pem_key_cert_pairs) nogil - void grpc_tls_credentials_options_set_certificate_provider( - grpc_tls_credentials_options *options, - grpc_tls_certificate_provider *provider) nogil - - void grpc_tls_credentials_options_watch_root_certs( - grpc_tls_credentials_options *options) nogil - - void grpc_tls_credentials_options_watch_identity_key_cert_pairs( - grpc_tls_credentials_options *options) nogil - void grpc_tls_certificate_provider_release( grpc_tls_certificate_provider *provider) nogil diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index 3f120f2f15dfd..7c44a44b1faa4 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c @@ -84,10 +84,9 @@ grpc_tls_credentials_options_set_min_tls_version_type grpc_tls_credentials_optio grpc_tls_credentials_options_set_max_tls_version_type grpc_tls_credentials_options_set_max_tls_version_import; grpc_tls_credentials_options_copy_type grpc_tls_credentials_options_copy_import; grpc_tls_credentials_options_destroy_type grpc_tls_credentials_options_destroy_import; -grpc_tls_credentials_options_set_certificate_provider_type grpc_tls_credentials_options_set_certificate_provider_import; -grpc_tls_credentials_options_watch_root_certs_type grpc_tls_credentials_options_watch_root_certs_import; +grpc_tls_credentials_options_set_identity_certificate_provider_type grpc_tls_credentials_options_set_identity_certificate_provider_import; +grpc_tls_credentials_options_set_root_certificate_provider_type grpc_tls_credentials_options_set_root_certificate_provider_import; grpc_tls_credentials_options_set_root_cert_name_type grpc_tls_credentials_options_set_root_cert_name_import; -grpc_tls_credentials_options_watch_identity_key_cert_pairs_type grpc_tls_credentials_options_watch_identity_key_cert_pairs_import; grpc_tls_credentials_options_set_identity_cert_name_type grpc_tls_credentials_options_set_identity_cert_name_import; grpc_tls_credentials_options_set_cert_request_type_type grpc_tls_credentials_options_set_cert_request_type_import; grpc_tls_credentials_options_set_crl_directory_type grpc_tls_credentials_options_set_crl_directory_import; @@ -371,10 +370,9 @@ void grpc_rb_load_imports(HMODULE library) { grpc_tls_credentials_options_set_max_tls_version_import = (grpc_tls_credentials_options_set_max_tls_version_type) GetProcAddress(library, "grpc_tls_credentials_options_set_max_tls_version"); grpc_tls_credentials_options_copy_import = (grpc_tls_credentials_options_copy_type) GetProcAddress(library, "grpc_tls_credentials_options_copy"); grpc_tls_credentials_options_destroy_import = (grpc_tls_credentials_options_destroy_type) GetProcAddress(library, "grpc_tls_credentials_options_destroy"); - grpc_tls_credentials_options_set_certificate_provider_import = (grpc_tls_credentials_options_set_certificate_provider_type) GetProcAddress(library, "grpc_tls_credentials_options_set_certificate_provider"); - grpc_tls_credentials_options_watch_root_certs_import = (grpc_tls_credentials_options_watch_root_certs_type) GetProcAddress(library, "grpc_tls_credentials_options_watch_root_certs"); + grpc_tls_credentials_options_set_identity_certificate_provider_import = (grpc_tls_credentials_options_set_identity_certificate_provider_type) GetProcAddress(library, "grpc_tls_credentials_options_set_identity_certificate_provider"); + grpc_tls_credentials_options_set_root_certificate_provider_import = (grpc_tls_credentials_options_set_root_certificate_provider_type) GetProcAddress(library, "grpc_tls_credentials_options_set_root_certificate_provider"); grpc_tls_credentials_options_set_root_cert_name_import = (grpc_tls_credentials_options_set_root_cert_name_type) GetProcAddress(library, "grpc_tls_credentials_options_set_root_cert_name"); - grpc_tls_credentials_options_watch_identity_key_cert_pairs_import = (grpc_tls_credentials_options_watch_identity_key_cert_pairs_type) GetProcAddress(library, "grpc_tls_credentials_options_watch_identity_key_cert_pairs"); grpc_tls_credentials_options_set_identity_cert_name_import = (grpc_tls_credentials_options_set_identity_cert_name_type) GetProcAddress(library, "grpc_tls_credentials_options_set_identity_cert_name"); grpc_tls_credentials_options_set_cert_request_type_import = (grpc_tls_credentials_options_set_cert_request_type_type) GetProcAddress(library, "grpc_tls_credentials_options_set_cert_request_type"); grpc_tls_credentials_options_set_crl_directory_import = (grpc_tls_credentials_options_set_crl_directory_type) GetProcAddress(library, "grpc_tls_credentials_options_set_crl_directory"); diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index 1ea52e91a1e43..0aa341073eaf0 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -228,18 +228,15 @@ extern grpc_tls_credentials_options_copy_type grpc_tls_credentials_options_copy_ typedef void(*grpc_tls_credentials_options_destroy_type)(grpc_tls_credentials_options* options); extern grpc_tls_credentials_options_destroy_type grpc_tls_credentials_options_destroy_import; #define grpc_tls_credentials_options_destroy grpc_tls_credentials_options_destroy_import -typedef void(*grpc_tls_credentials_options_set_certificate_provider_type)(grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); -extern grpc_tls_credentials_options_set_certificate_provider_type grpc_tls_credentials_options_set_certificate_provider_import; -#define grpc_tls_credentials_options_set_certificate_provider grpc_tls_credentials_options_set_certificate_provider_import -typedef void(*grpc_tls_credentials_options_watch_root_certs_type)(grpc_tls_credentials_options* options); -extern grpc_tls_credentials_options_watch_root_certs_type grpc_tls_credentials_options_watch_root_certs_import; -#define grpc_tls_credentials_options_watch_root_certs grpc_tls_credentials_options_watch_root_certs_import +typedef void(*grpc_tls_credentials_options_set_identity_certificate_provider_type)(grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); +extern grpc_tls_credentials_options_set_identity_certificate_provider_type grpc_tls_credentials_options_set_identity_certificate_provider_import; +#define grpc_tls_credentials_options_set_identity_certificate_provider grpc_tls_credentials_options_set_identity_certificate_provider_import +typedef void(*grpc_tls_credentials_options_set_root_certificate_provider_type)(grpc_tls_credentials_options* options, grpc_tls_certificate_provider* provider); +extern grpc_tls_credentials_options_set_root_certificate_provider_type grpc_tls_credentials_options_set_root_certificate_provider_import; +#define grpc_tls_credentials_options_set_root_certificate_provider grpc_tls_credentials_options_set_root_certificate_provider_import typedef void(*grpc_tls_credentials_options_set_root_cert_name_type)(grpc_tls_credentials_options* options, const char* root_cert_name); extern grpc_tls_credentials_options_set_root_cert_name_type grpc_tls_credentials_options_set_root_cert_name_import; #define grpc_tls_credentials_options_set_root_cert_name grpc_tls_credentials_options_set_root_cert_name_import -typedef void(*grpc_tls_credentials_options_watch_identity_key_cert_pairs_type)(grpc_tls_credentials_options* options); -extern grpc_tls_credentials_options_watch_identity_key_cert_pairs_type grpc_tls_credentials_options_watch_identity_key_cert_pairs_import; -#define grpc_tls_credentials_options_watch_identity_key_cert_pairs grpc_tls_credentials_options_watch_identity_key_cert_pairs_import typedef void(*grpc_tls_credentials_options_set_identity_cert_name_type)(grpc_tls_credentials_options* options, const char* identity_cert_name); extern grpc_tls_credentials_options_set_identity_cert_name_type grpc_tls_credentials_options_set_identity_cert_name_import; #define grpc_tls_credentials_options_set_identity_cert_name grpc_tls_credentials_options_set_identity_cert_name_import diff --git a/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc b/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc index f19a1330f34b8..cbf4ae1a061c4 100644 --- a/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc +++ b/test/core/credentials/transport/tls/grpc_tls_credentials_options_comparator_test.cc @@ -92,26 +92,6 @@ TEST(TlsCredentialsOptionsComparatorTest, DifferentCheckCallHost) { delete options_1; delete options_2; } -TEST(TlsCredentialsOptionsComparatorTest, DifferentCertificateProvider) { - auto* options_1 = grpc_tls_credentials_options_create(); - auto* options_2 = grpc_tls_credentials_options_create(); - options_1->set_certificate_provider(MakeRefCounted("root_cert_1", PemKeyCertPairList())); - options_2->set_certificate_provider(MakeRefCounted("root_cert_2", PemKeyCertPairList())); - EXPECT_FALSE(*options_1 == *options_2); - EXPECT_FALSE(*options_2 == *options_1); - delete options_1; - delete options_2; -} -TEST(TlsCredentialsOptionsComparatorTest, DifferentWatchRootCert) { - auto* options_1 = grpc_tls_credentials_options_create(); - auto* options_2 = grpc_tls_credentials_options_create(); - options_1->set_watch_root_cert(false); - options_2->set_watch_root_cert(true); - EXPECT_FALSE(*options_1 == *options_2); - EXPECT_FALSE(*options_2 == *options_1); - delete options_1; - delete options_2; -} TEST(TlsCredentialsOptionsComparatorTest, DifferentRootCertName) { auto* options_1 = grpc_tls_credentials_options_create(); auto* options_2 = grpc_tls_credentials_options_create(); @@ -122,16 +102,6 @@ TEST(TlsCredentialsOptionsComparatorTest, DifferentRootCertName) { delete options_1; delete options_2; } -TEST(TlsCredentialsOptionsComparatorTest, DifferentWatchIdentityPair) { - auto* options_1 = grpc_tls_credentials_options_create(); - auto* options_2 = grpc_tls_credentials_options_create(); - options_1->set_watch_identity_pair(false); - options_2->set_watch_identity_pair(true); - EXPECT_FALSE(*options_1 == *options_2); - EXPECT_FALSE(*options_2 == *options_1); - delete options_1; - delete options_2; -} TEST(TlsCredentialsOptionsComparatorTest, DifferentIdentityCertName) { auto* options_1 = grpc_tls_credentials_options_create(); auto* options_2 = grpc_tls_credentials_options_create(); @@ -182,6 +152,26 @@ TEST(TlsCredentialsOptionsComparatorTest, DifferentSendClientCaListValues) { delete options_1; delete options_2; } +TEST(TlsCredentialsOptionsComparatorTest, DifferentIdentityCertificateProvider) { + auto* options_1 = grpc_tls_credentials_options_create(); + auto* options_2 = grpc_tls_credentials_options_create(); + options_1->set_identity_certificate_provider(MakeRefCounted("root_cert_1", PemKeyCertPairList())); + options_2->set_identity_certificate_provider(MakeRefCounted("root_cert_2", PemKeyCertPairList())); + EXPECT_FALSE(*options_1 == *options_2); + EXPECT_FALSE(*options_2 == *options_1); + delete options_1; + delete options_2; +} +TEST(TlsCredentialsOptionsComparatorTest, DifferentRootCertificateProvider) { + auto* options_1 = grpc_tls_credentials_options_create(); + auto* options_2 = grpc_tls_credentials_options_create(); + options_1->set_root_certificate_provider(MakeRefCounted("root_cert_1", PemKeyCertPairList())); + options_2->set_root_certificate_provider(MakeRefCounted("root_cert_2", PemKeyCertPairList())); + EXPECT_FALSE(*options_1 == *options_2); + EXPECT_FALSE(*options_2 == *options_1); + delete options_1; + delete options_2; +} TEST(TlsCredentialsOptionsComparatorTest, DifferentSniOverride) { auto* options_1 = grpc_tls_credentials_options_create(); auto* options_2 = grpc_tls_credentials_options_create(); diff --git a/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc b/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc index efd392111c8dd..15ca10ee66160 100644 --- a/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc +++ b/test/core/credentials/transport/tls/grpc_tls_credentials_options_test.cc @@ -107,9 +107,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -128,8 +127,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -148,8 +146,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -166,8 +163,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -184,9 +180,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type( GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); auto credentials = MakeRefCounted(options); @@ -205,8 +200,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -224,8 +218,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -246,9 +239,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -267,8 +259,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", "", CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -287,8 +278,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, "", /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -305,8 +295,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", "", INVALID_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -324,9 +313,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type( GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); auto credentials = MakeRefCounted(options); @@ -345,8 +333,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( SERVER_KEY_PATH, SERVER_CERT_PATH, "", /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -364,8 +351,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( "", "", CA_CERT_PATH, /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -381,8 +367,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto options = MakeRefCounted(); auto provider = MakeRefCounted( INVALID_PATH, INVALID_PATH, "", /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(provider); options->set_cert_request_type(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); @@ -409,9 +394,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( tmp_identity_key.name(), tmp_identity_cert.name(), tmp_root_cert.name(), /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -459,9 +443,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, auto provider = MakeRefCounted( tmp_identity_key->name(), tmp_identity_cert->name(), tmp_root_cert->name(), /*spiffe_bundle_map_file=*/"", 1); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); ChannelArgs new_args; @@ -533,8 +516,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, ServerOptionsWithExternalVerifier) { // On server side we have to set the provider providing identity certs. auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); auto connector = credentials->create_security_connector(ChannelArgs()); @@ -572,8 +554,7 @@ TEST_F(GrpcTlsCredentialsOptionsTest, // On server side we have to set the provider providing identity certs. auto provider = MakeRefCounted( root_cert_, PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); ASSERT_NE(credentials, nullptr); auto connector = credentials->create_security_connector(ChannelArgs()); @@ -603,9 +584,8 @@ TEST_F(GrpcTlsCredentialsOptionsTest, CrlProviderWithServerCredentials) { auto options = MakeRefCounted(); auto provider = MakeRefCounted( root_cert_, MakeCertKeyPairs(private_key_.c_str(), cert_chain_.c_str())); - options->set_certificate_provider(std::move(provider)); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_cert_request_type( GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); auto crl_provider = experimental::CreateStaticCrlProvider({}); diff --git a/test/core/credentials/transport/tls/tls_security_connector_test.cc b/test/core/credentials/transport/tls/tls_security_connector_test.cc index fd2d821b17da1..218c68bb8738f 100644 --- a/test/core/credentials/transport/tls/tls_security_connector_test.cc +++ b/test/core/credentials/transport/tls/tls_security_connector_test.cc @@ -141,9 +141,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -191,8 +190,7 @@ TEST_F(TlsSecurityConnectorTest, // Create options only watching for identity certificates. RefCountedPtr root_options = MakeRefCounted(); - root_options->set_certificate_provider(provider); - root_options->set_watch_identity_pair(true); + root_options->set_identity_certificate_provider(std::move(provider)); root_options->set_identity_cert_name(kIdentityCertName); RefCountedPtr root_credential = MakeRefCounted(root_options); @@ -223,8 +221,7 @@ TEST_F(TlsSecurityConnectorTest, // Create options only watching for root certificates. RefCountedPtr root_options = MakeRefCounted(); - root_options->set_certificate_provider(provider); - root_options->set_watch_root_cert(true); + root_options->set_root_certificate_provider(std::move(provider)); root_options->set_root_cert_name(kRootCertName); RefCountedPtr root_credential = MakeRefCounted(root_options); @@ -253,9 +250,8 @@ TEST_F(TlsSecurityConnectorTest, // available at distributor right now. RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -287,9 +283,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -433,8 +428,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -459,8 +453,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(provider); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -469,10 +462,10 @@ TEST_F(TlsSecurityConnectorTest, credential->create_security_connector(nullptr, kTargetName, &connector_args); auto other_options = MakeRefCounted(); - other_options->set_certificate_provider(provider); - other_options->set_watch_root_cert(true); + other_options->set_root_certificate_provider(provider); + other_options->set_identity_certificate_provider(std::move(provider)); other_options->set_root_cert_name(kRootCertName); - other_options->set_watch_identity_pair(true); + other_options->set_identity_cert_name(kIdentityCertName); RefCountedPtr other_credential = MakeRefCounted(other_options); ChannelArgs other_connector_args; @@ -492,8 +485,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -521,8 +513,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); + options->set_root_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -771,9 +762,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -808,8 +798,7 @@ TEST_F(TlsSecurityConnectorTest, // Create options only watching for identity certificates. RefCountedPtr identity_options = MakeRefCounted(); - identity_options->set_certificate_provider(provider); - identity_options->set_watch_identity_pair(true); + identity_options->set_identity_certificate_provider(std::move(provider)); identity_options->set_identity_cert_name(kIdentityCertName); RefCountedPtr identity_credential = MakeRefCounted(identity_options); @@ -840,9 +829,8 @@ TEST_F(TlsSecurityConnectorTest, // available at distributor right now. RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -873,9 +861,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -924,8 +911,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -946,8 +932,7 @@ TEST_F(TlsSecurityConnectorTest, RefCountedPtr provider = MakeRefCounted(distributor); auto options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = MakeRefCounted(options); @@ -976,8 +961,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier.Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1007,8 +991,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier.Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1042,8 +1025,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier->Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1075,8 +1057,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier->Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1112,8 +1093,7 @@ TEST_F(TlsSecurityConnectorTest, options->set_certificate_verifier(core_external_verifier.Ref()); auto provider = MakeRefCounted("", PemKeyCertPairList()); - options->set_certificate_provider(std::move(provider)); - options->set_watch_identity_pair(true); + options->set_identity_certificate_provider(std::move(provider)); auto credentials = MakeRefCounted(options); auto connector = credentials->create_security_connector(ChannelArgs()); // Construct a basic TSI Peer. @@ -1150,9 +1130,8 @@ TEST_F( MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1186,9 +1165,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1226,9 +1204,8 @@ TEST_F( MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1261,9 +1238,8 @@ TEST_F(TlsSecurityConnectorTest, MakeRefCounted(distributor); RefCountedPtr options = MakeRefCounted(); - options->set_certificate_provider(provider); - options->set_watch_root_cert(true); - options->set_watch_identity_pair(true); + options->set_root_certificate_provider(provider); + options->set_identity_certificate_provider(std::move(provider)); options->set_root_cert_name(kRootCertName); options->set_identity_cert_name(kIdentityCertName); RefCountedPtr credential = @@ -1300,4 +1276,4 @@ int main(int argc, char** argv) { int ret = RUN_ALL_TESTS(); grpc_shutdown(); return ret; -} +} \ No newline at end of file diff --git a/test/core/end2end/fixtures/h2_tls_common.h b/test/core/end2end/fixtures/h2_tls_common.h index eb32a636bdf2c..bf338cbb3f408 100644 --- a/test/core/end2end/fixtures/h2_tls_common.h +++ b/test/core/end2end/fixtures/h2_tls_common.h @@ -171,10 +171,10 @@ class TlsFixture : public SecureFixture { options->set_min_tls_version(tls_version_); options->set_max_tls_version(tls_version_); // Set credential provider. - grpc_tls_credentials_options_set_certificate_provider(options, - client_provider_); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); + grpc_tls_credentials_options_set_root_certificate_provider( + options, client_provider_); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, client_provider_); // Set credential verifier. grpc_tls_credentials_options_set_certificate_verifier(options, client_verifier_); @@ -191,10 +191,10 @@ class TlsFixture : public SecureFixture { options->set_min_tls_version(tls_version_); options->set_max_tls_version(tls_version_); // Set credential provider. - grpc_tls_credentials_options_set_certificate_provider(options, - server_provider_); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); + grpc_tls_credentials_options_set_root_certificate_provider( + options, server_provider_); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, server_provider_); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); diff --git a/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc b/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc index e7de3e61fa95e..5dba34c5ebfde 100644 --- a/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc +++ b/test/core/end2end/h2_tls_peer_property_external_verifier_test.cc @@ -75,10 +75,10 @@ grpc_server* server_create(grpc_completion_queue* cq, const char* server_addr, server_cert.c_str()); *server_provider = grpc_tls_certificate_provider_static_data_create( ca_cert.c_str(), server_pairs); - grpc_tls_credentials_options_set_certificate_provider(options, - *server_provider); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); + grpc_tls_credentials_options_set_root_certificate_provider(options, + *server_provider); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, *server_provider); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); @@ -116,10 +116,10 @@ grpc_channel* client_create(const char* server_addr, *client_provider = grpc_tls_certificate_provider_static_data_create( ca_cert.c_str(), client_pairs); - grpc_tls_credentials_options_set_certificate_provider(options, - *client_provider); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); + grpc_tls_credentials_options_set_root_certificate_provider(options, + *client_provider); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, *client_provider); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); diff --git a/test/core/transport/chttp2/chttp2_server_listener_test.cc b/test/core/transport/chttp2/chttp2_server_listener_test.cc index ed5552af00b59..8f744fdaecaa4 100644 --- a/test/core/transport/chttp2/chttp2_server_listener_test.cc +++ b/test/core/transport/chttp2/chttp2_server_listener_test.cc @@ -310,11 +310,11 @@ RefCountedPtr CreateSecureServerCredentials() { grpc_tls_certificate_provider* server_provider = grpc_tls_certificate_provider_static_data_create(ca_cert.c_str(), server_pairs); - grpc_tls_credentials_options_set_certificate_provider(options, - server_provider); + grpc_tls_credentials_options_set_root_certificate_provider(options, + server_provider); + grpc_tls_credentials_options_set_identity_certificate_provider( + options, server_provider); grpc_tls_certificate_provider_release(server_provider); - grpc_tls_credentials_options_watch_root_certs(options); - grpc_tls_credentials_options_watch_identity_key_cert_pairs(options); // Set client certificate request type. grpc_tls_credentials_options_set_cert_request_type( options, GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); diff --git a/tools/codegen/core/gen_grpc_tls_credentials_options.py b/tools/codegen/core/gen_grpc_tls_credentials_options.py index 6382620f7c63a..e409036ea6103 100755 --- a/tools/codegen/core/gen_grpc_tls_credentials_options.py +++ b/tools/codegen/core/gen_grpc_tls_credentials_options.py @@ -115,49 +115,6 @@ class DataMember: test_value_1="false", test_value_2="true", ), - DataMember( - name="certificate_provider", - type="grpc_core::RefCountedPtr", - getter_comment=( - "Returns the distributor from certificate_provider_ if it is set," - " nullptr otherwise." - ), - override_getter="""grpc_tls_certificate_distributor* certificate_distributor() { - if (certificate_provider_ != nullptr) { return certificate_provider_->distributor().get(); } - return nullptr; - }""", - setter_move_semantics=True, - special_comparator=( - "(certificate_provider_ == other.certificate_provider_ ||" - " (certificate_provider_ != nullptr && other.certificate_provider_" - " != nullptr &&" - " certificate_provider_->Compare(other.certificate_provider_.get())" - " == 0))" - ), - test_name="DifferentCertificateProvider", - test_value_1=( - 'MakeRefCounted("root_cert_1",' - " PemKeyCertPairList())" - ), - test_value_2=( - 'MakeRefCounted("root_cert_2",' - " PemKeyCertPairList())" - ), - ), - DataMember( - name="watch_root_cert", - type="bool", - default_initializer="false", - setter_comment=( - "If need to watch the updates of root certificates with name" - " |root_cert_name|. The default value is false. If used in" - " tls_credentials, it should always be set to true unless the root" - " certificates are not needed." - ), - test_name="DifferentWatchRootCert", - test_value_1="false", - test_value_2="true", - ), DataMember( name="root_cert_name", type="std::string", @@ -172,20 +129,6 @@ class DataMember: test_value_1='"root_cert_name_1"', test_value_2='"root_cert_name_2"', ), - DataMember( - name="watch_identity_pair", - type="bool", - default_initializer="false", - setter_comment=( - "If need to watch the updates of identity certificates with name" - " |identity_cert_name|. The default value is false. If used in" - " tls_credentials, it should always be set to true unless the" - " identity key-cert pairs are not needed." - ), - test_name="DifferentWatchIdentityPair", - test_value_1="false", - test_value_2="true", - ), DataMember( name="identity_cert_name", type="std::string", @@ -242,6 +185,65 @@ class DataMember: test_value_1="false", test_value_2="true", ), + DataMember( + name="identity_certificate_provider", + type="grpc_core::RefCountedPtr", + getter_comment=( + "Returns the distributor from identity_certificate_provider_ if it" + " is set, nullptr otherwise." + ), + override_getter="""grpc_tls_certificate_distributor* identity_certificate_distributor() { + if (identity_certificate_provider_ != nullptr) { return identity_certificate_provider_->distributor().get(); } + return nullptr; + }""", + setter_move_semantics=True, + special_comparator=( + "(identity_certificate_provider_ ==" + " other.identity_certificate_provider_ ||" + " (identity_certificate_provider_ != nullptr &&" + " other.identity_certificate_provider_ != nullptr &&" + " identity_certificate_provider_->Compare(other.identity_certificate_provider_.get())" + " == 0))" + ), + test_name="DifferentIdentityCertificateProvider", + test_value_1=( + 'MakeRefCounted("root_cert_1",' + " PemKeyCertPairList())" + ), + test_value_2=( + 'MakeRefCounted("root_cert_2",' + " PemKeyCertPairList())" + ), + ), + DataMember( + name="root_certificate_provider", + type="grpc_core::RefCountedPtr", + getter_comment=( + "Returns the distributor from root_certificate_provider_ if it is" + " set, nullptr otherwise." + ), + override_getter="""grpc_tls_certificate_distributor* root_certificate_distributor() { + if (root_certificate_provider_ != nullptr) { return root_certificate_provider_->distributor().get(); } + return nullptr; + }""", + setter_move_semantics=True, + special_comparator=( + "(root_certificate_provider_ == other.root_certificate_provider_ ||" + " (root_certificate_provider_ != nullptr &&" + " other.root_certificate_provider_ != nullptr &&" + " root_certificate_provider_->Compare(other.root_certificate_provider_.get())" + " == 0))" + ), + test_name="DifferentRootCertificateProvider", + test_value_1=( + 'MakeRefCounted("root_cert_1",' + " PemKeyCertPairList())" + ), + test_value_2=( + 'MakeRefCounted("root_cert_2",' + " PemKeyCertPairList())" + ), + ), DataMember( name="sni_override", type="std::optional", From 5903268b8ae9c6e39b7264488a0998c81469a33d Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 30 Jan 2026 12:26:31 -0800 Subject: [PATCH 35/67] Introduce MutateSendTrailingMetadata to CallTracerInterface. This change adds a new method `MutateSendTrailingMetadata` to the CallTracerInterface. The existing `RecordSendTrailingMetadata` is modified to be experiment-gated. When the `call_tracer_send_trailing_metadata_is_an_annotation` experiment is enabled, `RecordSendTrailingMetadata` will record a new `SendTrailingMetadataAnnotation` and call `MutateSendTrailingMetadata`. Otherwise, it will continue to call the old `RecordSendTrailingMetadata` implementation, which now internally calls `MutateSendTrailingMetadata` in most concrete implementations. This refactoring is part of a larger effort to separate immutable recording from mutable operations in the CallTracer API. PiperOrigin-RevId: 863345740 --- bazel/experiments.bzl | 1 + .../chttp2/transport/call_tracer_wrapper.h | 5 +++ src/core/lib/experiments/experiments.cc | 30 +++++++++++++++ src/core/lib/experiments/experiments.h | 15 ++++++++ src/core/lib/experiments/experiments.yaml | 5 +++ src/core/telemetry/call_tracer.cc | 37 +++++++++++++++++++ src/core/telemetry/call_tracer.h | 23 ++++++++++-- .../filters/census/open_census_call_tracer.h | 7 ++++ .../ext/filters/census/server_call_tracer.cc | 19 +++++++--- src/cpp/ext/otel/otel_client_call_tracer.cc | 10 +++-- src/cpp/ext/otel/otel_client_call_tracer.h | 6 +++ src/cpp/ext/otel/otel_server_call_tracer.cc | 19 +++++++--- src/cpp/ext/otel/otel_server_call_tracer.h | 4 +- .../grpc_observability/client_call_tracer.h | 6 +++ .../grpc_observability/server_call_tracer.cc | 16 ++++++-- .../grpc_observability/server_call_tracer.h | 2 + test/core/end2end/tests/http2_stats.cc | 10 +++++ test/core/test_util/fake_stats_plugin.h | 10 +++++ test/core/transport/chttp2/BUILD | 1 + .../transport/chttp2/hpack_encoder_test.cc | 9 ++++- test/cpp/microbenchmarks/bm_chttp2_hpack.cc | 7 +++- 21 files changed, 218 insertions(+), 24 deletions(-) diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl index fbe2017a023da..1aa6ff77c30ba 100644 --- a/bazel/experiments.bzl +++ b/bazel/experiments.bzl @@ -20,6 +20,7 @@ EXPERIMENT_ENABLES = { "buffer_list_deletion_prep": "buffer_list_deletion_prep", "call_tracer_in_transport": "call_tracer_in_transport", "call_tracer_send_initial_metadata_is_an_annotation": "call_tracer_send_initial_metadata_is_an_annotation", + "call_tracer_send_trailing_metadata_is_an_annotation": "call_tracer_send_trailing_metadata_is_an_annotation", "chaotic_good_connect_deadline": "chaotic_good_connect_deadline", "chaotic_good_framing_layer": "chaotic_good_framing_layer", "chttp2_bound_write_size": "chttp2_bound_write_size", diff --git a/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h b/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h index 592c8dfca77f4..3fb03d04c57e9 100644 --- a/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +++ b/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h @@ -45,6 +45,11 @@ class Chttp2CallTracerWrapper final : public CallTracerInterface { void MutateSendInitialMetadata( grpc_metadata_batch* /*send_initial_metadata*/) override {} void RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK(!IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const Message& /*send_message*/) override {} void RecordSendCompressedMessage( diff --git a/src/core/lib/experiments/experiments.cc b/src/core/lib/experiments/experiments.cc index 2f99a1431b457..31daf043120f9 100644 --- a/src/core/lib/experiments/experiments.cc +++ b/src/core/lib/experiments/experiments.cc @@ -35,6 +35,12 @@ const char* const const char* const additional_constraints_call_tracer_send_initial_metadata_is_an_annotation = "{}"; +const char* const + description_call_tracer_send_trailing_metadata_is_an_annotation = + "Use the new annotation-based CallTracer API."; +const char* const + additional_constraints_call_tracer_send_trailing_metadata_is_an_annotation = + "{}"; const char* const description_chaotic_good_connect_deadline = "Use the deadline from the connect args in chaotic good connector"; const char* const additional_constraints_chaotic_good_connect_deadline = "{}"; @@ -253,6 +259,10 @@ const ExperimentMetadata g_experiment_metadata[] = { description_call_tracer_send_initial_metadata_is_an_annotation, additional_constraints_call_tracer_send_initial_metadata_is_an_annotation, nullptr, 0, true, true}, + {"call_tracer_send_trailing_metadata_is_an_annotation", + description_call_tracer_send_trailing_metadata_is_an_annotation, + additional_constraints_call_tracer_send_trailing_metadata_is_an_annotation, + nullptr, 0, false, true}, {"chaotic_good_connect_deadline", description_chaotic_good_connect_deadline, additional_constraints_chaotic_good_connect_deadline, nullptr, 0, true, true}, @@ -426,6 +436,12 @@ const char* const const char* const additional_constraints_call_tracer_send_initial_metadata_is_an_annotation = "{}"; +const char* const + description_call_tracer_send_trailing_metadata_is_an_annotation = + "Use the new annotation-based CallTracer API."; +const char* const + additional_constraints_call_tracer_send_trailing_metadata_is_an_annotation = + "{}"; const char* const description_chaotic_good_connect_deadline = "Use the deadline from the connect args in chaotic good connector"; const char* const additional_constraints_chaotic_good_connect_deadline = "{}"; @@ -644,6 +660,10 @@ const ExperimentMetadata g_experiment_metadata[] = { description_call_tracer_send_initial_metadata_is_an_annotation, additional_constraints_call_tracer_send_initial_metadata_is_an_annotation, nullptr, 0, true, true}, + {"call_tracer_send_trailing_metadata_is_an_annotation", + description_call_tracer_send_trailing_metadata_is_an_annotation, + additional_constraints_call_tracer_send_trailing_metadata_is_an_annotation, + nullptr, 0, false, true}, {"chaotic_good_connect_deadline", description_chaotic_good_connect_deadline, additional_constraints_chaotic_good_connect_deadline, nullptr, 0, true, true}, @@ -817,6 +837,12 @@ const char* const const char* const additional_constraints_call_tracer_send_initial_metadata_is_an_annotation = "{}"; +const char* const + description_call_tracer_send_trailing_metadata_is_an_annotation = + "Use the new annotation-based CallTracer API."; +const char* const + additional_constraints_call_tracer_send_trailing_metadata_is_an_annotation = + "{}"; const char* const description_chaotic_good_connect_deadline = "Use the deadline from the connect args in chaotic good connector"; const char* const additional_constraints_chaotic_good_connect_deadline = "{}"; @@ -1035,6 +1061,10 @@ const ExperimentMetadata g_experiment_metadata[] = { description_call_tracer_send_initial_metadata_is_an_annotation, additional_constraints_call_tracer_send_initial_metadata_is_an_annotation, nullptr, 0, true, true}, + {"call_tracer_send_trailing_metadata_is_an_annotation", + description_call_tracer_send_trailing_metadata_is_an_annotation, + additional_constraints_call_tracer_send_trailing_metadata_is_an_annotation, + nullptr, 0, false, true}, {"chaotic_good_connect_deadline", description_chaotic_good_connect_deadline, additional_constraints_chaotic_good_connect_deadline, nullptr, 0, true, true}, diff --git a/src/core/lib/experiments/experiments.h b/src/core/lib/experiments/experiments.h index 4b0b51fe08d08..c91ddd01a294f 100644 --- a/src/core/lib/experiments/experiments.h +++ b/src/core/lib/experiments/experiments.h @@ -64,6 +64,9 @@ inline bool IsCallTracerInTransportEnabled() { return true; } inline bool IsCallTracerSendInitialMetadataIsAnAnnotationEnabled() { return true; } +inline bool IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled() { + return false; +} #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_CONNECT_DEADLINE inline bool IsChaoticGoodConnectDeadlineEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER @@ -137,6 +140,9 @@ inline bool IsCallTracerInTransportEnabled() { return true; } inline bool IsCallTracerSendInitialMetadataIsAnAnnotationEnabled() { return true; } +inline bool IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled() { + return false; +} #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_CONNECT_DEADLINE inline bool IsChaoticGoodConnectDeadlineEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER @@ -210,6 +216,9 @@ inline bool IsCallTracerInTransportEnabled() { return true; } inline bool IsCallTracerSendInitialMetadataIsAnAnnotationEnabled() { return true; } +inline bool IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled() { + return false; +} #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_CONNECT_DEADLINE inline bool IsChaoticGoodConnectDeadlineEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER @@ -281,6 +290,7 @@ enum ExperimentIds { kExperimentIdBufferListDeletionPrep, kExperimentIdCallTracerInTransport, kExperimentIdCallTracerSendInitialMetadataIsAnAnnotation, + kExperimentIdCallTracerSendTrailingMetadataIsAnAnnotation, kExperimentIdChaoticGoodConnectDeadline, kExperimentIdChaoticGoodFramingLayer, kExperimentIdChttp2BoundWriteSize, @@ -345,6 +355,11 @@ inline bool IsCallTracerSendInitialMetadataIsAnAnnotationEnabled() { return IsExperimentEnabled< kExperimentIdCallTracerSendInitialMetadataIsAnAnnotation>(); } +#define GRPC_EXPERIMENT_IS_INCLUDED_CALL_TRACER_SEND_TRAILING_METADATA_IS_AN_ANNOTATION +inline bool IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled() { + return IsExperimentEnabled< + kExperimentIdCallTracerSendTrailingMetadataIsAnAnnotation>(); +} #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_CONNECT_DEADLINE inline bool IsChaoticGoodConnectDeadlineEnabled() { return IsExperimentEnabled(); diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index 807bb8790dd2d..d0e775e209790 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -57,6 +57,11 @@ expiry: 2026/06/01 owner: ctiller@google.com test_tags: [] +- name: call_tracer_send_trailing_metadata_is_an_annotation + description: Use the new annotation-based CallTracer API. + expiry: 2026/06/01 + owner: ctiller@google.com + test_tags: [] - name: chaotic_good_connect_deadline description: Use the deadline from the connect args in chaotic good connector expiry: 2026/02/01 diff --git a/src/core/telemetry/call_tracer.cc b/src/core/telemetry/call_tracer.cc index c7f8af18781cf..6ac50db52fc9e 100644 --- a/src/core/telemetry/call_tracer.cc +++ b/src/core/telemetry/call_tracer.cc @@ -56,6 +56,21 @@ void SendInitialMetadataAnnotation::ForEachKeyValue( }); } +std::string SendTrailingMetadataAnnotation::ToString() const { + return "SendTrailingMetadata"; +} + +void SendTrailingMetadataAnnotation::ForEachKeyValue( + absl::FunctionRef f) const { + metadata_->Log([f](absl::string_view key, absl::string_view value) { + if (IsMetadataKeyAllowedInDebugOutput(key)) { + f(key, value); + } else { + f(key, "[REDACTED]"); + } + }); +} + CallTracerInterface::TransportByteSize& CallTracerInterface::TransportByteSize::operator+=( const CallTracerInterface::TransportByteSize& other) { @@ -133,6 +148,12 @@ class DelegatingClientCallTracer : public ClientCallTracerInterface { tracer->RecordSendTrailingMetadata(send_trailing_metadata); } } + void MutateSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + for (auto* tracer : tracers_) { + tracer->MutateSendTrailingMetadata(send_trailing_metadata); + } + } void RecordSendMessage(const Message& send_message) override { for (auto* tracer : tracers_) { tracer->RecordSendMessage(send_message); @@ -293,6 +314,12 @@ class DelegatingServerCallTracer : public ServerCallTracerInterface { tracer->RecordSendTrailingMetadata(send_trailing_metadata); } } + void MutateSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + for (auto* tracer : tracers_) { + tracer->MutateSendTrailingMetadata(send_trailing_metadata); + } + } void RecordSendMessage(const Message& send_message) override { for (auto* tracer : tracers_) { tracer->RecordSendMessage(send_message); @@ -387,6 +414,16 @@ void CallTracer::RecordSendInitialMetadata( } } +void CallTracer::RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) { + if (IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()) { + RecordAnnotation(SendTrailingMetadataAnnotation(send_trailing_metadata)); + interface_->MutateSendTrailingMetadata(send_trailing_metadata); + } else { + interface_->RecordSendTrailingMetadata(send_trailing_metadata); + } +} + void SetClientCallTracer(Arena* arena, absl::Span tracer) { GRPC_DCHECK_EQ(arena->GetContext(), nullptr); diff --git a/src/core/telemetry/call_tracer.h b/src/core/telemetry/call_tracer.h index 34ed1fec351f9..0050f8ba06079 100644 --- a/src/core/telemetry/call_tracer.h +++ b/src/core/telemetry/call_tracer.h @@ -71,6 +71,7 @@ class CallTracerAnnotationInterface { kMetadataSizes, kHttpTransport, kSendInitialMetadata, + kSendTrailingMetadata, kDoNotUse_MustBeLast, }; @@ -121,6 +122,22 @@ class SendInitialMetadataAnnotation final const grpc_metadata_batch* metadata_; }; +class SendTrailingMetadataAnnotation final + : public CallTracerAnnotationInterface::Annotation { + public: + explicit SendTrailingMetadataAnnotation(grpc_metadata_batch* metadata) + : Annotation(CallTracerAnnotationInterface::AnnotationType:: + kSendTrailingMetadata), + metadata_(metadata) {} + const grpc_metadata_batch* metadata() const { return metadata_; } + std::string ToString() const override; + void ForEachKeyValue( + absl::FunctionRef f) const override; + + private: + const grpc_metadata_batch* metadata_; +}; + // The base class for CallAttemptTracer and ServerCallTracer. // TODO(yashykt): What's a better name for this? class CallTracerInterface : public CallTracerAnnotationInterface { @@ -134,6 +151,8 @@ class CallTracerInterface : public CallTracerAnnotationInterface { grpc_metadata_batch* send_initial_metadata) = 0; virtual void RecordSendTrailingMetadata( grpc_metadata_batch* send_trailing_metadata) = 0; + virtual void MutateSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) = 0; virtual void RecordSendMessage(const Message& send_message) = 0; // Only invoked if message was actually compressed. virtual void RecordSendCompressedMessage( @@ -306,9 +325,7 @@ class CallTracer : public CallSpan { : CallSpan(interface), interface_(interface) {} void RecordSendInitialMetadata(grpc_metadata_batch* send_initial_metadata); - void RecordSendTrailingMetadata(grpc_metadata_batch* send_trailing_metadata) { - interface_->RecordSendTrailingMetadata(send_trailing_metadata); - } + void RecordSendTrailingMetadata(grpc_metadata_batch* send_trailing_metadata); void RecordSendMessage(const Message& send_message) { interface_->RecordSendMessage(send_message); } diff --git a/src/cpp/ext/filters/census/open_census_call_tracer.h b/src/cpp/ext/filters/census/open_census_call_tracer.h index 0e1598905ae71..ece3c1c7cd8c9 100644 --- a/src/cpp/ext/filters/census/open_census_call_tracer.h +++ b/src/cpp/ext/filters/census/open_census_call_tracer.h @@ -33,6 +33,7 @@ #include "opencensus/trace/span_id.h" #include "opencensus/trace/trace_id.h" #include "src/core/call/metadata_batch.h" +#include "src/core/lib/experiments/experiments.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/resource_quota/arena.h" #include "src/core/lib/slice/slice.h" @@ -84,6 +85,12 @@ class OpenCensusCallTracer : public grpc_core::ClientCallTracerInterface { void MutateSendInitialMetadata( grpc_metadata_batch* send_initial_metadata) override; void RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK( + !grpc_core::IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const grpc_core::Message& send_message) override; void RecordSendCompressedMessage( diff --git a/src/cpp/ext/filters/census/server_call_tracer.cc b/src/cpp/ext/filters/census/server_call_tracer.cc index f0bffc9a68efc..4907e412db8ef 100644 --- a/src/cpp/ext/filters/census/server_call_tracer.cc +++ b/src/cpp/ext/filters/census/server_call_tracer.cc @@ -124,6 +124,12 @@ class OpenCensusServerCallTracer : public grpc_core::ServerCallTracerInterface { grpc_metadata_batch* /*send_initial_metadata*/) override {} void RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK( + !grpc_core::IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( grpc_metadata_batch* send_trailing_metadata) override; void RecordSendMessage(const grpc_core::Message& send_message) override { @@ -176,10 +182,13 @@ class OpenCensusServerCallTracer : public grpc_core::ServerCallTracerInterface { void RecordAnnotation(const Annotation& annotation) override { if (annotation.type() == grpc_core::CallTracerAnnotationInterface:: - AnnotationType::kSendInitialMetadata) { - // Census does not have any immutable tracing for send initial metadata. - // All Census work for send initial metadata is mutation, which is handled - // in MutateSendInitialMetadata. + AnnotationType::kSendInitialMetadata || + annotation.type() == grpc_core::CallTracerAnnotationInterface:: + AnnotationType::kSendTrailingMetadata) { + // Census does not have any immutable tracing for send initial/trailing + // metadata. All Census work for send initial/trailing metadata is + // mutation, which is handled in MutateSendInitialMetadata/ + // MutateSendTrailingMetadata. return; } if (!context_.Span().IsRecording()) { @@ -243,7 +252,7 @@ void OpenCensusServerCallTracer::RecordReceivedInitialMetadata( } } -void OpenCensusServerCallTracer::RecordSendTrailingMetadata( +void OpenCensusServerCallTracer::MutateSendTrailingMetadata( grpc_metadata_batch* send_trailing_metadata) { // We need to record the time when the trailing metadata was sent to // mark the completeness of the request. diff --git a/src/cpp/ext/otel/otel_client_call_tracer.cc b/src/cpp/ext/otel/otel_client_call_tracer.cc index 19b37d32641a9..5033a4689e3dc 100644 --- a/src/cpp/ext/otel/otel_client_call_tracer.cc +++ b/src/cpp/ext/otel/otel_client_call_tracer.cc @@ -376,10 +376,12 @@ template void OpenTelemetryPluginImpl::ClientCallTracerInterface::CallAttemptTracer< UnrefBehavior>::RecordAnnotation(const Annotation& annotation) { if (annotation.type() == grpc_core::CallTracerAnnotationInterface:: - AnnotationType::kSendInitialMetadata) { - // Otel does not have any immutable tracing for send initial metadata. - // All Otel work for send initial metadata is mutation, which is handled in - // MutateSendInitialMetadata. + AnnotationType::kSendInitialMetadata || + annotation.type() == grpc_core::CallTracerAnnotationInterface:: + AnnotationType::kSendTrailingMetadata) { + // Otel does not have any immutable tracing for send initial/trailing + // metadata. All Otel work for send initial/trailing metadata is mutation, + // which is handled in MutateSendInitialMetadata/MutateSendTrailingMetadata. return; } RecordAnnotation(annotation.ToString()); diff --git a/src/cpp/ext/otel/otel_client_call_tracer.h b/src/cpp/ext/otel/otel_client_call_tracer.h index 898b75b4b3940..076a09c4c1757 100644 --- a/src/cpp/ext/otel/otel_client_call_tracer.h +++ b/src/cpp/ext/otel/otel_client_call_tracer.h @@ -78,6 +78,12 @@ class OpenTelemetryPluginImpl::ClientCallTracerInterface void MutateSendInitialMetadata( grpc_metadata_batch* send_initial_metadata) override; void RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK( + !grpc_core::IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const grpc_core::Message& send_message) override; void RecordSendCompressedMessage( diff --git a/src/cpp/ext/otel/otel_server_call_tracer.cc b/src/cpp/ext/otel/otel_server_call_tracer.cc index 3c61443fc5b86..797fa25ba4559 100644 --- a/src/cpp/ext/otel/otel_server_call_tracer.cc +++ b/src/cpp/ext/otel/otel_server_call_tracer.cc @@ -254,7 +254,14 @@ void OpenTelemetryPluginImpl::ServerCallTracerInterface:: } void OpenTelemetryPluginImpl::ServerCallTracerInterface:: - RecordSendTrailingMetadata( + RecordSendTrailingMetadata(grpc_metadata_batch* send_trailing_metadata) { + GRPC_CHECK( + !grpc_core::IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); +} + +void OpenTelemetryPluginImpl::ServerCallTracerInterface:: + MutateSendTrailingMetadata( grpc_metadata_batch* /*send_trailing_metadata*/) { // We need to record the time when the trailing metadata was sent to // mark the completeness of the request. @@ -321,10 +328,12 @@ void OpenTelemetryPluginImpl::ServerCallTracerInterface::RecordOutgoingBytes( void OpenTelemetryPluginImpl::ServerCallTracerInterface::RecordAnnotation( const Annotation& annotation) { if (annotation.type() == grpc_core::CallTracerAnnotationInterface:: - AnnotationType::kSendInitialMetadata) { - // Otel does not have any immutable tracing for send initial metadata. - // All Otel work for send initial metadata is mutation, which is handled in - // MutateSendInitialMetadata. + AnnotationType::kSendInitialMetadata || + annotation.type() == grpc_core::CallTracerAnnotationInterface:: + AnnotationType::kSendTrailingMetadata) { + // Otel does not have any immutable tracing for send initial/trailing + // metadata. All Otel work for send initial/trailing metadata is mutation, + // which is handled in MutateSendInitialMetadata/MutateSendTrailingMetadata. return; } RecordAnnotation(annotation.ToString()); diff --git a/src/cpp/ext/otel/otel_server_call_tracer.h b/src/cpp/ext/otel/otel_server_call_tracer.h index ed5f15dbc8602..5f2ae99362244 100644 --- a/src/cpp/ext/otel/otel_server_call_tracer.h +++ b/src/cpp/ext/otel/otel_server_call_tracer.h @@ -60,7 +60,9 @@ class OpenTelemetryPluginImpl::ServerCallTracerInterface grpc_metadata_batch* send_initial_metadata) override; void RecordSendTrailingMetadata( - grpc_metadata_batch* /*send_trailing_metadata*/) override; + grpc_metadata_batch* send_trailing_metadata) override; + void MutateSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override; void RecordSendMessage(const grpc_core::Message& send_message) override; void RecordSendCompressedMessage( diff --git a/src/python/grpcio_observability/grpc_observability/client_call_tracer.h b/src/python/grpcio_observability/grpc_observability/client_call_tracer.h index d338589129a82..150c5584b1255 100644 --- a/src/python/grpcio_observability/grpc_observability/client_call_tracer.h +++ b/src/python/grpcio_observability/grpc_observability/client_call_tracer.h @@ -56,6 +56,12 @@ class PythonOpenCensusCallTracer : public grpc_core::ClientCallTracerInterface { void MutateSendInitialMetadata( grpc_metadata_batch* send_initial_metadata) override; void RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK( + !grpc_core::IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const grpc_core::Message& /*send_message*/) override; void RecordSendCompressedMessage( diff --git a/src/python/grpcio_observability/grpc_observability/server_call_tracer.cc b/src/python/grpcio_observability/grpc_observability/server_call_tracer.cc index 419f099d0f6d9..215b9cc89f786 100644 --- a/src/python/grpcio_observability/grpc_observability/server_call_tracer.cc +++ b/src/python/grpcio_observability/grpc_observability/server_call_tracer.cc @@ -133,6 +133,13 @@ void PythonOpenCensusServerCallTracer::RecordReceivedInitialMetadata( void PythonOpenCensusServerCallTracer::RecordSendTrailingMetadata( grpc_metadata_batch* send_trailing_metadata) { + GRPC_CHECK( + !grpc_core::IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); +} + +void PythonOpenCensusServerCallTracer::MutateSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) { // We need to record the time when the trailing metadata was sent to // mark the completeness of the request. elapsed_time_ = absl::Now() - start_time_; @@ -260,9 +267,12 @@ void PythonOpenCensusServerCallTracer::RecordAnnotation( switch (annotation.type()) { case grpc_core::CallTracerAnnotationInterface::AnnotationType:: kSendInitialMetadata: - // Python OpenCensus does not have any immutable tracing for send initial - // metadata. All work for send initial metadata is mutation, which is - // handled in MutateSendInitialMetadata. + case grpc_core::CallTracerAnnotationInterface::AnnotationType:: + kSendTrailingMetadata: + // Python OpenCensus does not have any immutable tracing for send initial/ + // trailing metadata. All work for send initial/trailing metadata is + // mutation, which is handled in MutateSendInitialMetadata/ + // MutateSendTrailingMetadata. break; // Annotations are expensive to create. We should only create it if the // call is being sampled by default. diff --git a/src/python/grpcio_observability/grpc_observability/server_call_tracer.h b/src/python/grpcio_observability/grpc_observability/server_call_tracer.h index b3d96d6b54010..34f1c702e8e00 100644 --- a/src/python/grpcio_observability/grpc_observability/server_call_tracer.h +++ b/src/python/grpcio_observability/grpc_observability/server_call_tracer.h @@ -84,6 +84,8 @@ class PythonOpenCensusServerCallTracer void RecordSendTrailingMetadata( grpc_metadata_batch* send_trailing_metadata) override; + void MutateSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override; void RecordSendMessage(const grpc_core::Message& send_message) override; diff --git a/test/core/end2end/tests/http2_stats.cc b/test/core/end2end/tests/http2_stats.cc index 2b770e6999429..1a0a54395635f 100644 --- a/test/core/end2end/tests/http2_stats.cc +++ b/test/core/end2end/tests/http2_stats.cc @@ -157,6 +157,11 @@ class FakeCallTracer : public ClientCallTracerInterface { void MutateSendInitialMetadata( grpc_metadata_batch* /*send_initial_metadata*/) override {} void RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK(!IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const Message& /*send_message*/) override {} void RecordSendCompressedMessage( @@ -246,6 +251,11 @@ class FakeServerCallTracer : public ServerCallTracerInterface { void MutateSendInitialMetadata( grpc_metadata_batch* /*send_initial_metadata*/) override {} void RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK(!IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const Message& /*send_message*/) override {} void RecordSendCompressedMessage( diff --git a/test/core/test_util/fake_stats_plugin.h b/test/core/test_util/fake_stats_plugin.h index 6b0ae1d9fd9d6..089ed9ff98d0a 100644 --- a/test/core/test_util/fake_stats_plugin.h +++ b/test/core/test_util/fake_stats_plugin.h @@ -73,6 +73,11 @@ class FakeClientCallTracer : public ClientCallTracerInterface { void MutateSendInitialMetadata( grpc_metadata_batch* /*send_initial_metadata*/) override {} void RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK(!IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const Message& /*send_message*/) override {} void RecordSendCompressedMessage( @@ -178,6 +183,11 @@ class FakeServerCallTracer : public ServerCallTracerInterface { void MutateSendInitialMetadata( grpc_metadata_batch* /*send_initial_metadata*/) override {} void RecordSendTrailingMetadata( + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK(!IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const Message& /*send_message*/) override {} void RecordSendCompressedMessage( diff --git a/test/core/transport/chttp2/BUILD b/test/core/transport/chttp2/BUILD index 64be73575d166..22c4f06756401 100644 --- a/test/core/transport/chttp2/BUILD +++ b/test/core/transport/chttp2/BUILD @@ -466,6 +466,7 @@ grpc_cc_test( "//:ref_counted_ptr", "//src/core:arena", "//src/core:event_engine_memory_allocator", + "//src/core:experiments", "//src/core:grpc_check", "//src/core:memory_quota", "//src/core:metadata_batch", diff --git a/test/core/transport/chttp2/hpack_encoder_test.cc b/test/core/transport/chttp2/hpack_encoder_test.cc index aa5c56bdf44a8..64c3ea754cbaa 100644 --- a/test/core/transport/chttp2/hpack_encoder_test.cc +++ b/test/core/transport/chttp2/hpack_encoder_test.cc @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -35,6 +34,7 @@ #include "src/core/call/metadata_batch.h" #include "src/core/ext/transport/chttp2/transport/hpack_parser.h" #include "src/core/ext/transport/chttp2/transport/legacy_frame.h" +#include "src/core/lib/experiments/experiments.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/resource_quota/arena.h" #include "src/core/lib/resource_quota/memory_quota.h" @@ -179,7 +179,12 @@ class FakeCallTracer final : public CallTracerInterface { void MutateSendInitialMetadata( grpc_metadata_batch* /*send_initial_metadata*/) override {} void RecordSendTrailingMetadata( - grpc_metadata_batch* send_trailing_metadata) override {} + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK(!IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( + grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const Message& send_message) override {} void RecordSendCompressedMessage( const Message& send_compressed_message) override {} diff --git a/test/cpp/microbenchmarks/bm_chttp2_hpack.cc b/test/cpp/microbenchmarks/bm_chttp2_hpack.cc index e0dfba147df85..7fd667dafcd65 100644 --- a/test/cpp/microbenchmarks/bm_chttp2_hpack.cc +++ b/test/cpp/microbenchmarks/bm_chttp2_hpack.cc @@ -71,7 +71,12 @@ class FakeCallTracer final : public CallTracerInterface { void MutateSendInitialMetadata( grpc_metadata_batch* /*send_initial_metadata*/) override {} void RecordSendTrailingMetadata( - grpc_metadata_batch* send_trailing_metadata) override {} + grpc_metadata_batch* send_trailing_metadata) override { + GRPC_CHECK(!IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled()); + MutateSendTrailingMetadata(send_trailing_metadata); + } + void MutateSendTrailingMetadata( + grpc_metadata_batch* /*send_trailing_metadata*/) override {} void RecordSendMessage(const Message& send_message) override {} void RecordSendCompressedMessage( const Message& send_compressed_message) override {} From 16735c06291627fdc03bee4d0155dad8505a108e Mon Sep 17 00:00:00 2001 From: yuanweiz Date: Fri, 30 Jan 2026 14:56:01 -0800 Subject: [PATCH 36/67] Revert "[Bazel] Use Python headers from rules_python (#40660)" (#41520) This reverts commit c59942f8e21c4ff9f4a3d46b89698650131c844d. it's breaking sanity check: https://btx.cloud.google.com/invocations/e2ec8b9f-f571-4b2c-8fcc-cd7d60ecb29a/targets/github%2Fgrpc%2Frun_tests%2Fsanity_linux_dbg_native%2Ftools%2Fdistrib%2Fgen_experiments_and_format.sh;config=default/tests Closes #41520 PiperOrigin-RevId: 863405150 --- MODULE.bazel | 7 + WORKSPACE | 7 - bazel/cython_library.bzl | 4 +- bazel/grpc_python_deps.bzl | 8 + third_party/py/BUILD | 5 + third_party/py/BUILD.tpl | 30 +++ third_party/py/python_configure.bzl | 384 ++++++++++++++++++++++++++++ third_party/py/variety.tpl | 26 ++ 8 files changed, 461 insertions(+), 10 deletions(-) create mode 100644 third_party/py/BUILD create mode 100644 third_party/py/BUILD.tpl create mode 100644 third_party/py/python_configure.bzl create mode 100644 third_party/py/variety.tpl diff --git a/MODULE.bazel b/MODULE.bazel index f204efdfe4c06..ea55411605201 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -141,3 +141,10 @@ archive_override( "https://github.com/googleapis/google-cloud-cpp/archive/refs/tags/v2.35.0.tar.gz", ], ) + +# --- Python headers +# TODO(weizheyuan): Maybe replace this with python header exposed by rules_python. +# See also https://github.com/grpc/grpc/issues/24665 +python_configure = use_repo_rule("//third_party/py:python_configure.bzl", "python_configure") + +python_configure(name = "local_config_python") diff --git a/WORKSPACE b/WORKSPACE index a92661fdaeea6..1ef577e79ffee 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -115,10 +115,3 @@ bind( name = "madler_zlib", actual = "@zlib//:zlib", ) - -load("@rules_python//python:repositories.bzl", "python_register_toolchains") - -python_register_toolchains( - name = "python_3_11", - python_version = "3.11", -) diff --git a/bazel/cython_library.bzl b/bazel/cython_library.bzl index fcd76c08f9bcf..dc7f518e1105a 100644 --- a/bazel/cython_library.bzl +++ b/bazel/cython_library.bzl @@ -75,9 +75,7 @@ def pyx_library(name, deps = [], py_deps = [], srcs = [], **kwargs): cc_binary( name = shared_object_name, srcs = [stem + ".cpp"], - deps = deps + [ - "@rules_python//python/cc:current_py_cc_headers", - ], + deps = deps + ["@local_config_python//:python_headers"], defines = defines, linkshared = 1, ) diff --git a/bazel/grpc_python_deps.bzl b/bazel/grpc_python_deps.bzl index d5a0358072e4e..a07079057c11d 100644 --- a/bazel/grpc_python_deps.bzl +++ b/bazel/grpc_python_deps.bzl @@ -14,6 +14,7 @@ """Load dependencies needed to compile and test the grpc python library as a 3rd-party consumer.""" load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@com_github_grpc_grpc//third_party/py:python_configure.bzl", "python_configure") # buildifier: disable=unnamed-macro def grpc_python_deps(): @@ -26,6 +27,13 @@ def grpc_python_deps(): url = "https://github.com/bazel-contrib/rules_python/releases/download/1.6.3/rules_python-1.6.3.tar.gz", ) + python_configure(name = "local_config_python") + + native.bind( + name = "python_headers", + actual = "@local_config_python//:python_headers", + ) + # This version should be same as that in G3 http_archive( name = "typing_extensions", diff --git a/third_party/py/BUILD b/third_party/py/BUILD new file mode 100644 index 0000000000000..9d87fb885943c --- /dev/null +++ b/third_party/py/BUILD @@ -0,0 +1,5 @@ +exports_files([ + "BUILD.tpl", + "python_configure.bzl", + "variety.tpl", +]) diff --git a/third_party/py/BUILD.tpl b/third_party/py/BUILD.tpl new file mode 100644 index 0000000000000..a64eaeaac6c11 --- /dev/null +++ b/third_party/py/BUILD.tpl @@ -0,0 +1,30 @@ +# Adapted with modifications from tensorflow/third_party/py/ + +package(default_visibility=["//visibility:public"]) + +config_setting( + name="windows", + values={"cpu": "x64_windows"}, + visibility=["//visibility:public"], +) + +config_setting( + name="python3", + flag_values = {"@rules_python//python:python_version": "PY3"} +) + +cc_library( + name = "python_lib", + deps = select({ + ":python3": ["//_python3:_python3_lib"], + "//conditions:default": ["not-existing.lib"], + }) +) + +cc_library( + name = "python_headers", + deps = select({ + ":python3": ["//_python3:_python3_headers"], + "//conditions:default": ["not-existing.headers"], + }) +) diff --git a/third_party/py/python_configure.bzl b/third_party/py/python_configure.bzl new file mode 100644 index 0000000000000..6569d3e9c1f99 --- /dev/null +++ b/third_party/py/python_configure.bzl @@ -0,0 +1,384 @@ +# Adapted with modifications from tensorflow/third_party/py/ +"""Repository rule for Python autoconfiguration. + +`python_configure` depends on the following environment variables: + + * `PYTHON3_BIN_PATH`: location of python binary. + * `PYTHON3_LIB_PATH`: Location of python libraries. +""" + +_BAZEL_SH = "BAZEL_SH" +_PYTHON3_BIN_PATH = "PYTHON3_BIN_PATH" +_PYTHON3_LIB_PATH = "PYTHON3_LIB_PATH" + +_HEADERS_HELP = ( + "Are Python headers installed? Try installing " + + "python3-dev on Debian-based systems. Try python3-devel " + + "on Redhat-based systems." +) + +def _tpl(repository_ctx, tpl, substitutions = {}, out = None): + if not out: + out = tpl + repository_ctx.template( + out, + Label("//third_party/py:%s.tpl" % tpl), + substitutions, + ) + +def _fail(msg): + """Output failure message when auto configuration fails.""" + red = "\033[0;31m" + no_color = "\033[0m" + fail("%sPython Configuration Error:%s %s\n" % (red, no_color, msg)) + +def _is_windows(repository_ctx): + """Returns true if the host operating system is windows.""" + os_name = repository_ctx.os.name.lower() + return os_name.find("windows") != -1 + +def _execute( + repository_ctx, + cmdline, + error_msg = None, + error_details = None, + empty_stdout_fine = False): + """Executes an arbitrary shell command. + + Args: + repository_ctx: the repository_ctx object + cmdline: list of strings, the command to execute + error_msg: string, a summary of the error if the command fails + error_details: string, details about the error or steps to fix it + empty_stdout_fine: bool, if True, an empty stdout result is fine, otherwise + it's an error + Return: + the result of repository_ctx.execute(cmdline) + """ + result = repository_ctx.execute(cmdline) + if result.stderr or not (empty_stdout_fine or result.stdout): + _fail("\n".join([ + error_msg.strip() if error_msg else "Repository command failed", + result.stderr.strip(), + error_details if error_details else "", + ])) + else: + return result + +def _read_dir(repository_ctx, src_dir): + """Returns a string with all files in a directory. + + Finds all files inside a directory, traversing subfolders and following + symlinks. The returned string contains the full path of all files + separated by line breaks. + """ + if _is_windows(repository_ctx): + src_dir = src_dir.replace("/", "\\") + find_result = _execute( + repository_ctx, + ["cmd.exe", "/c", "dir", src_dir, "/b", "/s", "/a-d"], + empty_stdout_fine = True, + ) + + # src_files will be used in genrule.outs where the paths must + # use forward slashes. + return find_result.stdout.replace("\\", "/") + else: + find_result = _execute( + repository_ctx, + ["find", src_dir, "-follow", "-type", "f"], + empty_stdout_fine = True, + ) + return find_result.stdout + +def _genrule(src_dir, genrule_name, command, outs): + """Returns a string with a genrule. + + Genrule executes the given command and produces the given outputs. + """ + return ("genrule(\n" + ' name = "' + genrule_name + '",\n' + + " outs = [\n" + outs + "\n ],\n" + ' cmd = """\n' + + command + '\n """,\n' + ")\n") + +def _normalize_path(path): + """Returns a path with '/' and remove the trailing slash.""" + path = path.replace("\\", "/") + if path[-1] == "/": + path = path[:-1] + return path + +def _symlink_genrule_for_dir( + repository_ctx, + src_dir, + dest_dir, + genrule_name, + src_files = [], + dest_files = []): + """Returns a genrule to symlink(or copy if on Windows) a set of files. + + If src_dir is passed, files will be read from the given directory; otherwise + we assume files are in src_files and dest_files + """ + if src_dir != None: + src_dir = _normalize_path(src_dir) + dest_dir = _normalize_path(dest_dir) + files = "\n".join( + sorted(_read_dir(repository_ctx, src_dir).splitlines()), + ) + + # Create a list with the src_dir stripped to use for outputs. + dest_files = files.replace(src_dir, "").splitlines() + src_files = files.splitlines() + command = [] + outs = [] + for i in range(len(dest_files)): + if dest_files[i] != "": + # If we have only one file to link we do not want to use the dest_dir, as + # $(@D) will include the full path to the file. + dest = "$(@D)/" + dest_dir + dest_files[i] if len( + dest_files, + ) != 1 else "$(@D)/" + dest_files[i] + + # On Windows, symlink is not supported, so we just copy all the files. + cmd = "cp -f" if _is_windows(repository_ctx) else "ln -s" + command.append(cmd + ' "%s" "%s"' % (src_files[i], dest)) + outs.append(' "' + dest_dir + dest_files[i] + '",') + return _genrule( + src_dir, + genrule_name, + " && ".join(command), + "\n".join(outs), + ) + +def _get_python_bin(repository_ctx, bin_path_key, default_bin_path, allow_absent): + """Gets the python bin path.""" + python_bin = repository_ctx.os.environ.get(bin_path_key, default_bin_path) + if not repository_ctx.path(python_bin).exists: + # It's a command, use 'which' to find its path. + python_bin_path = repository_ctx.which(python_bin) + else: + # It's a path, use it as it is. + python_bin_path = python_bin + if python_bin_path != None: + return str(python_bin_path) + if not allow_absent: + _fail("Cannot find python in PATH, please make sure " + + "python is installed and add its directory in PATH, or --define " + + "%s='/something/else'.\nPATH=%s" % + (bin_path_key, repository_ctx.os.environ.get("PATH", ""))) + else: + return None + +def _get_bash_bin(repository_ctx): + """Gets the bash bin path.""" + bash_bin = repository_ctx.os.environ.get(_BAZEL_SH) + if bash_bin != None: + return bash_bin + else: + bash_bin_path = repository_ctx.which("bash") + if bash_bin_path != None: + return str(bash_bin_path) + else: + _fail( + "Cannot find bash in PATH, please make sure " + + "bash is installed and add its directory in PATH, or --define " + + "%s='/path/to/bash'.\nPATH=%s" % + (_BAZEL_SH, repository_ctx.os.environ.get("PATH", "")), + ) + +def _get_python_lib(repository_ctx, python_bin, lib_path_key): + """Gets the python lib path.""" + python_lib = repository_ctx.os.environ.get(lib_path_key) + if python_lib != None: + return python_lib + print_lib = ( + "<=1:\n" + + " print(paths[0])\n" + "END" + ) + cmd = '"%s" - %s' % (python_bin, print_lib) + result = repository_ctx.execute([_get_bash_bin(repository_ctx), "-c", cmd]) + return result.stdout.strip("\n") + +def _check_python_lib(repository_ctx, python_lib): + """Checks the python lib path.""" + cmd = 'test -d "%s" -a -x "%s"' % (python_lib, python_lib) + result = repository_ctx.execute([_get_bash_bin(repository_ctx), "-c", cmd]) + if result.return_code == 1: + _fail("Invalid python library path: %s" % python_lib) + +def _check_python_bin(repository_ctx, python_bin, bin_path_key, allow_absent): + """Checks the python bin path.""" + cmd = '[[ -x "%s" ]] && [[ ! -d "%s" ]]' % (python_bin, python_bin) + result = repository_ctx.execute([_get_bash_bin(repository_ctx), "-c", cmd]) + if result.return_code == 1: + if not allow_absent: + _fail("--define %s='%s' is not executable. Is it the python binary?" % + (bin_path_key, python_bin)) + else: + return None + return True + +def _get_python_include(repository_ctx, python_bin): + """Gets the python include path.""" + result = _execute( + repository_ctx, + [ + python_bin, + "-c", + "from __future__ import print_function;" + + "import sysconfig;" + + "print(sysconfig.get_path('include'))", + ], + error_msg = "Problem getting python include path for {}.".format(python_bin), + error_details = ( + "Is the Python binary path set up right? " + "(See ./configure or " + + python_bin + ".) " + _HEADERS_HELP + ), + ) + include_path = result.stdout.splitlines()[0] + _execute( + repository_ctx, + [ + python_bin, + "-c", + "import os;" + + "main_header = os.path.join(r'{}', 'Python.h');".format(include_path) + + "assert os.path.exists(main_header), main_header + ' does not exist.'", + ], + error_msg = "Unable to find Python headers for {}".format(python_bin), + error_details = _HEADERS_HELP, + empty_stdout_fine = True, + ) + return include_path + +def _get_python_import_lib_name(repository_ctx, python_bin, bin_path_key): + """Get Python import library name (pythonXY.lib) on Windows.""" + result = _execute( + repository_ctx, + [ + python_bin, + "-c", + "import sys;" + 'print("python" + str(sys.version_info[0]) + ' + + ' str(sys.version_info[1]) + ".lib")', + ], + error_msg = "Problem getting python import library.", + error_details = ("Is the Python binary path set up right? " + + "(See ./configure or " + bin_path_key + ".) "), + ) + return result.stdout.splitlines()[0] + +def _create_single_version_package( + repository_ctx, + variety_name, + bin_path_key, + default_bin_path, + lib_path_key, + allow_absent): + """Creates the repository containing files set up to build with Python.""" + empty_include_rule = "filegroup(\n name=\"{}_include\",\n srcs=[],\n)".format(variety_name) + + python_bin = _get_python_bin(repository_ctx, bin_path_key, default_bin_path, allow_absent) + if (python_bin == None or + _check_python_bin(repository_ctx, + python_bin, + bin_path_key, + allow_absent) == None) and allow_absent: + python_include_rule = empty_include_rule + else: + python_lib = _get_python_lib(repository_ctx, python_bin, lib_path_key) + _check_python_lib(repository_ctx, python_lib) + python_include = _get_python_include(repository_ctx, python_bin) + python_include_rule = _symlink_genrule_for_dir( + repository_ctx, + python_include, + "{}_include".format(variety_name), + "{}_include".format(variety_name), + ) + python_import_lib_genrule = "" + + # To build Python C/C++ extension on Windows, we need to link to python import library pythonXY.lib + # See https://docs.python.org/3/extending/windows.html + if _is_windows(repository_ctx): + python_include = _normalize_path(python_include) + python_import_lib_name = _get_python_import_lib_name( + repository_ctx, + python_bin, + bin_path_key, + ) + python_import_lib_src = python_include.rsplit( + "/", + 1, + )[0] + "/libs/" + python_import_lib_name + python_import_lib_genrule = _symlink_genrule_for_dir( + repository_ctx, + None, + "", + "{}_import_lib".format(variety_name), + [python_import_lib_src], + [python_import_lib_name], + ) + _tpl( + repository_ctx, + "variety", + { + "%{PYTHON_INCLUDE_GENRULE}": python_include_rule, + "%{PYTHON_IMPORT_LIB_GENRULE}": python_import_lib_genrule, + "%{VARIETY_NAME}": variety_name, + }, + out = "{}/BUILD".format(variety_name), + ) + +def _python_autoconf_impl(repository_ctx): + """Implementation of the python_autoconf repository rule.""" + _create_single_version_package( + repository_ctx, + "_python3", + _PYTHON3_BIN_PATH, + "python3" if not _is_windows(repository_ctx) else "python.exe", + _PYTHON3_LIB_PATH, + False + ) + _tpl(repository_ctx, "BUILD") + +python_configure = repository_rule( + implementation = _python_autoconf_impl, + environ = [ + _BAZEL_SH, + _PYTHON3_BIN_PATH, + _PYTHON3_LIB_PATH, + ], + attrs = { + "_build_tpl": attr.label( + default = Label("//third_party/py:BUILD.tpl"), + allow_single_file = True, + ), + "_variety_tpl": attr.label( + default = Label("//third_party/py:variety.tpl"), + allow_single_file = True, + ), + }, +) +"""Detects and configures the local Python. + +It expects the system have a working Python 3 installation. + +Add the following to your WORKSPACE FILE: + +```python +python_configure(name = "local_config_python") +``` + +Args: + name: A unique name for this workspace rule. +""" diff --git a/third_party/py/variety.tpl b/third_party/py/variety.tpl new file mode 100644 index 0000000000000..0c466d6d8f0bd --- /dev/null +++ b/third_party/py/variety.tpl @@ -0,0 +1,26 @@ +package(default_visibility=["//visibility:public"]) + +# To build Python C/C++ extension on Windows, we need to link to python import library pythonXY.lib +# See https://docs.python.org/3/extending/windows.html +cc_import( + name="%{VARIETY_NAME}_lib", + interface_library=select({ + "//:windows": ":%{VARIETY_NAME}_import_lib", + # A placeholder for Unix platforms which makes --no_build happy. + "//conditions:default": "not-existing.lib", + }), + system_provided=1, +) + +cc_library( + name="%{VARIETY_NAME}_headers", + hdrs=[":%{VARIETY_NAME}_include"], + deps=select({ + "//:windows": [":%{VARIETY_NAME}_lib"], + "//conditions:default": [], + }), + includes=["%{VARIETY_NAME}_include"], +) + +%{PYTHON_INCLUDE_GENRULE} +%{PYTHON_IMPORT_LIB_GENRULE} From 957dba5e1f19be0a5889b449e871ae8a11e79864 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Fri, 30 Jan 2026 19:28:57 -0800 Subject: [PATCH 37/67] [JSON] fix handling of null bytes in input (#41477) This essentially removes a check that was a hold-over from when this code was written in C and the only way to determine the end of a string was looking for a null byte. Closes #41477 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41477 from markdroth:json_parser_null_handling 1ce7aa522279f1335dc7fcecfb71fffc9e939c00 PiperOrigin-RevId: 863493240 --- src/core/util/json/json_reader.cc | 4 ---- src/core/xds/grpc/xds_client_grpc.cc | 2 +- src/cpp/ext/gcp/observability_config.cc | 2 +- test/core/util/json/json_test.cc | 5 ++++- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/core/util/json/json_reader.cc b/src/core/util/json/json_reader.cc index f1458ff14a1f6..d422cbb26a86a 100644 --- a/src/core/util/json/json_reader.cc +++ b/src/core/util/json/json_reader.cc @@ -242,10 +242,6 @@ uint32_t JsonReader::ReadChar() { if (remaining_input_ == 0) return GRPC_JSON_READ_CHAR_EOF; const uint32_t r = *input_++; --remaining_input_; - if (r == 0) { - remaining_input_ = 0; - return GRPC_JSON_READ_CHAR_EOF; - } return r; } diff --git a/src/core/xds/grpc/xds_client_grpc.cc b/src/core/xds/grpc/xds_client_grpc.cc index 74d1d0c0b2442..1f2072684629d 100644 --- a/src/core/xds/grpc/xds_client_grpc.cc +++ b/src/core/xds/grpc/xds_client_grpc.cc @@ -204,7 +204,7 @@ absl::StatusOr FindBootstrapContents() << "Got bootstrap file location from GRPC_XDS_BOOTSTRAP " "environment variable: " << *path; - auto contents = LoadFile(*path, /*add_null_terminator=*/true); + auto contents = LoadFile(*path, /*add_null_terminator=*/false); if (!contents.ok()) return contents.status(); return std::string(contents->as_string_view()); } diff --git a/src/cpp/ext/gcp/observability_config.cc b/src/cpp/ext/gcp/observability_config.cc index 0a39b0c21e1eb..f330666d79480 100644 --- a/src/cpp/ext/gcp/observability_config.cc +++ b/src/cpp/ext/gcp/observability_config.cc @@ -53,7 +53,7 @@ absl::StatusOr GetGcpObservabilityConfigContents() { std::string contents_str; auto path = grpc_core::GetEnv("GRPC_GCP_OBSERVABILITY_CONFIG_FILE"); if (path.has_value() && !path.value().empty()) { - auto contents = grpc_core::LoadFile(*path, /*add_null_terminator=*/true); + auto contents = grpc_core::LoadFile(*path, /*add_null_terminator=*/false); if (!contents.ok()) { return absl::FailedPreconditionError(absl::StrCat( "error loading file ", *path, ": ", contents.status().ToString())); diff --git a/test/core/util/json/json_test.cc b/test/core/util/json/json_test.cc index e1e47ff0913a0..5ad56e524e7ef 100644 --- a/test/core/util/json/json_test.cc +++ b/test/core/util/json/json_test.cc @@ -197,7 +197,7 @@ TEST(Json, Keywords) { "[true,false,null]"); } -void RunParseFailureTest(const char* input) { +void RunParseFailureTest(absl::string_view input) { LOG(INFO) << "parsing string \"" << input << "\" - should fail"; auto json = JsonParse(input); EXPECT_FALSE(json.ok()) << "input: \"" << input << "\""; @@ -215,6 +215,9 @@ TEST(Json, InvalidInput) { RunParseFailureTest("[{},]"); RunParseFailureTest("{\"field\": [],}"); RunParseFailureTest("[[],]"); + const char kInputWithNull[] = "{\"a\":1}\0{\"b\":2}"; + RunParseFailureTest( + absl::string_view(kInputWithNull, sizeof(kInputWithNull))); } TEST(Json, UnterminatedString) { RunParseFailureTest("\"\\x"); } From 031d094843f3b7348e1d9288e31094fb394a89fa Mon Sep 17 00:00:00 2001 From: Niraj Nepal Date: Sun, 1 Feb 2026 21:07:51 -0800 Subject: [PATCH 38/67] [Ruby] Added support to push native-debug packages off rubygems to public gcs bucket (#41270) This PR adds modifies the publishing script to publish native-debug rubygems to a public gcs bucket instead of rubygems. It solves [39231](https://github.com/grpc/grpc/issues/39231) Closes #41270 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41270 from zarinn3pal:feat/native-debug-gcs-bucket 925a19e8054395dfe0c427b07ba8a790ed616618 PiperOrigin-RevId: 864148152 --- Rakefile | 3 +- src/ruby/nativedebug/README.md | 21 ++++++++++++++ .../linux/grpc_publish_packages.sh | 29 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 140e8080367e5..f362ed2be48a4 100755 --- a/Rakefile +++ b/Rakefile @@ -247,7 +247,8 @@ task 'gem:native', [:plat] do |t, args| unix_platforms.each do |plat| unless unix_platforms_without_debug_symbols.include?(plat) `bash src/ruby/nativedebug/build_package.sh #{plat}` - `cp src/ruby/nativedebug/pkg/*.gem pkg/` + # Native debug gems uploaded to GCS, skip pkg/ to avoid RubyGems upload + # `cp src/ruby/nativedebug/pkg/*.gem pkg/` end end end diff --git a/src/ruby/nativedebug/README.md b/src/ruby/nativedebug/README.md index 68c20c900a6c6..f2bc1f43a0fb7 100644 --- a/src/ruby/nativedebug/README.md +++ b/src/ruby/nativedebug/README.md @@ -17,6 +17,27 @@ for example, a lot of information will initially be missing. # Using grpc-native-debug +## Download Location + +**Version 1.79.0+**: Download from GCS (exceeds RubyGems 500MB limit) + +```bash +VERSION=1.79.1 # your grpc version +PLATFORM=x86_64-linux # or x86-linux + +# Download gem +wget https://storage.googleapis.com/packages.grpc.io/grpc-ruby-native-debug-symbols/v${VERSION}/grpc-native-debug-${VERSION}-${PLATFORM}.gem + +# Verify checksum (recommended) +wget https://storage.googleapis.com/packages.grpc.io/grpc-ruby-native-debug-symbols/v${VERSION}/checksums.txt +sha256sum grpc-native-debug-${VERSION}-${PLATFORM}.gem | grep -f checksums.txt + +# Extract +gem unpack grpc-native-debug-${VERSION}-${PLATFORM}.gem +``` + +**Older versions**: May be available on RubyGems (if under 500MB) + ## Finding the correct grpc-native-debug gem Each `grpc-native-debug` gem is *one-to-one* with a `grpc` gem. Specifically: diff --git a/tools/internal_ci/linux/grpc_publish_packages.sh b/tools/internal_ci/linux/grpc_publish_packages.sh index 26b41564e67f9..da45a6b1b9ac0 100755 --- a/tools/internal_ci/linux/grpc_publish_packages.sh +++ b/tools/internal_ci/linux/grpc_publish_packages.sh @@ -34,6 +34,8 @@ GCS_ROOT=gs://packages.grpc.io/ GCS_ARCHIVE_PREFIX=archive/ GCS_ARCHIVE_ROOT=$GCS_ROOT$GCS_ARCHIVE_PREFIX GCS_INDEX=$GCS_ROOT$INDEX_FILENAME +GCS_NATIVE_DEBUG=${GCS_ROOT}grpc-ruby-native-debug-symbols +INPUT_NATIVE_DEBUG_DIR=${INPUT_ARTIFACTS}/ruby-native-debug-symbols LOCAL_STAGING_TEMPDIR=$(mktemp -d) LOCAL_BUILD_ROOT=$LOCAL_STAGING_TEMPDIR/$BUILD_RELPATH @@ -154,6 +156,33 @@ EOF EOF }> "$LOCAL_BUILD_INDEX" +if [[ -d "$INPUT_NATIVE_DEBUG_DIR" ]]; then + debug_gems=("$INPUT_NATIVE_DEBUG_DIR"/grpc-native-debug-*.gem) + + if [[ ${#debug_gems[@]} -gt 0 ]]; then + echo "Found ${#debug_gems[@]} Ruby native debug gems to upload." + local_stage="$(mktemp -d)" + cp "${debug_gems[@]}" "$local_stage/" + + ( + cd "$local_stage" + sha256sum ./*.gem > checksums.txt + ) + + if [[ ! -f "$local_stage/checksums.txt" ]]; then + echo "Error: checksums generation failed." >&2 + exit 1 + fi + + gsutil -m cp -n "$local_stage"/* "$GCS_NATIVE_DEBUG/v$GRPC_VERSION/" + echo "Uploaded Ruby native debug gems to $GCS_NATIVE_DEBUG/v$GRPC_VERSION/" + + rm -rf "$local_stage" + else + echo "No Ruby native debug gems found to upload." + fi +fi + LOCAL_BUILD_INDEX_SIZE=$(stat -c%s "$LOCAL_BUILD_INDEX") LOCAL_BUILD_INDEX_SHA256=$(openssl sha256 -r "$LOCAL_BUILD_INDEX" | cut -d " " -f 1) From 725089bbbf97c14680bf603a7ab4fde154102262 Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap Date: Sun, 1 Feb 2026 23:47:18 -0800 Subject: [PATCH 39/67] [PH2][CPPE2E] Partially enable async_end2end_test PiperOrigin-RevId: 864198044 --- test/cpp/end2end/BUILD | 1 + test/cpp/end2end/async_end2end_test.cc | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index 92f18da6f2ecb..a85b253134c1d 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -161,6 +161,7 @@ grpc_cc_test( shard_count = 10, tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", "no_test_ios", "thready_tsan", ], diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index d091503f62258..9afa6fb99c165 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -349,7 +349,9 @@ class AsyncEnd2endTest : public ::testing::TestWithParam { void ResetStub() { ChannelArguments args; - ApplyCommonChannelArguments(args); + if (!(GetParam().inproc)) { + ApplyCommonChannelArguments(args); + } auto channel_creds = GetCredentialsProvider()->GetChannelCredentials( GetParam().credentials_type, &args); std::shared_ptr channel = @@ -1305,6 +1307,8 @@ TEST_P(AsyncEnd2endTest, MetadataRpc) { // Server uses AsyncNotifyWhenDone API to check for cancellation TEST_P(AsyncEnd2endTest, ServerCheckCancellation) { + // TODO(akshitpatel) [PH2][P1] Fix bug. + SKIP_TEST_FOR_PH2("WIP Timeout for PH2"); ResetStub(); EchoRequest send_request; @@ -1905,10 +1909,15 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { }; TEST_P(AsyncEnd2endServerTryCancelTest, ClientStreamingServerTryCancelBefore) { + // TODO(akshitpatel) [PH2][P1] Fix bug. + SKIP_TEST_FOR_PH2("WIP `Check failed` for PH2"); TestClientStreamingServerCancel(CANCEL_BEFORE_PROCESSING); } TEST_P(AsyncEnd2endServerTryCancelTest, ClientStreamingServerTryCancelDuring) { + // TODO(akshitpatel) [PH2][P1] Fix bug. Likley same bug as + // ClientStreamingServerTryCancelBefore. + SKIP_TEST_FOR_PH2("WIP `Check failed` for PH2"); TestClientStreamingServerCancel(CANCEL_DURING_PROCESSING); } @@ -2011,13 +2020,13 @@ INSTANTIATE_TEST_SUITE_P(AsyncEnd2endServerTryCancel, } // namespace grpc int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); // Change the backup poll interval from 5s to 100ms to speed up the // ReconnectChannel test grpc_core::ConfigVars::Overrides overrides; overrides.client_channel_backup_poll_interval_ms = 100; grpc_core::ConfigVars::SetOverrides(overrides); grpc::testing::TestEnvironment env(&argc, argv); - ::testing::InitGoogleTest(&argc, argv); int ret = RUN_ALL_TESTS(); return ret; } From 8661badb789b01fe55d7e73bfcedcc14f61c9855 Mon Sep 17 00:00:00 2001 From: Pranjali-2501 Date: Mon, 2 Feb 2026 01:09:29 -0800 Subject: [PATCH 40/67] [interop] Add v1.78.0 release of grpc-go to interop matrix (#41467) ``` gcloud beta container images list-tags us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_interop_go1.x DIGEST TAGS TIMESTAMP VULNERABILITIES 238b62ffa575 infrastructure-public-image-v1.78.0,v1.78.0 2026-01-23T07:27:12 CRITICAL=1,HIGH=10,LOW=41,MEDIUM=8,MINIMAL=108 a7734f9a23a4 infrastructure-public-image-v1.77.0,v1.77.0 2025-11-17T23:41:17 CRITICAL=1,HIGH=8,LOW=34,MEDIUM=6,MINIMAL=98 aa5081509e42 infrastructure-public-image-v1.76.0,v1.76.0 2025-10-06T22:34:20 CRITICAL=1,HIGH=10,LOW=41,MEDIUM=8,MINIMAL=108 706779879f22 infrastructure-public-image-v1.72.3,v1.72.3 2025-09-10T09:53:08 CRITICAL=1,HIGH=12,LOW=41,MEDIUM=13,MINIMAL=108 cd6ff9704672 infrastructure-public-image-v1.73.1,v1.73.1 2025-09-10T09:08:06 CRITICAL=1,HIGH=10,LOW=41,MEDIUM=10,MINIMAL=108 b1ce9dcb8e77 infrastructure-public-image-v1.74.3,v1.74.3 2025-09-10T08:47:41 CRITICAL=1,HIGH=10,LOW=41,MEDIUM=10,MINIMAL=108 cc4d38dfd6bc infrastructure-public-image-v1.75.1,v1.75.1 2025-09-10T07:01:45 CRITICAL=1,HIGH=10,LOW=41,MEDIUM=8,MINIMAL=108 debefa297d2f infrastructure-public-image-v1.75.0,v1.75.0 2025-08-20T07:11:42 a99d95a96a4e infrastructure-public-image-v1.74.2,v1.74.2 2025-07-23T04:56:36 d13fbd1dafdb infrastructure-public-image-v1.73.0,v1.73.0 2025-06-06T08:46:49 ``` Closes #41467 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41467 from Pranjali-2501:go_release_v1.78.0 1fa77f228bfc9473c4c670f5127759ece75c5356 PiperOrigin-RevId: 864226431 --- tools/interop_matrix/client_matrix.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/interop_matrix/client_matrix.py b/tools/interop_matrix/client_matrix.py index 88d054de9ca43..ffc01ad33779f 100644 --- a/tools/interop_matrix/client_matrix.py +++ b/tools/interop_matrix/client_matrix.py @@ -325,6 +325,7 @@ def __init__(self, patch=[], runtimes=[], testcases_file=None): ("v1.74.3", ReleaseInfo()), ("v1.75.1", ReleaseInfo()), ("v1.76.0", ReleaseInfo()), + ("v1.78.0", ReleaseInfo()), ] ), "java": OrderedDict( From 5db10eb01d56fbe21a8bb72295d4cbd6f7dfe815 Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap Date: Mon, 2 Feb 2026 02:00:16 -0800 Subject: [PATCH 41/67] [PH2][ChannelZ][Bug][CPPE2E] Missing null check PiperOrigin-RevId: 864244889 --- .../chttp2/transport/http2_client_transport.cc | 10 ++++++++++ .../chttp2/transport/http2_client_transport.h | 6 +----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/http2_client_transport.cc b/src/core/ext/transport/chttp2/transport/http2_client_transport.cc index e2aee89d32c58..53e9a51523344 100644 --- a/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +++ b/src/core/ext/transport/chttp2/transport/http2_client_transport.cc @@ -1921,6 +1921,16 @@ void Http2ClientTransport::AddData(channelz::DataSink sink) { }); } +RefCountedPtr Http2ClientTransport::GetSocketNode() + const { + const channelz::BaseNode* node = channelz::DataSource::channelz_node(); + if (node == nullptr) { + return nullptr; + } + return const_cast(node) + ->RefAsSubclass(); +} + /////////////////////////////////////////////////////////////////////////////// // Stream Related Operations diff --git a/src/core/ext/transport/chttp2/transport/http2_client_transport.h b/src/core/ext/transport/chttp2/transport/http2_client_transport.h index 41a0055dea776..fc88efa4acf22 100644 --- a/src/core/ext/transport/chttp2/transport/http2_client_transport.h +++ b/src/core/ext/transport/chttp2/transport/http2_client_transport.h @@ -123,11 +123,7 @@ class Http2ClientTransport final : public ClientTransport, void Orphan() override; - RefCountedPtr GetSocketNode() const override { - return const_cast( - channelz::DataSource::channelz_node()) - ->RefAsSubclass(); - } + RefCountedPtr GetSocketNode() const override; std::unique_ptr GetZTrace(absl::string_view name) override { if (name == "transport_frames") return ztrace_collector_->MakeZTrace(); From 7d8fb8ea29a6093859804e38b87f0ef350b5fa04 Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap - Google LLC <139093547+tanvi-jagtap@users.noreply.github.com> Date: Mon, 2 Feb 2026 03:12:41 -0800 Subject: [PATCH 42/67] [PH2] Updating PH2 experiment dates (#41527) [PH2] Updating PH2 experiment dates Closes #41527 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41527 from tanvi-jagtap:2026_02_02_expt_update 931b7aa7ec55431b497dbf3a933c9c2e64357b32 PiperOrigin-RevId: 864271272 --- src/core/lib/experiments/experiments.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index d0e775e209790..37ba443b07fb5 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -247,7 +247,7 @@ Use promises for the http2 client transport. We have kept client and server transport experiments separate to help with smoother roll outs and also help with interop testing. - expiry: 2026/01/30 + expiry: 2026/08/30 owner: tjagtap@google.com test_tags: ["core_end2end_test", "cpp_end2end_test_client_ph2"] allow_in_fuzzing_config: true @@ -256,7 +256,7 @@ Use promises for the http2 server transport. We have kept client and server transport experiments separate to help with smoother roll outs and also help with interop testing. - expiry: 2026/02/28 + expiry: 2026/08/30 owner: tjagtap@google.com test_tags: [] allow_in_fuzzing_config: true From 2b0e2678c7742fb7833d204c3d4a426ad8a4727b Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap Date: Mon, 2 Feb 2026 05:20:52 -0800 Subject: [PATCH 43/67] [PH2][CPPE2E] Partially enable channelz tests channelz_service_test - 9 out of 16 enabled. channelz_v2_service_test - all 6 enabled. PiperOrigin-RevId: 864308030 --- test/cpp/end2end/BUILD | 2 ++ test/cpp/end2end/channelz_service_test.cc | 7 +++++++ test/cpp/end2end/end2end_test.cc | 8 ++------ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index a85b253134c1d..608cf644d0d43 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -483,6 +483,7 @@ grpc_cc_test( # iOS. Figure out why. tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", # b/117517566. "grpc:no-internal-poller", "no_test_ios", @@ -534,6 +535,7 @@ grpc_cc_test( # iOS. Figure out why. tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", # b/117517566. "grpc:no-internal-poller", "no_test_ios", diff --git a/test/cpp/end2end/channelz_service_test.cc b/test/cpp/end2end/channelz_service_test.cc index eb9929649804c..d48ddec449bb6 100644 --- a/test/cpp/end2end/channelz_service_test.cc +++ b/test/cpp/end2end/channelz_service_test.cc @@ -407,6 +407,7 @@ TEST_P(ChannelzServerTest, HighStartId) { } TEST_P(ChannelzServerTest, SuccessfulRequestTest) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); ResetStubs(); ConfigureProxy(1); SendSuccessfulEcho(0); @@ -422,6 +423,7 @@ TEST_P(ChannelzServerTest, SuccessfulRequestTest) { } TEST_P(ChannelzServerTest, FailedRequestTest) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); ResetStubs(); ConfigureProxy(1); SendFailedEcho(0); @@ -437,6 +439,7 @@ TEST_P(ChannelzServerTest, FailedRequestTest) { } TEST_P(ChannelzServerTest, ManyRequestsTest) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); ResetStubs(); ConfigureProxy(1); // send some RPCs @@ -474,6 +477,7 @@ TEST_P(ChannelzServerTest, ManyChannels) { } TEST_P(ChannelzServerTest, ManySubchannels) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); ResetStubs(); const int kNumChannels = 4; ConfigureProxy(kNumChannels); @@ -584,6 +588,7 @@ TEST_P(ChannelzServerTest, ServerCallTest) { } TEST_P(ChannelzServerTest, ManySubchannelsAndSockets) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); ResetStubs(); const int kNumChannels = 4; ConfigureProxy(kNumChannels); @@ -667,6 +672,7 @@ TEST_P(ChannelzServerTest, ManySubchannelsAndSockets) { } TEST_P(ChannelzServerTest, StreamingRPC) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); ResetStubs(); ConfigureProxy(1); const int kNumMessages = 5; @@ -791,6 +797,7 @@ TEST_P(ChannelzServerTest, GetServerSocketsTest) { } TEST_P(ChannelzServerTest, GetServerSocketsPaginationTest) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); ResetStubs(); ConfigureProxy(1); std::vector> stubs; diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index 3e0e587f904e8..c202f4217487a 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -1484,9 +1484,7 @@ TEST_P(End2endTest, BinaryTrailerTest) { } TEST_P(End2endTest, ExpectErrorTest) { - if (grpc_core::IsPromiseBasedHttp2ClientTransportEnabled()) { - GTEST_SKIP() << "TODO(tjagtap) [PH2][P1] Fix bug"; - } + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); ResetStub(); @@ -1608,9 +1606,7 @@ TEST_P(ProxyEnd2endTest, RpcLongDeadline) { // Ask server to echo back the deadline it sees. TEST_P(ProxyEnd2endTest, EchoDeadline) { - if (grpc_core::IsPromiseBasedHttp2ClientTransportEnabled()) { - GTEST_SKIP() << "TODO(tjagtap) [PH2][P1] Fix bug"; - } + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); ResetStub(); EchoRequest request; EchoResponse response; From 43d76ca0d6bdfdaad47305b9b264df7f90805bf0 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Mon, 2 Feb 2026 07:37:58 -0800 Subject: [PATCH 44/67] [subchannel] implement connection scaling (#40984) The main part of gRFC A105 (https://github.com/grpc/proposal/pull/516). Closes #40984 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40984 from markdroth:subchannel_call_queueing 8cc9d327bd27e2a05873613350955cb103a2dcb1 PiperOrigin-RevId: 864350042 --- BUILD | 3 + CMakeLists.txt | 60 ++ Makefile | 1 + Package.swift | 2 + bazel/BUILD | 5 + bazel/experiments.bzl | 3 + build_autogenerated.yaml | 38 + config.m4 | 1 + config.w32 | 1 + doc/trace_flags.md | 1 + gRPC-C++.podspec | 2 + gRPC-Core.podspec | 3 + grpc.gemspec | 2 + package.xml | 2 + src/core/BUILD | 1 + src/core/client_channel/buffered_call.cc | 10 +- src/core/client_channel/buffered_call.h | 16 +- .../client_channel/client_channel_internal.h | 5 + src/core/client_channel/subchannel.cc | 764 +++++++++++++++--- src/core/client_channel/subchannel.h | 52 +- .../subchannel_stream_limiter.cc | 76 ++ .../subchannel_stream_limiter.h | 51 ++ .../chttp2/transport/chttp2_transport.cc | 1 + .../chttp2/transport/transport_common.h | 5 - src/core/lib/debug/trace_flags.cc | 2 + src/core/lib/debug/trace_flags.h | 1 + src/core/lib/debug/trace_flags.yaml | 3 + src/core/lib/experiments/experiments.yaml | 2 +- src/python/grpcio/grpc_core_dependencies.py | 1 + test/core/client_channel/BUILD | 12 + .../subchannel_stream_limiter_test.cc | 79 ++ test/core/client_channel/subchannel_test.cc | 1 + test/core/end2end/grpc_core_end2end_test.bzl | 3 + test/core/end2end/tests/connection_scaling.cc | 215 +++++ .../end2end/tests/max_concurrent_streams.cc | 7 +- test/cpp/end2end/BUILD | 6 + test/cpp/end2end/client_lb_end2end_test.cc | 742 ++++++++++++++++- .../cpp/end2end/connection_attempt_injector.h | 4 +- test/cpp/util/BUILD | 22 + test/cpp/util/channelz_util.cc | 82 ++ test/cpp/util/channelz_util.h | 45 ++ tools/doxygen/Doxyfile.c++.internal | 2 + tools/doxygen/Doxyfile.core.internal | 2 + tools/run_tests/generated/tests.json | 24 + 44 files changed, 2199 insertions(+), 161 deletions(-) create mode 100644 src/core/client_channel/subchannel_stream_limiter.cc create mode 100644 src/core/client_channel/subchannel_stream_limiter.h create mode 100644 test/core/client_channel/subchannel_stream_limiter_test.cc create mode 100644 test/core/end2end/tests/connection_scaling.cc create mode 100644 test/cpp/util/channelz_util.cc create mode 100644 test/cpp/util/channelz_util.h diff --git a/BUILD b/BUILD index 193c3034c4fc0..e1a12dd19f898 100644 --- a/BUILD +++ b/BUILD @@ -3992,6 +3992,7 @@ grpc_cc_library( "//src/core:client_channel/retry_filter_legacy_call_data.cc", "//src/core:client_channel/subchannel.cc", "//src/core:client_channel/subchannel_stream_client.cc", + "//src/core:client_channel/subchannel_stream_limiter.cc", ], hdrs = [ "//src/core:client_channel/buffered_call.h", @@ -4007,6 +4008,7 @@ grpc_cc_library( "//src/core:client_channel/subchannel.h", "//src/core:client_channel/subchannel_interface_internal.h", "//src/core:client_channel/subchannel_stream_client.h", + "//src/core:client_channel/subchannel_stream_limiter.h", ], external_deps = [ "absl/base:core_headers", @@ -5083,6 +5085,7 @@ grpc_cc_library( "//src/core:channel_args", "//src/core:channelz_property_list", "//src/core:chttp2_flow_control", + "//src/core:client_channel_internal_header", "//src/core:closure", "//src/core:connectivity_state", "//src/core:context_list_entry", diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e932218fc753..96a91d15bc2e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1822,6 +1822,7 @@ if(gRPC_BUILD_TESTS) add_dependencies(buildtests_cxx string_ref_test) add_dependencies(buildtests_cxx string_test) add_dependencies(buildtests_cxx subchannel_args_test) + add_dependencies(buildtests_cxx subchannel_stream_limiter_test) add_dependencies(buildtests_cxx switch_test) add_dependencies(buildtests_cxx sync_test) add_dependencies(buildtests_cxx system_roots_test) @@ -2265,6 +2266,7 @@ add_library(grpc src/core/client_channel/subchannel.cc src/core/client_channel/subchannel_pool_interface.cc src/core/client_channel/subchannel_stream_client.cc + src/core/client_channel/subchannel_stream_limiter.cc src/core/config/core_configuration.cc src/core/credentials/call/call_creds_registry_init.cc src/core/credentials/call/call_creds_util.cc @@ -3435,6 +3437,7 @@ add_library(grpc_unsecure src/core/client_channel/subchannel.cc src/core/client_channel/subchannel_pool_interface.cc src/core/client_channel/subchannel_stream_client.cc + src/core/client_channel/subchannel_stream_limiter.cc src/core/config/core_configuration.cc src/core/credentials/call/call_creds_util.cc src/core/credentials/call/composite/composite_call_credentials.cc @@ -12313,6 +12316,14 @@ if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_executable(client_lb_end2end_test + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/v2/channelz.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/v2/channelz.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/v2/channelz.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/v2/channelz.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/v2/property_list.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/v2/property_list.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/v2/property_list.pb.h + ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/channelz/v2/property_list.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/health/v1/health.pb.h @@ -12362,6 +12373,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) test/cpp/end2end/client_lb_end2end_test.cc test/cpp/end2end/connection_attempt_injector.cc test/cpp/end2end/test_service_impl.cc + test/cpp/util/channelz_util.cc ) if(WIN32 AND MSVC) if(BUILD_SHARED_LIBS) @@ -14155,6 +14167,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) test/core/end2end/tests/channelz.cc test/core/end2end/tests/client_streaming.cc test/core/end2end/tests/compressed_payload.cc + test/core/end2end/tests/connection_scaling.cc test/core/end2end/tests/connectivity.cc test/core/end2end/tests/default_host.cc test/core/end2end/tests/disappearing_server.cc @@ -14553,6 +14566,7 @@ add_executable(end2end_http2_security_test test/core/end2end/tests/channelz.cc test/core/end2end/tests/client_streaming.cc test/core/end2end/tests/compressed_payload.cc + test/core/end2end/tests/connection_scaling.cc test/core/end2end/tests/connectivity.cc test/core/end2end/tests/default_host.cc test/core/end2end/tests/disappearing_server.cc @@ -14744,6 +14758,7 @@ add_executable(end2end_http2_test test/core/end2end/tests/channelz.cc test/core/end2end/tests/client_streaming.cc test/core/end2end/tests/compressed_payload.cc + test/core/end2end/tests/connection_scaling.cc test/core/end2end/tests/connectivity.cc test/core/end2end/tests/default_host.cc test/core/end2end/tests/disappearing_server.cc @@ -15038,6 +15053,7 @@ add_executable(end2end_inproc_test test/core/end2end/tests/channelz.cc test/core/end2end/tests/client_streaming.cc test/core/end2end/tests/compressed_payload.cc + test/core/end2end/tests/connection_scaling.cc test/core/end2end/tests/connectivity.cc test/core/end2end/tests/default_host.cc test/core/end2end/tests/disappearing_server.cc @@ -15332,6 +15348,7 @@ add_executable(end2end_ph2_test test/core/end2end/tests/channelz.cc test/core/end2end/tests/client_streaming.cc test/core/end2end/tests/compressed_payload.cc + test/core/end2end/tests/connection_scaling.cc test/core/end2end/tests/connectivity.cc test/core/end2end/tests/default_host.cc test/core/end2end/tests/disappearing_server.cc @@ -15626,6 +15643,7 @@ add_executable(end2end_posix_test test/core/end2end/tests/channelz.cc test/core/end2end/tests/client_streaming.cc test/core/end2end/tests/compressed_payload.cc + test/core/end2end/tests/connection_scaling.cc test/core/end2end/tests/connectivity.cc test/core/end2end/tests/default_host.cc test/core/end2end/tests/disappearing_server.cc @@ -33288,6 +33306,48 @@ target_link_libraries(subchannel_args_test ) +endif() +if(gRPC_BUILD_TESTS) + +add_executable(subchannel_stream_limiter_test + test/core/client_channel/subchannel_stream_limiter_test.cc +) +if(WIN32 AND MSVC) + if(BUILD_SHARED_LIBS) + target_compile_definitions(subchannel_stream_limiter_test + PRIVATE + "GPR_DLL_IMPORTS" + "GRPC_DLL_IMPORTS" + ) + endif() +endif() +target_compile_features(subchannel_stream_limiter_test PUBLIC cxx_std_17) +target_include_directories(subchannel_stream_limiter_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(subchannel_stream_limiter_test + ${_gRPC_ALLTARGETS_LIBRARIES} + gtest + grpc_test_util +) + + endif() if(gRPC_BUILD_TESTS) diff --git a/Makefile b/Makefile index 4a7fa5333f6dc..55aca28601b44 100644 --- a/Makefile +++ b/Makefile @@ -710,6 +710,7 @@ LIBGRPC_SRC = \ src/core/client_channel/subchannel.cc \ src/core/client_channel/subchannel_pool_interface.cc \ src/core/client_channel/subchannel_stream_client.cc \ + src/core/client_channel/subchannel_stream_limiter.cc \ src/core/config/config_vars.cc \ src/core/config/config_vars_non_generated.cc \ src/core/config/core_configuration.cc \ diff --git a/Package.swift b/Package.swift index 06687576e42ec..6f2a0c3ffb0d1 100644 --- a/Package.swift +++ b/Package.swift @@ -221,6 +221,8 @@ let package = Package( "src/core/client_channel/subchannel_pool_interface.h", "src/core/client_channel/subchannel_stream_client.cc", "src/core/client_channel/subchannel_stream_client.h", + "src/core/client_channel/subchannel_stream_limiter.cc", + "src/core/client_channel/subchannel_stream_limiter.h", "src/core/config/config_vars.cc", "src/core/config/config_vars.h", "src/core/config/config_vars_non_generated.cc", diff --git a/bazel/BUILD b/bazel/BUILD index babba51b71a06..2852feee39af6 100644 --- a/bazel/BUILD +++ b/bazel/BUILD @@ -92,6 +92,11 @@ package_group( packages = [], ) +package_group( + name = "client_channel_internal_header", + packages = [], +) + package_group( name = "core_credentials", packages = [], diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl index 1aa6ff77c30ba..f277ca745494f 100644 --- a/bazel/experiments.bzl +++ b/bazel/experiments.bzl @@ -106,6 +106,7 @@ EXPERIMENTS = { "retry_in_callv3", "secure_endpoint_offload_large_reads", "secure_endpoint_offload_large_writes", + "subchannel_connection_scaling", ], "cpp_end2end_test": [ "error_flatten", @@ -217,6 +218,7 @@ EXPERIMENTS = { "retry_in_callv3", "secure_endpoint_offload_large_reads", "secure_endpoint_offload_large_writes", + "subchannel_connection_scaling", ], "cpp_end2end_test": [ "error_flatten", @@ -328,6 +330,7 @@ EXPERIMENTS = { "retry_in_callv3", "secure_endpoint_offload_large_reads", "secure_endpoint_offload_large_writes", + "subchannel_connection_scaling", ], "cpp_end2end_test": [ "error_flatten", diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index 7487951e3bf4a..d446589357ca9 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -246,6 +246,7 @@ libs: - src/core/client_channel/subchannel_interface_internal.h - src/core/client_channel/subchannel_pool_interface.h - src/core/client_channel/subchannel_stream_client.h + - src/core/client_channel/subchannel_stream_limiter.h - src/core/config/core_configuration.h - src/core/credentials/call/call_credentials.h - src/core/credentials/call/call_creds_registry.h @@ -1392,6 +1393,7 @@ libs: - src/core/client_channel/subchannel.cc - src/core/client_channel/subchannel_pool_interface.cc - src/core/client_channel/subchannel_stream_client.cc + - src/core/client_channel/subchannel_stream_limiter.cc - src/core/config/core_configuration.cc - src/core/credentials/call/call_creds_registry_init.cc - src/core/credentials/call/call_creds_util.cc @@ -2459,6 +2461,7 @@ libs: - src/core/client_channel/subchannel_interface_internal.h - src/core/client_channel/subchannel_pool_interface.h - src/core/client_channel/subchannel_stream_client.h + - src/core/client_channel/subchannel_stream_limiter.h - src/core/config/core_configuration.h - src/core/credentials/call/call_credentials.h - src/core/credentials/call/call_creds_registry.h @@ -3018,6 +3021,7 @@ libs: - src/core/client_channel/subchannel.cc - src/core/client_channel/subchannel_pool_interface.cc - src/core/client_channel/subchannel_stream_client.cc + - src/core/client_channel/subchannel_stream_limiter.cc - src/core/config/core_configuration.cc - src/core/credentials/call/call_creds_util.cc - src/core/credentials/call/composite/composite_call_credentials.cc @@ -9272,12 +9276,16 @@ targets: headers: - src/cpp/server/orca/orca_service.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_lb_policies.h - test/cpp/end2end/connection_attempt_injector.h - test/cpp/end2end/end2end_test_utils.h - test/cpp/end2end/test_service_impl.h + - test/cpp/util/channelz_util.h - third_party/protoc-gen-validate/validate/validate.h src: + - src/proto/grpc/channelz/v2/channelz.proto + - src/proto/grpc/channelz/v2/property_list.proto - src/proto/grpc/health/v1/health.proto - src/proto/grpc/testing/duplicate/echo_duplicate.proto - src/proto/grpc/testing/echo.proto @@ -9294,6 +9302,7 @@ targets: - test/cpp/end2end/client_lb_end2end_test.cc - test/cpp/end2end/connection_attempt_injector.cc - test/cpp/end2end/test_service_impl.cc + - test/cpp/util/channelz_util.cc deps: - gtest - grpc++_test_util @@ -9976,6 +9985,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -10106,6 +10116,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -10158,6 +10169,7 @@ targets: - test/core/end2end/tests/channelz.cc - test/core/end2end/tests/client_streaming.cc - test/core/end2end/tests/compressed_payload.cc + - test/core/end2end/tests/connection_scaling.cc - test/core/end2end/tests/connectivity.cc - test/core/end2end/tests/default_host.cc - test/core/end2end/tests/disappearing_server.cc @@ -10324,6 +10336,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -10450,6 +10463,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -10576,6 +10590,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -10628,6 +10643,7 @@ targets: - test/core/end2end/tests/channelz.cc - test/core/end2end/tests/client_streaming.cc - test/core/end2end/tests/compressed_payload.cc + - test/core/end2end/tests/connection_scaling.cc - test/core/end2end/tests/connectivity.cc - test/core/end2end/tests/default_host.cc - test/core/end2end/tests/disappearing_server.cc @@ -10790,6 +10806,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -10842,6 +10859,7 @@ targets: - test/core/end2end/tests/channelz.cc - test/core/end2end/tests/client_streaming.cc - test/core/end2end/tests/compressed_payload.cc + - test/core/end2end/tests/connection_scaling.cc - test/core/end2end/tests/connectivity.cc - test/core/end2end/tests/default_host.cc - test/core/end2end/tests/disappearing_server.cc @@ -11004,6 +11022,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -11130,6 +11149,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -11182,6 +11202,7 @@ targets: - test/core/end2end/tests/channelz.cc - test/core/end2end/tests/client_streaming.cc - test/core/end2end/tests/compressed_payload.cc + - test/core/end2end/tests/connection_scaling.cc - test/core/end2end/tests/connectivity.cc - test/core/end2end/tests/default_host.cc - test/core/end2end/tests/disappearing_server.cc @@ -11344,6 +11365,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -11470,6 +11492,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -11522,6 +11545,7 @@ targets: - test/core/end2end/tests/channelz.cc - test/core/end2end/tests/client_streaming.cc - test/core/end2end/tests/compressed_payload.cc + - test/core/end2end/tests/connection_scaling.cc - test/core/end2end/tests/connectivity.cc - test/core/end2end/tests/default_host.cc - test/core/end2end/tests/disappearing_server.cc @@ -11684,6 +11708,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -11810,6 +11835,7 @@ targets: - test/core/test_util/fuzz_config_vars.h - test/core/test_util/passthrough_endpoint.h - test/core/test_util/postmortem.h + - test/core/test_util/scoped_env_var.h - test/core/test_util/test_call_creds.h - test/core/test_util/test_lb_policies.h src: @@ -11862,6 +11888,7 @@ targets: - test/core/end2end/tests/channelz.cc - test/core/end2end/tests/client_streaming.cc - test/core/end2end/tests/compressed_payload.cc + - test/core/end2end/tests/connection_scaling.cc - test/core/end2end/tests/connectivity.cc - test/core/end2end/tests/default_host.cc - test/core/end2end/tests/disappearing_server.cc @@ -23934,6 +23961,17 @@ targets: - gtest - grpc_test_util uses_polling: false +- name: subchannel_stream_limiter_test + gtest: true + build: test + language: c++ + headers: [] + src: + - test/core/client_channel/subchannel_stream_limiter_test.cc + deps: + - gtest + - grpc_test_util + uses_polling: false - name: switch_test gtest: true build: test diff --git a/config.m4 b/config.m4 index 9d7a76efeee12..fac67826be76e 100644 --- a/config.m4 +++ b/config.m4 @@ -84,6 +84,7 @@ if test "$PHP_GRPC" != "no"; then src/core/client_channel/subchannel.cc \ src/core/client_channel/subchannel_pool_interface.cc \ src/core/client_channel/subchannel_stream_client.cc \ + src/core/client_channel/subchannel_stream_limiter.cc \ src/core/config/config_vars.cc \ src/core/config/config_vars_non_generated.cc \ src/core/config/core_configuration.cc \ diff --git a/config.w32 b/config.w32 index 45e4be8d75cb3..7a6ce78c2acd6 100644 --- a/config.w32 +++ b/config.w32 @@ -49,6 +49,7 @@ if (PHP_GRPC != "no") { "src\\core\\client_channel\\subchannel.cc " + "src\\core\\client_channel\\subchannel_pool_interface.cc " + "src\\core\\client_channel\\subchannel_stream_client.cc " + + "src\\core\\client_channel\\subchannel_stream_limiter.cc " + "src\\core\\config\\config_vars.cc " + "src\\core\\config\\config_vars_non_generated.cc " + "src\\core\\config\\core_configuration.cc " + diff --git a/doc/trace_flags.md b/doc/trace_flags.md index 22d4c234d6926..80f878666b9ab 100644 --- a/doc/trace_flags.md +++ b/doc/trace_flags.md @@ -67,6 +67,7 @@ processing requests via debug logs. Available tracers include: - server_channel - Lightweight trace of significant server channel events. - stateful_session_filter - Stateful session affinity. - subchannel - Connectivity state of subchannels. + - subchannel_call - Call handling in the subchannel. - subchannel_pool - Subchannel pool. - tcp - Bytes in and out of a channel. - timer - Timers (alarms) in the grpc internals. diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec index 1376f251f2901..683a53048fd07 100644 --- a/gRPC-C++.podspec +++ b/gRPC-C++.podspec @@ -332,6 +332,7 @@ Pod::Spec.new do |s| 'src/core/client_channel/subchannel_interface_internal.h', 'src/core/client_channel/subchannel_pool_interface.h', 'src/core/client_channel/subchannel_stream_client.h', + 'src/core/client_channel/subchannel_stream_limiter.h', 'src/core/config/config_vars.h', 'src/core/config/core_configuration.h', 'src/core/config/load_config.h', @@ -1727,6 +1728,7 @@ Pod::Spec.new do |s| 'src/core/client_channel/subchannel_interface_internal.h', 'src/core/client_channel/subchannel_pool_interface.h', 'src/core/client_channel/subchannel_stream_client.h', + 'src/core/client_channel/subchannel_stream_limiter.h', 'src/core/config/config_vars.h', 'src/core/config/core_configuration.h', 'src/core/config/load_config.h', diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index f391b36f9503c..9f6711693fad0 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -344,6 +344,8 @@ Pod::Spec.new do |s| 'src/core/client_channel/subchannel_pool_interface.h', 'src/core/client_channel/subchannel_stream_client.cc', 'src/core/client_channel/subchannel_stream_client.h', + 'src/core/client_channel/subchannel_stream_limiter.cc', + 'src/core/client_channel/subchannel_stream_limiter.h', 'src/core/config/config_vars.cc', 'src/core/config/config_vars.h', 'src/core/config/config_vars_non_generated.cc', @@ -2647,6 +2649,7 @@ Pod::Spec.new do |s| 'src/core/client_channel/subchannel_interface_internal.h', 'src/core/client_channel/subchannel_pool_interface.h', 'src/core/client_channel/subchannel_stream_client.h', + 'src/core/client_channel/subchannel_stream_limiter.h', 'src/core/config/config_vars.h', 'src/core/config/core_configuration.h', 'src/core/config/load_config.h', diff --git a/grpc.gemspec b/grpc.gemspec index c9381299d0114..38abdfa782a83 100644 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -227,6 +227,8 @@ Gem::Specification.new do |s| s.files += %w( src/core/client_channel/subchannel_pool_interface.h ) s.files += %w( src/core/client_channel/subchannel_stream_client.cc ) s.files += %w( src/core/client_channel/subchannel_stream_client.h ) + s.files += %w( src/core/client_channel/subchannel_stream_limiter.cc ) + s.files += %w( src/core/client_channel/subchannel_stream_limiter.h ) s.files += %w( src/core/config/config_vars.cc ) s.files += %w( src/core/config/config_vars.h ) s.files += %w( src/core/config/config_vars_non_generated.cc ) diff --git a/package.xml b/package.xml index 7d0ba846a3f00..b1561d4ed0d63 100644 --- a/package.xml +++ b/package.xml @@ -209,6 +209,8 @@ + + diff --git a/src/core/BUILD b/src/core/BUILD index 29fdfc73a9eb8..c90e25814fd72 100644 --- a/src/core/BUILD +++ b/src/core/BUILD @@ -3762,6 +3762,7 @@ grpc_cc_library( external_deps = [ "absl/functional:any_invocable", ], + visibility = ["//bazel:client_channel_internal_header"], deps = [ "arena", "call_destination", diff --git a/src/core/client_channel/buffered_call.cc b/src/core/client_channel/buffered_call.cc index 82b779a4f0c70..6eb4f37ea8a0e 100644 --- a/src/core/client_channel/buffered_call.cc +++ b/src/core/client_channel/buffered_call.cc @@ -111,7 +111,8 @@ void BufferedCall::ResumePendingBatchInCallCombiner( // This is called via the call combiner, so access to calld is synchronized. void BufferedCall::Resume( - absl::AnyInvocable start_batch) { + absl::AnyInvocable start_batch, + YieldCallCombinerPredicate yield_call_combiner_predicate) { if (GRPC_TRACE_FLAG_ENABLED_OBJ(*tracer_)) { size_t num_batches = 0; for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) { @@ -133,8 +134,11 @@ void BufferedCall::Resume( batch = nullptr; } } - // Note: This will release the call combiner. - closures.RunClosures(call_combiner_); + if (yield_call_combiner_predicate(closures)) { + closures.RunClosures(call_combiner_); + } else { + closures.RunClosuresWithoutYielding(call_combiner_); + } } } // namespace grpc_core diff --git a/src/core/client_channel/buffered_call.h b/src/core/client_channel/buffered_call.h index 395348d0c022c..08379ce4a41da 100644 --- a/src/core/client_channel/buffered_call.h +++ b/src/core/client_channel/buffered_call.h @@ -45,11 +45,6 @@ class BufferedCall { // Must be called from within the call combiner. void EnqueueBatch(grpc_transport_stream_op_batch* batch); - // Resumes all queued batches by passing them to start_batch(). - // Must be called from within the call combiner. - void Resume( - absl::AnyInvocable start_batch); - // A predicate type and some useful implementations for Fail(). typedef bool (*YieldCallCombinerPredicate)( const CallCombinerClosureList& closures); @@ -63,6 +58,17 @@ class BufferedCall { const CallCombinerClosureList& closures) { return closures.size() > 0; } + + // Resumes all queued batches by passing them to start_batch(). + // Must be called from within the call combiner. + void Resume( + absl::AnyInvocable start_batch) { + Resume(std::move(start_batch), YieldCallCombiner); + } + void Resume( + absl::AnyInvocable start_batch, + YieldCallCombinerPredicate yield_call_combiner_predicate); + // Fails all queued batches. // Must be called from within the call combiner. // If yield_call_combiner_predicate returns true, assumes responsibility for diff --git a/src/core/client_channel/client_channel_internal.h b/src/core/client_channel/client_channel_internal.h index 392cfc18d854e..ca14d8fd36e7b 100644 --- a/src/core/client_channel/client_channel_internal.h +++ b/src/core/client_channel/client_channel_internal.h @@ -45,6 +45,11 @@ #define GRPC_ARG_MAX_CONNECTIONS_PER_SUBCHANNEL \ "grpc.internal.max_connections_per_subchannel" +// EXPERIMENTAL: Fail requests at the client if the client is over max +// concurrent streams, so they may be retried elsewhere. +#define GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT \ + "grpc.http.max_concurrent_streams_reject_on_client" + namespace grpc_core { // Internal type for LB call state interface. Provides an interface for diff --git a/src/core/client_channel/subchannel.cc b/src/core/client_channel/subchannel.cc index 2b7c1ef0064d6..8524e02757b7c 100644 --- a/src/core/client_channel/subchannel.cc +++ b/src/core/client_channel/subchannel.cc @@ -32,8 +32,10 @@ #include "src/core/call/interception_chain.h" #include "src/core/channelz/channel_trace.h" #include "src/core/channelz/channelz.h" +#include "src/core/client_channel/buffered_call.h" #include "src/core/client_channel/client_channel_internal.h" #include "src/core/client_channel/subchannel_pool_interface.h" +#include "src/core/client_channel/subchannel_stream_limiter.h" #include "src/core/config/core_configuration.h" #include "src/core/handshaker/proxy_mapper_registry.h" #include "src/core/lib/address_utils/sockaddr_utils.h" @@ -1061,9 +1063,14 @@ OldSubchannel::GetConnectedSubchannel() { // class NewSubchannel::ConnectedSubchannel - : public RefCounted { + : public DualRefCounted { public: + ~ConnectedSubchannel() override { + subchannel_.reset(DEBUG_LOCATION, "ConnectedSubchannel"); + } + const ChannelArgs& args() const { return args_; } + NewSubchannel* subchannel() const { return subchannel_.get(); } virtual void StartWatch( grpc_pollset_set* interested_parties, @@ -1079,15 +1086,41 @@ class NewSubchannel::ConnectedSubchannel grpc_error_handle* error) = 0; virtual void Ping(grpc_closure* on_initiate, grpc_closure* on_ack) = 0; + // Returns true if there is quota for another RPC to start on this + // connection. + GRPC_MUST_USE_RESULT bool SetMaxConcurrentStreams( + uint32_t max_concurrent_streams) { + return stream_limiter_.SetMaxConcurrentStreams(max_concurrent_streams); + } + + // Returns true if the RPC can start. + bool GetQuotaForRpc() { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << subchannel_.get() << " connection " << this + << ": attempting to get quota for an RPC..."; + bool result = stream_limiter_.GetQuotaForRpc(); + GRPC_TRACE_LOG(subchannel_call, INFO) << " quota acquired: " << result; + return result; + } + + // Returns true if this RPC finishing brought the connection below quota. + bool ReturnQuotaForRpc() { return stream_limiter_.ReturnQuotaForRpc(); } + protected: - explicit ConnectedSubchannel(const ChannelArgs& args) - : RefCounted( + explicit ConnectedSubchannel(WeakRefCountedPtr subchannel, + const ChannelArgs& args, + uint32_t max_concurrent_streams) + : DualRefCounted( GRPC_TRACE_FLAG_ENABLED(subchannel_refcount) ? "ConnectedSubchannel" : nullptr), - args_(args) {} + subchannel_(std::move(subchannel)), + args_(args), + stream_limiter_(max_concurrent_streams) {} private: + WeakRefCountedPtr subchannel_; ChannelArgs args_; + SubchannelStreamLimiter stream_limiter_; }; // @@ -1098,13 +1131,16 @@ class NewSubchannel::LegacyConnectedSubchannel final : public ConnectedSubchannel { public: LegacyConnectedSubchannel( + WeakRefCountedPtr subchannel, RefCountedPtr channel_stack, const ChannelArgs& args, - RefCountedPtr channelz_node) - : ConnectedSubchannel(args), + RefCountedPtr channelz_node, + uint32_t max_concurrent_streams) + : ConnectedSubchannel(std::move(subchannel), args, + max_concurrent_streams), channelz_node_(std::move(channelz_node)), channel_stack_(std::move(channel_stack)) {} - ~LegacyConnectedSubchannel() override { + void Orphaned() override { channel_stack_.reset(DEBUG_LOCATION, "ConnectedSubchannel"); } @@ -1181,6 +1217,10 @@ class NewSubchannel::LegacyConnectedSubchannel final static void Destroy(void* arg, grpc_error_handle error); + // Returns the quota for this RPC. If that brings the connection + // below quota, then try to drain the queue. + void MaybeReturnQuota(); + RefCountedPtr connected_subchannel_; grpc_closure* after_call_stack_destroy_ = nullptr; // State needed to support channelz interception of recv trailing metadata. @@ -1188,6 +1228,7 @@ class NewSubchannel::LegacyConnectedSubchannel final grpc_closure* original_recv_trailing_metadata_ = nullptr; grpc_metadata_batch* recv_trailing_metadata_ = nullptr; Timestamp deadline_; + bool returned_quota_ = false; }; RefCountedPtr channelz_node_; @@ -1203,6 +1244,9 @@ NewSubchannel::LegacyConnectedSubchannel::SubchannelCall::SubchannelCall( CreateCallArgs args, grpc_error_handle* error) : connected_subchannel_(std::move(connected_subchannel)), deadline_(args.deadline) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << connected_subchannel_->subchannel() << " connection " + << connected_subchannel_.get() << ": created call " << this; grpc_call_stack* callstk = SUBCHANNEL_CALL_TO_CALL_STACK(this); const grpc_call_element_args call_args = { callstk, // call_stack @@ -1226,6 +1270,10 @@ NewSubchannel::LegacyConnectedSubchannel::SubchannelCall::SubchannelCall( void NewSubchannel::LegacyConnectedSubchannel::SubchannelCall:: StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << connected_subchannel_->subchannel() << " connection " + << connected_subchannel_.get() << " call " << this << ": starting batch: " + << grpc_transport_stream_op_batch_string(batch, false); MaybeInterceptRecvTrailingMetadata(batch); grpc_call_stack* call_stack = SUBCHANNEL_CALL_TO_CALL_STACK(this); grpc_call_element* top_elem = grpc_call_stack_element(call_stack, 0); @@ -1254,6 +1302,9 @@ void NewSubchannel::LegacyConnectedSubchannel::SubchannelCall::Unref( void NewSubchannel::LegacyConnectedSubchannel::SubchannelCall::Destroy( void* arg, grpc_error_handle /*error*/) { SubchannelCall* self = static_cast(arg); + // Just in case we didn't already take care of this in the + // recv_trailing_metadata callback, return the quota now. + self->MaybeReturnQuota(); // Keep some members before destroying the subchannel call. grpc_closure* after_call_stack_destroy = self->after_call_stack_destroy_; RefCountedPtr connected_subchannel = @@ -1274,8 +1325,6 @@ void NewSubchannel::LegacyConnectedSubchannel::SubchannelCall:: MaybeInterceptRecvTrailingMetadata(grpc_transport_stream_op_batch* batch) { // only intercept payloads with recv trailing. if (!batch->recv_trailing_metadata) return; - // only add interceptor is channelz is enabled. - if (connected_subchannel_->channelz_node_ == nullptr) return; GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_, RecvTrailingMetadataReady, this, grpc_schedule_on_exec_ctx); // save some state needed for the interception callback. @@ -1292,19 +1341,37 @@ void NewSubchannel::LegacyConnectedSubchannel::SubchannelCall:: RecvTrailingMetadataReady(void* arg, grpc_error_handle error) { SubchannelCall* call = static_cast(arg); GRPC_CHECK_NE(call->recv_trailing_metadata_, nullptr); - grpc_status_code status = GRPC_STATUS_OK; - GetCallStatus(&status, call->deadline_, call->recv_trailing_metadata_, error); - channelz::SubchannelNode* channelz_node = - call->connected_subchannel_->channelz_node_.get(); - GRPC_CHECK_NE(channelz_node, nullptr); - if (status == GRPC_STATUS_OK) { - channelz_node->RecordCallSucceeded(); - } else { - channelz_node->RecordCallFailed(); + // Return MAX_CONCURRENT_STREAMS quota. + call->MaybeReturnQuota(); + // If channelz is enabled, record the success or failure of the call. + if (auto* channelz_node = call->connected_subchannel_->channelz_node_.get(); + channelz_node != nullptr) { + grpc_status_code status = GRPC_STATUS_OK; + GetCallStatus(&status, call->deadline_, call->recv_trailing_metadata_, + error); + GRPC_CHECK_NE(channelz_node, nullptr); + if (status == GRPC_STATUS_OK) { + channelz_node->RecordCallSucceeded(); + } else { + channelz_node->RecordCallFailed(); + } } Closure::Run(DEBUG_LOCATION, call->original_recv_trailing_metadata_, error); } +void NewSubchannel::LegacyConnectedSubchannel::SubchannelCall:: + MaybeReturnQuota() { + if (returned_quota_) return; // Already returned. + returned_quota_ = true; + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << connected_subchannel_->subchannel() << " connection " + << connected_subchannel_.get() << ": call " << this + << " complete, returning quota"; + if (connected_subchannel_->ReturnQuotaForRpc()) { + connected_subchannel_->subchannel()->RetryQueuedRpcs(); + } +} + void NewSubchannel::LegacyConnectedSubchannel::SubchannelCall:: IncrementRefCount() { GRPC_CALL_STACK_REF(SUBCHANNEL_CALL_TO_CALL_STACK(this), ""); @@ -1315,6 +1382,269 @@ void NewSubchannel::LegacyConnectedSubchannel::SubchannelCall:: GRPC_CALL_STACK_REF(SUBCHANNEL_CALL_TO_CALL_STACK(this), reason); } +// +// NewSubchannel::QueuedCall +// + +class NewSubchannel::QueuedCall final : public Subchannel::Call { + public: + QueuedCall(WeakRefCountedPtr subchannel, CreateCallArgs args); + ~QueuedCall() override; + + void StartTransportStreamOpBatch( + grpc_transport_stream_op_batch* batch) override; + + void SetAfterCallStackDestroy(grpc_closure* closure) override; + + // Interface of RefCounted<>. + // When refcount drops to 0, the dtor is called, but we do not + // free memory, because it's allocated on the arena. + void Unref() override { + if (ref_count_.Unref()) this->~QueuedCall(); + } + void Unref(const DebugLocation& location, const char* reason) override { + if (ref_count_.Unref(location, reason)) this->~QueuedCall(); + } + + void ResumeOnConnectionLocked(ConnectedSubchannel* connected_subchannel) + ABSL_EXCLUSIVE_LOCKS_REQUIRED(&NewSubchannel::mu_); + + void FailLocked(absl::Status status) + ABSL_EXCLUSIVE_LOCKS_REQUIRED(&NewSubchannel::mu_); + + private: + // Allow RefCountedPtr<> to access IncrementRefCount(). + template + friend class RefCountedPtr; + + class Canceller; + + // Interface of RefCounted<>. + void IncrementRefCount() override { ref_count_.Ref(); } + void IncrementRefCount(const DebugLocation& location, + const char* reason) override { + ref_count_.Ref(location, reason); + } + + static void RecvTrailingMetadataReady(void* arg, grpc_error_handle error); + + RefCount ref_count_; + WeakRefCountedPtr subchannel_; + CreateCallArgs args_; + + // Note that unlike in the resolver and LB code, the subchannel code + // adds the call to the queue before adding batches to buffered_call_, + // so it's possible that the subchannel will get quota for the call + // and try to resume it before buffered_call_ contains any batches. + // In that case, we will not be holding the call combiner here, so we + // need a mutex for synchronization. + Mutex mu_ ABSL_ACQUIRED_AFTER(NewSubchannel::mu_); + grpc_closure* after_call_stack_destroy_ ABSL_GUARDED_BY(&mu_) = nullptr; + grpc_error_handle cancel_error_ ABSL_GUARDED_BY(&mu_); + BufferedCall buffered_call_ ABSL_GUARDED_BY(&mu_); + RefCountedPtr subchannel_call_ ABSL_GUARDED_BY(&mu_); + + // The queue holds a raw pointer to this QueuedCall object, and this + // is a reference to that pointer. If the call gets cancelled while + // in the queue, we set this pointer to null. The queuing code knows to + // ignore null pointers when draining the queue, which ensures that we + // don't try to dequeue this call after it's been cancelled. + QueuedCall*& queue_entry_; + + Canceller* canceller_ ABSL_GUARDED_BY(&NewSubchannel::mu_); + + std::atomic is_retriable_{false}; + grpc_closure recv_trailing_metadata_ready_; + grpc_closure* original_recv_trailing_metadata_ = nullptr; + grpc_metadata_batch* recv_trailing_metadata_ = nullptr; +}; + +// Handles call combiner cancellation. We don't yield the call combiner +// when queuing the call, which means that if the call gets cancelled +// while we're queued, the surface will be unable to immediately start the +// cancel_stream batch to let us know about the cancellation. Instead, +// this object registers itself with the call combiner to be called if +// the call is cancelled. In that case, it removes the call from the +// queue and fails any pending batches, thus immediately releasing the +// call combiner and allowing the cancellation to proceed. +class NewSubchannel::QueuedCall::Canceller final { + public: + explicit Canceller(RefCountedPtr call) : call_(std::move(call)) { + GRPC_CLOSURE_INIT(&cancel_, CancelLocked, this, nullptr); + call_->args_.call_combiner->SetNotifyOnCancel(&cancel_); + } + + private: + static void CancelLocked(void* arg, grpc_error_handle error) { + auto* self = static_cast(arg); + bool cancelled = false; + { + MutexLock lock(&self->call_->subchannel_->mu_); + if (self->call_->canceller_ == self && !error.ok()) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << self->call_->subchannel_.get() + << " queued call " << self->call_.get() + << ": call combiner canceller called"; + // Remove from queue. + self->call_->queue_entry_ = nullptr; + cancelled = true; + } + } + if (cancelled) { + MutexLock lock(&self->call_->mu_); + // Fail pending batches on the call. + self->call_->buffered_call_.Fail( + error, BufferedCall::YieldCallCombinerIfPendingBatchesFound); + } + delete self; + } + + RefCountedPtr call_; + grpc_closure cancel_; +}; + +NewSubchannel::QueuedCall::QueuedCall( + WeakRefCountedPtr subchannel, CreateCallArgs args) + : subchannel_(std::move(subchannel)), + args_(args), + buffered_call_(args_.call_combiner, &subchannel_call_trace), + queue_entry_(subchannel_->queued_calls_.emplace_back(this)) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << subchannel_.get() << ": created queued call " << this + << ", queue size=" << subchannel_->queued_calls_.size(); + canceller_ = new Canceller(Ref().TakeAsSubclass()); +} + +NewSubchannel::QueuedCall::~QueuedCall() { + GRPC_TRACE_LOG(subchannel_call, INFO) << "subchannel " << subchannel_.get() + << ": destroying queued call " << this; + if (after_call_stack_destroy_ != nullptr) { + ExecCtx::Run(DEBUG_LOCATION, after_call_stack_destroy_, absl::OkStatus()); + } +} + +void NewSubchannel::QueuedCall::SetAfterCallStackDestroy( + grpc_closure* closure) { + GRPC_CHECK_NE(closure, nullptr); + MutexLock lock(&mu_); + if (subchannel_call_ != nullptr) { + subchannel_call_->SetAfterCallStackDestroy(closure); + } else { + GRPC_CHECK_EQ(after_call_stack_destroy_, nullptr); + after_call_stack_destroy_ = closure; + } +} + +void NewSubchannel::QueuedCall::StartTransportStreamOpBatch( + grpc_transport_stream_op_batch* batch) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << subchannel_.get() << " queued call " << this + << ": starting batch: " + << grpc_transport_stream_op_batch_string(batch, false); + MutexLock lock(&mu_); + // If we already have a real subchannel call, pass the batch down to it. + if (subchannel_call_ != nullptr) { + subchannel_call_->StartTransportStreamOpBatch(batch); + return; + } + // Intercept recv_trailing_metadata, so that we can mark the call as + // eligible for transparent retries if we fail it due to all + // connections failing. + if (batch->recv_trailing_metadata) { + GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_, RecvTrailingMetadataReady, + this, grpc_schedule_on_exec_ctx); + GRPC_CHECK_EQ(recv_trailing_metadata_, nullptr); + recv_trailing_metadata_ = + batch->payload->recv_trailing_metadata.recv_trailing_metadata; + original_recv_trailing_metadata_ = + batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready; + batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready = + &recv_trailing_metadata_ready_; + } + // If we've previously been cancelled, immediately fail the new batch. + if (!cancel_error_.ok()) { + // Note: This will release the call combiner. + grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_, + args_.call_combiner); + return; + } + // Handle cancellation batches. + if (batch->cancel_stream) { + cancel_error_ = batch->payload->cancel_stream.cancel_error; + buffered_call_.Fail(cancel_error_, BufferedCall::NoYieldCallCombiner); + // Note: This will release the call combiner. + grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_, + args_.call_combiner); + return; + } + // Enqueue the batch. + buffered_call_.EnqueueBatch(batch); + // We hold on to the call combiner for the send_initial_metadata batch, + // but yield it for other batches. This ensures that we are holding on + // to the call combiner exactly once when we are ready to resume. + if (!batch->send_initial_metadata) { + GRPC_CALL_COMBINER_STOP(args_.call_combiner, + "batch does not include send_initial_metadata"); + } +} + +void NewSubchannel::QueuedCall::RecvTrailingMetadataReady( + void* arg, grpc_error_handle error) { + QueuedCall* call = static_cast(arg); + GRPC_CHECK_NE(call->recv_trailing_metadata_, nullptr); + if (call->is_retriable_.load()) { + call->recv_trailing_metadata_->Set(GrpcStreamNetworkState(), + GrpcStreamNetworkState::kNotSentOnWire); + } + Closure::Run(DEBUG_LOCATION, call->original_recv_trailing_metadata_, error); +} + +void NewSubchannel::QueuedCall::ResumeOnConnectionLocked( + ConnectedSubchannel* connected_subchannel) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << subchannel_.get() << " queued call " << this + << ": resuming on connected_subchannel " << connected_subchannel; + canceller_ = nullptr; + queue_entry_ = nullptr; + MutexLock lock(&mu_); + grpc_error_handle error; + subchannel_call_ = connected_subchannel->CreateCall(args_, &error); + if (after_call_stack_destroy_ != nullptr) { + subchannel_call_->SetAfterCallStackDestroy(after_call_stack_destroy_); + after_call_stack_destroy_ = nullptr; + } + // It's possible that the subchannel will get quota for the call + // and try to resume it before buffered_call_ contains any batches. + // In that case, we will not be holding the call combiner here, so we + // must not yeild it. That's why we use + // YieldCallCombinerIfPendingBatchesFound here. + if (!error.ok()) { + buffered_call_.Fail(error, + BufferedCall::YieldCallCombinerIfPendingBatchesFound); + } else { + buffered_call_.Resume( + [subchannel_call = + subchannel_call_](grpc_transport_stream_op_batch* batch) { + // This will release the call combiner. + subchannel_call->StartTransportStreamOpBatch(batch); + }, + BufferedCall::YieldCallCombinerIfPendingBatchesFound); + } +} + +void NewSubchannel::QueuedCall::FailLocked(absl::Status status) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << subchannel_.get() << " queued call " << this + << ": failing: " << status; + canceller_ = nullptr; + queue_entry_ = nullptr; + is_retriable_.store(true); + MutexLock lock(&mu_); + cancel_error_ = status; + buffered_call_.Fail(status, + BufferedCall::YieldCallCombinerIfPendingBatchesFound); +} + // // NewSubchannel::NewConnectedSubchannel // @@ -1339,13 +1669,20 @@ class NewSubchannel::NewConnectedSubchannel final : public ConnectedSubchannel { }; NewConnectedSubchannel( + WeakRefCountedPtr subchannel, RefCountedPtr call_destination, RefCountedPtr transport, - const ChannelArgs& args) - : ConnectedSubchannel(args), + const ChannelArgs& args, uint32_t max_concurrent_streams) + : ConnectedSubchannel(std::move(subchannel), args, + max_concurrent_streams), call_destination_(std::move(call_destination)), transport_(std::move(transport)) {} + void Orphaned() override { + call_destination_.reset(); + transport_.reset(); + } + void StartWatch( grpc_pollset_set*, OrphanablePtr watcher) override { @@ -1382,59 +1719,62 @@ class NewSubchannel::NewConnectedSubchannel final : public ConnectedSubchannel { class NewSubchannel::ConnectionStateWatcher final : public Transport::StateWatcher { public: - explicit ConnectionStateWatcher(WeakRefCountedPtr subchannel) - : subchannel_(std::move(subchannel)) {} - - ~ConnectionStateWatcher() override { - subchannel_.reset(DEBUG_LOCATION, "state_watcher"); - } + explicit ConnectionStateWatcher( + WeakRefCountedPtr connected_subchannel) + : connected_subchannel_(std::move(connected_subchannel)) {} void OnDisconnect(absl::Status status, DisconnectInfo disconnect_info) override { - MutexLock lock(&subchannel_->mu_); + NewSubchannel* subchannel = connected_subchannel_->subchannel(); + GRPC_TRACE_LOG(subchannel, INFO) + << "subchannel " << subchannel << " " << subchannel->key_.ToString() + << ": connected subchannel " << connected_subchannel_.get() + << " reports disconnection: " << status; + MutexLock lock(&subchannel->mu_); // Handle keepalive update. if (disconnect_info.keepalive_time.has_value()) { - subchannel_->ThrottleKeepaliveTimeLocked(*disconnect_info.keepalive_time); - subchannel_->watcher_list_.NotifyOnKeepaliveUpdateLocked( + subchannel->ThrottleKeepaliveTimeLocked(*disconnect_info.keepalive_time); + subchannel->watcher_list_.NotifyOnKeepaliveUpdateLocked( *disconnect_info.keepalive_time); } - // We shouldn't ever see OnDisconnect() more than once for a given - // connection, but we'll be defensive just in case: if the connected - // subchannel has already been cleared, then this becomes a no-op. - RefCountedPtr connected_subchannel = - std::move(subchannel_->connected_subchannel_); - if (connected_subchannel == nullptr) return; - GRPC_TRACE_LOG(subchannel, INFO) - << "subchannel " << subchannel_.get() << " " - << subchannel_->key_.ToString() << ": connected subchannel " - << connected_subchannel.get() << " reports disconnection: " << status; - // If the subchannel was created from an endpoint, then we report - // TRANSIENT_FAILURE here instead of IDLE. The subchannel will never - // leave TRANSIENT_FAILURE state, because there is no way for us to - // establish a new connection. Otherwise, we report IDLE here. - if (subchannel_->created_from_endpoint_) { - subchannel_->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE, - status); + // Remove the connection from the subchannel's list of connections. + subchannel->RemoveConnectionLocked(connected_subchannel_.get()); + // If this was the last connection, then fail all queued RPCs and + // update the connectivity state. + if (subchannel->connections_.empty()) { + subchannel->FailAllQueuedRpcsLocked( + absl::UnavailableError("subchannel lost all connections")); + subchannel->MaybeUpdateConnectivityStateLocked(); } else { - subchannel_->SetConnectivityStateLocked(GRPC_CHANNEL_IDLE, - absl::OkStatus()); + // Otherwise, retry queued RPCs, which may trigger a new + // connection attempt. + subchannel->RetryQueuedRpcsLocked(); } - subchannel_->backoff_.Reset(); + // Reset backoff. + subchannel->backoff_.Reset(); } void OnPeerMaxConcurrentStreamsUpdate( - uint32_t /*max_concurrent_streams*/, + uint32_t max_concurrent_streams, std::unique_ptr /*on_done*/) override { - // TODO(roth): Implement this as part of adding connection scaling. + NewSubchannel* subchannel = connected_subchannel_->subchannel(); + GRPC_TRACE_LOG(subchannel, INFO) + << "subchannel " << subchannel << " " << subchannel->key_.ToString() + << ": connection " << connected_subchannel_.get() + << ": setting MAX_CONCURRENT_STREAMS=" << max_concurrent_streams; + if (connected_subchannel_->SetMaxConcurrentStreams( + max_concurrent_streams)) { + subchannel->RetryQueuedRpcs(); + } } grpc_pollset_set* interested_parties() const override { - return subchannel_->pollset_set_; + return connected_subchannel_->subchannel()->pollset_set_; } private: - WeakRefCountedPtr subchannel_; + WeakRefCountedPtr connected_subchannel_; }; // @@ -1497,6 +1837,8 @@ NewSubchannel::NewSubchannel(SubchannelKey key, work_serializer_(args_.GetObjectRef()), backoff_(ParseArgsForBackoffValues(args_, &min_connect_timeout_)), event_engine_(args_.GetObjectRef()) { + GRPC_TRACE_LOG(subchannel, INFO) + << "subchannel " << this << " " << key_.ToString() << ": created"; // A grpc_init is added here to ensure that grpc_shutdown does not happen // until the subchannel is destroyed. Subchannels can persist longer than // channels because they maybe reused/shared among multiple channels. As a @@ -1560,7 +1902,7 @@ RefCountedPtr NewSubchannel::Create( // We don't interact with the subchannel pool in this case. // Instead, we unconditionally return the newly created subchannel. // Before returning, we explicitly trigger a connection attempt - // by calling RequestConnection(), which sets the subchannel’s + // by calling RequestConnection(), which sets the subchannel's // connectivity state to CONNECTING. c->RequestConnection(); return c; @@ -1604,11 +1946,14 @@ void NewSubchannel::WatchConnectivityState( grpc_pollset_set_add_pollset_set(pollset_set_, interested_parties); } work_serializer_.Run( - [watcher, state = state_, status = status_]() { + [watcher, state = state_, status = ConnectivityStatusToReportLocked()]() { watcher->OnConnectivityStateChange(state, status); }, DEBUG_LOCATION); watcher_list_.AddWatcherLocked(std::move(watcher)); + // The max_connections_per_subchannel setting may have changed, so + // this may trigger another connection attempt. + RetryQueuedRpcsLocked(); } void NewSubchannel::CancelConnectivityStateWatch( @@ -1622,6 +1967,9 @@ void NewSubchannel::CancelConnectivityStateWatch( } void NewSubchannel::RequestConnection() { + GRPC_TRACE_LOG(subchannel, INFO) + << "subchannel " << this << " " << key_.ToString() + << ": RequestConnection()"; MutexLock lock(&mu_); if (state_ == GRPC_CHANNEL_IDLE) { StartConnectingLocked(); @@ -1629,21 +1977,25 @@ void NewSubchannel::RequestConnection() { } void NewSubchannel::ResetBackoff() { + GRPC_TRACE_LOG(subchannel, INFO) + << "subchannel " << this << " " << key_.ToString() << ": ResetBackoff()"; // Hold a ref to ensure cancellation and subsequent deletion of the closure // does not eliminate the last ref and destroy the Subchannel before the // method returns. auto self = WeakRef(DEBUG_LOCATION, "ResetBackoff"); MutexLock lock(&mu_); backoff_.Reset(); - if (state_ == GRPC_CHANNEL_TRANSIENT_FAILURE && - event_engine_->Cancel(retry_timer_handle_)) { + if (retry_timer_handle_.has_value() && + event_engine_->Cancel(*retry_timer_handle_)) { OnRetryTimerLocked(); - } else if (state_ == GRPC_CHANNEL_CONNECTING) { + } else if (connection_attempt_in_flight_) { next_attempt_time_ = Timestamp::Now(); } } void NewSubchannel::Orphaned() { + GRPC_TRACE_LOG(subchannel, INFO) + << "subchannel " << this << " " << key_.ToString() << ": shutting down"; // The subchannel_pool is only used once here in this subchannel, so the // access can be outside of the lock. if (subchannel_pool_ != nullptr) { @@ -1654,7 +2006,10 @@ void NewSubchannel::Orphaned() { GRPC_CHECK(!shutdown_); shutdown_ = true; connector_.reset(); - connected_subchannel_.reset(); + connections_.clear(); + if (retry_timer_handle_.has_value()) { + event_engine_->Cancel(*retry_timer_handle_); + } } void NewSubchannel::GetOrAddDataProducer( @@ -1673,39 +2028,85 @@ void NewSubchannel::RemoveDataProducer(DataProducerInterface* data_producer) { } } -// Note: Must be called with a state that is different from the current state. -void NewSubchannel::SetConnectivityStateLocked(grpc_connectivity_state state, - const absl::Status& status) { - state_ = state; - if (status.ok()) { - status_ = status; - } else { - // Augment status message to include IP address. - status_ = absl::Status(status.code(), - absl::StrCat(grpc_sockaddr_to_uri(&key_.address()) - .value_or(""), - ": ", status.message())); - status.ForEachPayload( - [this](absl::string_view key, const absl::Cord& value) - // Want to use ABSL_EXCLUSIVE_LOCKS_REQUIRED(&mu_) here, - // but that won't work, because we can't pass the lock - // annotation through absl::Status::ForEachPayload(). - ABSL_NO_THREAD_SAFETY_ANALYSIS { status_.SetPayload(key, value); }); +namespace { + +absl::Status PrependAddressToStatusMessage(const SubchannelKey& key, + const absl::Status& status) { + return AddMessagePrefix( + grpc_sockaddr_to_uri(&key.address()).value_or(""), + status); +} + +} // namespace + +void NewSubchannel::SetLastFailureLocked(const absl::Status& status) { + // Augment status message to include IP address. + last_failure_status_ = PrependAddressToStatusMessage(key_, status); +} + +grpc_connectivity_state NewSubchannel::ComputeConnectivityStateLocked() const { + // If we have at least one connection, report READY. + if (!connections_.empty()) return GRPC_CHANNEL_READY; + // If we were created from an endpoint and the connection is closed, + // we have no way to create a new connection, so we report + // TRANSIENT_FAILURE, and we'll never leave that state. + if (created_from_endpoint_) return GRPC_CHANNEL_TRANSIENT_FAILURE; + // If there's a connection attempt in flight, report CONNECTING. + if (connection_attempt_in_flight_) return GRPC_CHANNEL_CONNECTING; + // If we're in backoff delay, report TRANSIENT_FAILURE. + if (retry_timer_handle_.has_value()) { + return GRPC_CHANNEL_TRANSIENT_FAILURE; } + // Otherwise, report IDLE. + return GRPC_CHANNEL_IDLE; +} + +absl::Status NewSubchannel::ConnectivityStatusToReportLocked() const { + // Report status in TRANSIENT_FAILURE state. + if (state_ == GRPC_CHANNEL_TRANSIENT_FAILURE) return last_failure_status_; + return absl::OkStatus(); +} + +void NewSubchannel::MaybeUpdateConnectivityStateLocked() { + // Determine what state we are in. + grpc_connectivity_state new_state = ComputeConnectivityStateLocked(); + // If we're already in that state, no need to report a change. + if (new_state == state_) return; + state_ = new_state; + absl::Status status = ConnectivityStatusToReportLocked(); + GRPC_TRACE_LOG(subchannel, INFO) + << "subchannel " << this << " " << key_.ToString() + << ": reporting connectivity state " << ConnectivityStateName(new_state) + << ", status: " << status; + // Update channelz. if (channelz_node_ != nullptr) { - channelz_node_->UpdateConnectivityState(state); + channelz_node_->UpdateConnectivityState(new_state); if (status.ok()) { GRPC_CHANNELZ_LOG(channelz_node_) << "Subchannel connectivity state changed to " - << ConnectivityStateName(state); + << ConnectivityStateName(new_state); } else { GRPC_CHANNELZ_LOG(channelz_node_) << "Subchannel connectivity state changed to " - << ConnectivityStateName(state) << ": " << status; + << ConnectivityStateName(new_state) << ": " << status; } } // Notify watchers. - watcher_list_.NotifyLocked(state, status_); + watcher_list_.NotifyLocked(new_state, status); +} + +bool NewSubchannel::RemoveConnectionLocked( + ConnectedSubchannel* connected_subchannel) { + for (auto it = connections_.begin(); it != connections_.end(); ++it) { + if (*it == connected_subchannel) { + GRPC_TRACE_LOG(subchannel, INFO) + << "subchannel " << this << " " << key_.ToString() + << ": removing connection " << connected_subchannel; + connections_.erase(it); + return true; + } + } + return false; } void NewSubchannel::OnRetryTimer() { @@ -1714,11 +2115,13 @@ void NewSubchannel::OnRetryTimer() { } void NewSubchannel::OnRetryTimerLocked() { + retry_timer_handle_.reset(); if (shutdown_) return; GRPC_TRACE_LOG(subchannel, INFO) << "subchannel " << this << " " << key_.ToString() - << ": backoff delay elapsed, reporting IDLE"; - SetConnectivityStateLocked(GRPC_CHANNEL_IDLE, absl::OkStatus()); + << ": backoff delay elapsed"; + RetryQueuedRpcsLocked(); // May trigger another connection attempt. + MaybeUpdateConnectivityStateLocked(); } void NewSubchannel::StartConnectingLocked() { @@ -1726,14 +2129,16 @@ void NewSubchannel::StartConnectingLocked() { const Timestamp now = Timestamp::Now(); const Timestamp min_deadline = now + min_connect_timeout_; next_attempt_time_ = now + backoff_.NextAttemptDelay(); - // Report CONNECTING. - SetConnectivityStateLocked(GRPC_CHANNEL_CONNECTING, absl::OkStatus()); + // Change connectivity state if needed. + connection_attempt_in_flight_ = true; + MaybeUpdateConnectivityStateLocked(); // Start connection attempt. SubchannelConnector::Args args; args.address = &address_for_connect_; args.interested_parties = pollset_set_; args.deadline = std::max(next_attempt_time_, min_deadline); - args.channel_args = args_; + args.channel_args = + args_.Set(GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT, true); WeakRef(DEBUG_LOCATION, "Connect").release(); // Ref held by callback. connector_->Connect(args, &connecting_result_, &on_connecting_finished_); } @@ -1748,6 +2153,7 @@ void NewSubchannel::OnConnectingFinished(void* arg, grpc_error_handle error) { } void NewSubchannel::OnConnectingFinishedLocked(grpc_error_handle error) { + connection_attempt_in_flight_ = false; if (shutdown_) { connecting_result_.Reset(); return; @@ -1768,34 +2174,33 @@ void NewSubchannel::OnConnectingFinishedLocked(grpc_error_handle error) { "remaining in TRANSIENT_FAILURE" : ", backing off for " + std::to_string(time_until_next_attempt.millis()) + " ms"); - SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE, - grpc_error_to_absl_status(error)); - if (created_from_endpoint_) return; - retry_timer_handle_ = event_engine_->RunAfter( - time_until_next_attempt, - [self = WeakRef(DEBUG_LOCATION, "RetryTimer") - .TakeAsSubclass()]() mutable { - { - ExecCtx exec_ctx; - self->OnRetryTimer(); - // Subchannel deletion might require an active ExecCtx. So if - // self.reset() is not called here, the WeakRefCountedPtr - // destructor may run after the ExecCtx declared in the callback - // is destroyed. Since subchannel may get destroyed when the - // WeakRefCountedPtr destructor runs, it may not have an active - // ExecCtx - thus leading to crashes. - self.reset(); - } - }); + if (!created_from_endpoint_) { + retry_timer_handle_ = event_engine_->RunAfter( + time_until_next_attempt, + [self = WeakRef(DEBUG_LOCATION, "RetryTimer") + .TakeAsSubclass()]() mutable { + { + ExecCtx exec_ctx; + self->OnRetryTimer(); + // Subchannel deletion might require an active ExecCtx. So if + // self.reset() is not called here, the WeakRefCountedPtr + // destructor may run after the ExecCtx declared in the callback + // is destroyed. Since subchannel may get destroyed when the + // WeakRefCountedPtr destructor runs, it may not have an active + // ExecCtx - thus leading to crashes. + self.reset(); + } + }); + } + SetLastFailureLocked(grpc_error_to_absl_status(error)); + MaybeUpdateConnectivityStateLocked(); } } bool NewSubchannel::PublishTransportLocked() { auto socket_node = connecting_result_.transport->GetSocketNode(); - connecting_result_.transport->StartWatch( - MakeRefCounted( - WeakRef(DEBUG_LOCATION, "state_watcher") - .TakeAsSubclass())); + Transport* transport = connecting_result_.transport; + RefCountedPtr connected_subchannel; if (connecting_result_.transport->filter_stack_transport() != nullptr) { // Construct channel stack. // Builder takes ownership of transport. @@ -1813,8 +2218,9 @@ bool NewSubchannel::PublishTransportLocked() { << ": error initializing subchannel stack: " << stack.status(); return false; } - connected_subchannel_ = MakeRefCounted( - std::move(*stack), args_, channelz_node_); + connected_subchannel = MakeRefCounted( + WeakRef().TakeAsSubclass(), std::move(*stack), args_, + channelz_node_, connecting_result_.max_concurrent_streams); } else { OrphanablePtr transport( std::exchange(connecting_result_.transport, nullptr) @@ -1852,44 +2258,156 @@ bool NewSubchannel::PublishTransportLocked() { << call_destination.status(); return false; } - connected_subchannel_ = MakeRefCounted( - std::move(*call_destination), std::move(transport_destination), args_); + connected_subchannel = MakeRefCounted( + WeakRef().TakeAsSubclass(), std::move(*call_destination), + std::move(transport_destination), args_, + connecting_result_.max_concurrent_streams); } connecting_result_.Reset(); // Publish. GRPC_TRACE_LOG(subchannel, INFO) << "subchannel " << this << " " << key_.ToString() - << ": new connected subchannel at " << connected_subchannel_.get(); + << ": new connected subchannel at " << connected_subchannel.get() + << ", max_concurrent_streams=" + << connecting_result_.max_concurrent_streams; if (channelz_node_ != nullptr) { if (socket_node != nullptr) { socket_node->AddParent(channelz_node_.get()); } } - // Report initial state. - SetConnectivityStateLocked(GRPC_CHANNEL_READY, absl::Status()); + transport->StartWatch( + MakeRefCounted(connected_subchannel->WeakRef())); + connections_.push_back(std::move(connected_subchannel)); + RetryQueuedRpcsLocked(); + MaybeUpdateConnectivityStateLocked(); return true; } RefCountedPtr NewSubchannel::CreateCall( CreateCallArgs args, grpc_error_handle* error) { - auto connected_subchannel = GetConnectedSubchannel(); - if (connected_subchannel == nullptr) return nullptr; + RefCountedPtr connected_subchannel; + { + MutexLock lock(&mu_); + // If we hit a race condition where the LB picker chose the subchannel + // at the same time as the last connection was closed, then tell the + // channel to re-queue the pick. + if (connections_.empty()) return nullptr; + // Otherwise, choose a connection. + // Optimization: If the queue is non-empty, then we know there won't be + // a connection that we can send this RPC on, so we don't bother looking. + if (queued_calls_.empty()) connected_subchannel = ChooseConnectionLocked(); + // If we don't have a connection to send the RPC on, queue it. + if (connected_subchannel == nullptr) { + // The QueuedCall object adds itself to queued_calls_. + auto queued_call = RefCountedPtr(args.arena->New( + WeakRef().TakeAsSubclass(), args)); + MaybeFailAllQueuedRpcsLocked(); + return queued_call; + } + } + // Found a connection, so create a call on it. + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << this << " " << key_.ToString() + << ": creating call on connection " << connected_subchannel.get(); return connected_subchannel->CreateCall(args, error); } RefCountedPtr NewSubchannel::call_destination() { - auto connected_subchannel = GetConnectedSubchannel(); + // TODO(roth): Implement connection scaling for v3. + RefCountedPtr connected_subchannel; + { + MutexLock lock(&mu_); + if (!connections_.empty()) connected_subchannel = connections_[0]; + } if (connected_subchannel == nullptr) return nullptr; return connected_subchannel->unstarted_call_destination(); } +RefCountedPtr +NewSubchannel::ChooseConnectionLocked() { + // Try to find a connection with quota available for the RPC. + for (auto& connection : connections_) { + if (connection->GetQuotaForRpc()) return connection; + } + // If we didn't find a connection for the RPC, we'll queue it. + // Trigger a new connection attempt if we need to scale up the number + // of connections. + if (connections_.size() < watcher_list_.GetMaxConnectionsPerSubchannel() && + !connection_attempt_in_flight_ && !retry_timer_handle_.has_value()) { + GRPC_TRACE_LOG(subchannel, INFO) + << "subchannel " << this << " " << key_.ToString() + << ": adding a new connection"; + StartConnectingLocked(); + } + return nullptr; +} + +void NewSubchannel::RetryQueuedRpcs() { + MutexLock lock(&mu_); + RetryQueuedRpcsLocked(); +} + +void NewSubchannel::RetryQueuedRpcsLocked() { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << this << " " << key_.ToString() + << ": retrying RPCs from queue, queue size=" << queued_calls_.size(); + while (!queued_calls_.empty()) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << " retrying first queued RPC, queue size=" << queued_calls_.size(); + QueuedCall* queued_call = queued_calls_.front(); + if (queued_call == nullptr) { + GRPC_TRACE_LOG(subchannel_call, INFO) << " RPC already cancelled"; + } else { + auto connected_subchannel = ChooseConnectionLocked(); + // If we don't have a connection to dispatch this RPC on, then + // we've drained as much from the queue as we can, so stop here. + if (connected_subchannel == nullptr) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << " no usable connection found; will stop retrying from queue"; + MaybeFailAllQueuedRpcsLocked(); + return; + } + GRPC_TRACE_LOG(subchannel_call, INFO) + << " starting RPC on connection " << connected_subchannel.get(); + queued_call->ResumeOnConnectionLocked(connected_subchannel.get()); + } + queued_calls_.pop_front(); + } +} + +void NewSubchannel::MaybeFailAllQueuedRpcsLocked() { + bool fail_instead_of_queuing = + args_.GetInt(GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT) + .value_or(false); + if (fail_instead_of_queuing && + connections_.size() == watcher_list_.GetMaxConnectionsPerSubchannel()) { + FailAllQueuedRpcsLocked( + absl::ResourceExhaustedError("subchannel at max number of connections, " + "but no quota to send RPC")); + } +} + +void NewSubchannel::FailAllQueuedRpcsLocked(absl::Status status) { + GRPC_TRACE_LOG(subchannel_call, INFO) + << "subchannel " << this << ": failing all queued RPCs: " << status; + status = PrependAddressToStatusMessage(key_, status); + for (QueuedCall* queued_call : queued_calls_) { + if (queued_call != nullptr) queued_call->FailLocked(status); + } + queued_calls_.clear(); +} + void NewSubchannel::Ping(absl::AnyInvocable) { // TODO(ctiller): Implement } absl::Status NewSubchannel::Ping(grpc_closure* on_initiate, grpc_closure* on_ack) { - auto connected_subchannel = GetConnectedSubchannel(); + RefCountedPtr connected_subchannel; + { + MutexLock lock(&mu_); + if (!connections_.empty()) connected_subchannel = connections_[0]; + } if (connected_subchannel == nullptr) { return absl::UnavailableError("no connection"); } @@ -1897,10 +2415,4 @@ absl::Status NewSubchannel::Ping(grpc_closure* on_initiate, return absl::OkStatus(); } -RefCountedPtr -NewSubchannel::GetConnectedSubchannel() { - MutexLock lock(&mu_); - return connected_subchannel_; -} - } // namespace grpc_core diff --git a/src/core/client_channel/subchannel.h b/src/core/client_channel/subchannel.h index b7aefabbdc080..ba55e5e0cc748 100644 --- a/src/core/client_channel/subchannel.h +++ b/src/core/client_channel/subchannel.h @@ -58,9 +58,8 @@ #include "absl/container/flat_hash_set.h" #include "absl/status/status.h" -/** This arg is intended for internal use only, primarily - * for passing endpoint information during subchannel creation or connection. - */ +// This arg is intended for internal use only, primarily for passing +// endpoint information during subchannel creation or connection. #define GRPC_ARG_SUBCHANNEL_ENDPOINT "grpc.internal.subchannel_endpoint" namespace grpc_core { @@ -571,14 +570,30 @@ class NewSubchannel final : public Subchannel { class ConnectionStateWatcher; + class QueuedCall; + // Tears down any existing connection, and arranges for destruction void Orphaned() override ABSL_LOCKS_EXCLUDED(mu_); - RefCountedPtr GetConnectedSubchannel(); + RefCountedPtr ChooseConnectionLocked() + ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_); + void RetryQueuedRpcs() ABSL_LOCKS_EXCLUDED(mu_); + void RetryQueuedRpcsLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_); + void MaybeFailAllQueuedRpcsLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_); + void FailAllQueuedRpcsLocked(absl::Status status) + ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_); - // Sets the subchannel's connectivity state to \a state. - void SetConnectivityStateLocked(grpc_connectivity_state state, - const absl::Status& status) + // Updates the subchannel's connectivity state. + void SetLastFailureLocked(const absl::Status& status) + ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_); + grpc_connectivity_state ComputeConnectivityStateLocked() const + ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_); + absl::Status ConnectivityStatusToReportLocked() const + ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_); + void MaybeUpdateConnectivityStateLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_); + + // Returns true if the connection was removed. + bool RemoveConnectionLocked(ConnectedSubchannel* connected_subchannel) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_); void ThrottleKeepaliveTimeLocked(Duration new_keepalive_time) @@ -621,6 +636,7 @@ class NewSubchannel final : public Subchannel { // Protects the other members. Mutex mu_; + bool connection_attempt_in_flight_ ABSL_GUARDED_BY(mu_) = false; bool shutdown_ ABSL_GUARDED_BY(mu_) = false; // Connectivity state tracking. @@ -631,20 +647,21 @@ class NewSubchannel final : public Subchannel { // - READY: connection attempt succeeded, connected_subchannel_ created // - TRANSIENT_FAILURE: connection attempt failed, retry timer pending grpc_connectivity_state state_ ABSL_GUARDED_BY(mu_) = GRPC_CHANNEL_IDLE; - absl::Status status_ ABSL_GUARDED_BY(mu_); + absl::Status last_failure_status_ ABSL_GUARDED_BY(mu_); // The list of connectivity state watchers. ConnectivityStateWatcherList watcher_list_ ABSL_GUARDED_BY(mu_); // Used for sending connectivity state notifications. WorkSerializer work_serializer_; - // Active connection, or null. - RefCountedPtr connected_subchannel_ ABSL_GUARDED_BY(mu_); + // Established connections. + std::vector> connections_ + ABSL_GUARDED_BY(mu_); // Backoff state. BackOff backoff_ ABSL_GUARDED_BY(mu_); Timestamp next_attempt_time_ ABSL_GUARDED_BY(mu_); - grpc_event_engine::experimental::EventEngine::TaskHandle retry_timer_handle_ - ABSL_GUARDED_BY(mu_); + std::optional + retry_timer_handle_ ABSL_GUARDED_BY(mu_); // Keepalive time period Duration keepalive_time_ ABSL_GUARDED_BY(mu_); @@ -653,6 +670,17 @@ class NewSubchannel final : public Subchannel { std::map data_producer_map_ ABSL_GUARDED_BY(mu_); std::shared_ptr event_engine_; + + // A queue of calls waiting to be dispatched to a connection. + // If a call is cancelled while in the queue, its entry will be reset + // to null, so we ignore null values when draining the queue. + // + // Note that each queued call holds a C++ reference to its entry in the + // queue, which it will set to null if it gets cancelled. Therefore, + // this data structure must guarantee that references to entries are not + // invalidated as entries are added or removed from the queue (i.e., + // std::vector<> would not work). + std::deque queued_calls_ ABSL_GUARDED_BY(mu_); }; } // namespace grpc_core diff --git a/src/core/client_channel/subchannel_stream_limiter.cc b/src/core/client_channel/subchannel_stream_limiter.cc new file mode 100644 index 0000000000000..6df100dc35e16 --- /dev/null +++ b/src/core/client_channel/subchannel_stream_limiter.cc @@ -0,0 +1,76 @@ +// +// Copyright 2026 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 "src/core/client_channel/subchannel_stream_limiter.h" + +namespace grpc_core { + +namespace { + +uint64_t MakeStreamCounts(uint32_t max_concurrent_streams, + uint32_t rpcs_in_flight) { + return (static_cast(max_concurrent_streams) << 32) + + static_cast(rpcs_in_flight); +} + +uint32_t GetMaxConcurrentStreams(uint64_t stream_counts) { + return static_cast(stream_counts >> 32); +} + +uint32_t GetRpcsInFlight(uint64_t stream_counts) { + return static_cast(stream_counts & 0xffffffffu); +} + +} // namespace + +SubchannelStreamLimiter::SubchannelStreamLimiter( + uint32_t max_concurrent_streams) + : stream_counts_(MakeStreamCounts(max_concurrent_streams, 0)) {} + +bool SubchannelStreamLimiter::SetMaxConcurrentStreams( + uint32_t max_concurrent_streams) { + uint64_t prev_stream_counts = stream_counts_.load(std::memory_order_acquire); + uint32_t rpcs_in_flight; + do { + rpcs_in_flight = GetRpcsInFlight(prev_stream_counts); + } while (!stream_counts_.compare_exchange_weak( + prev_stream_counts, + MakeStreamCounts(max_concurrent_streams, rpcs_in_flight), + std::memory_order_acq_rel, std::memory_order_acquire)); + return rpcs_in_flight < max_concurrent_streams; +} + +bool SubchannelStreamLimiter::GetQuotaForRpc() { + uint64_t prev_stream_counts = stream_counts_.load(std::memory_order_acquire); + do { + const uint32_t rpcs_in_flight = GetRpcsInFlight(prev_stream_counts); + const uint32_t max_concurrent_streams = + GetMaxConcurrentStreams(prev_stream_counts); + if (rpcs_in_flight == max_concurrent_streams) return false; + } while (!stream_counts_.compare_exchange_weak( + prev_stream_counts, prev_stream_counts + MakeStreamCounts(0, 1), + std::memory_order_acq_rel, std::memory_order_acquire)); + return true; +} + +bool SubchannelStreamLimiter::ReturnQuotaForRpc() { + const uint64_t prev_stream_counts = + stream_counts_.fetch_sub(MakeStreamCounts(0, 1)); + return GetRpcsInFlight(prev_stream_counts) == + GetMaxConcurrentStreams(prev_stream_counts); +} + +} // namespace grpc_core diff --git a/src/core/client_channel/subchannel_stream_limiter.h b/src/core/client_channel/subchannel_stream_limiter.h new file mode 100644 index 0000000000000..7ad089a282c66 --- /dev/null +++ b/src/core/client_channel/subchannel_stream_limiter.h @@ -0,0 +1,51 @@ +// +// Copyright 2026 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_CLIENT_CHANNEL_SUBCHANNEL_STREAM_LIMITER_H +#define GRPC_SRC_CORE_CLIENT_CHANNEL_SUBCHANNEL_STREAM_LIMITER_H + +#include +#include + +namespace grpc_core { + +class SubchannelStreamLimiter { + public: + explicit SubchannelStreamLimiter(uint32_t max_concurrent_streams); + + // Sets the maximum number of concurrent streams. + // Returns true if the current number of RPCs in flight is less than the new + // maximum. + bool SetMaxConcurrentStreams(uint32_t max_concurrent_streams); + + // Attempts to get quota for a new RPC. + // Returns true if quota was acquired, false otherwise. + bool GetQuotaForRpc(); + + // Returns quota for a completed RPC. + // Returns true if the connection is no longer above its quota. + bool ReturnQuotaForRpc(); + + private: + // First 32 bits are the MAX_CONCURRENT_STREAMS value reported by + // the transport. + // Last 32 bits are the current number of RPCs in flight on the connection. + std::atomic stream_counts_{0}; +}; + +} // namespace grpc_core + +#endif // GRPC_SRC_CORE_CLIENT_CHANNEL_SUBCHANNEL_STREAM_LIMITER_H diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc index 420b0f4aacd38..ff9f0b7f9abae 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc @@ -48,6 +48,7 @@ #include "src/core/call/metadata_batch.h" #include "src/core/call/metadata_info.h" #include "src/core/channelz/property_list.h" +#include "src/core/client_channel/client_channel_internal.h" #include "src/core/config/config_vars.h" #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h" #include "src/core/ext/transport/chttp2/transport/flow_control.h" diff --git a/src/core/ext/transport/chttp2/transport/transport_common.h b/src/core/ext/transport/chttp2/transport/transport_common.h index 685a1bfb73c55..26c01fb69195b 100644 --- a/src/core/ext/transport/chttp2/transport/transport_common.h +++ b/src/core/ext/transport/chttp2/transport/transport_common.h @@ -39,11 +39,6 @@ #define GRPC_ARG_MAX_CONCURRENT_STREAMS_OVERLOAD_PROTECTION \ "grpc.http.overload_protection" -// EXPERIMENTAL: Fail requests at the client if the client is over max -// concurrent streams, so they may be retried elsewhere. -#define GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT \ - "grpc.http.max_concurrent_streams_reject_on_client" - #define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2 #define GRPC_CHTTP2_PING_TIMEOUT_STR "ping timeout" diff --git a/src/core/lib/debug/trace_flags.cc b/src/core/lib/debug/trace_flags.cc index 6d7eae7cc02ef..89a8f0de65022 100644 --- a/src/core/lib/debug/trace_flags.cc +++ b/src/core/lib/debug/trace_flags.cc @@ -111,6 +111,7 @@ TraceFlag secure_endpoint_trace(false, "secure_endpoint"); TraceFlag server_channel_trace(false, "server_channel"); TraceFlag stateful_session_filter_trace(false, "stateful_session_filter"); TraceFlag subchannel_trace(false, "subchannel"); +TraceFlag subchannel_call_trace(false, "subchannel_call"); TraceFlag subchannel_pool_trace(false, "subchannel_pool"); TraceFlag tcp_trace(false, "tcp"); TraceFlag timer_trace(false, "timer"); @@ -193,6 +194,7 @@ const absl::flat_hash_map& GetAllTraceFlags() { {"server_channel", &server_channel_trace}, {"stateful_session_filter", &stateful_session_filter_trace}, {"subchannel", &subchannel_trace}, + {"subchannel_call", &subchannel_call_trace}, {"subchannel_pool", &subchannel_pool_trace}, {"tcp", &tcp_trace}, {"timer", &timer_trace}, diff --git a/src/core/lib/debug/trace_flags.h b/src/core/lib/debug/trace_flags.h index b6a39f3ddeba0..362f44ab256b9 100644 --- a/src/core/lib/debug/trace_flags.h +++ b/src/core/lib/debug/trace_flags.h @@ -109,6 +109,7 @@ extern TraceFlag secure_endpoint_trace; extern TraceFlag server_channel_trace; extern TraceFlag stateful_session_filter_trace; extern TraceFlag subchannel_trace; +extern TraceFlag subchannel_call_trace; extern TraceFlag subchannel_pool_trace; extern TraceFlag tcp_trace; extern TraceFlag timer_trace; diff --git a/src/core/lib/debug/trace_flags.yaml b/src/core/lib/debug/trace_flags.yaml index 8202d76c010bb..8a9d6542a6dab 100644 --- a/src/core/lib/debug/trace_flags.yaml +++ b/src/core/lib/debug/trace_flags.yaml @@ -294,6 +294,9 @@ stream_refcount: subchannel: default: false description: Connectivity state of subchannels. +subchannel_call: + default: false + description: Call handling in the subchannel. subchannel_pool: default: false description: Subchannel pool. diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index 37ba443b07fb5..7f1f35b31019b 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -336,7 +336,7 @@ description: Subchannel connection scaling support. expiry: 2026/07/01 owner: roth@google.com - test_tags: ["cpp_lb_end2end_test", "chttp2_keepalive_tests"] + test_tags: ["core_end2end_test", "cpp_lb_end2end_test", "chttp2_keepalive_tests"] - name: subchannel_wrapper_cleanup_on_orphan description: Fixes the subchannel wrapper to drop any non-cancelled watchers when diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 852c87bda736d..8c61f861b4e3c 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -59,6 +59,7 @@ 'src/core/client_channel/subchannel.cc', 'src/core/client_channel/subchannel_pool_interface.cc', 'src/core/client_channel/subchannel_stream_client.cc', + 'src/core/client_channel/subchannel_stream_limiter.cc', 'src/core/config/config_vars.cc', 'src/core/config/config_vars_non_generated.cc', 'src/core/config/core_configuration.cc', diff --git a/test/core/client_channel/BUILD b/test/core/client_channel/BUILD index cc1d6255ddbce..e80153daf4a16 100644 --- a/test/core/client_channel/BUILD +++ b/test/core/client_channel/BUILD @@ -249,3 +249,15 @@ grpc_fuzz_test( "//src/core:retry_interceptor", ], ) + +grpc_cc_test( + name = "subchannel_stream_limiter_test", + srcs = ["subchannel_stream_limiter_test.cc"], + external_deps = ["gtest"], + uses_event_engine = False, + uses_polling = False, + deps = [ + "//:grpc_client_channel", + "//test/core/test_util:grpc_test_util", + ], +) diff --git a/test/core/client_channel/subchannel_stream_limiter_test.cc b/test/core/client_channel/subchannel_stream_limiter_test.cc new file mode 100644 index 0000000000000..3bfd147ac2e59 --- /dev/null +++ b/test/core/client_channel/subchannel_stream_limiter_test.cc @@ -0,0 +1,79 @@ +// +// Copyright 2026 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 "src/core/client_channel/subchannel_stream_limiter.h" + +#include "gtest/gtest.h" + +namespace grpc_core { +namespace { + +TEST(SubchannelStreamLimiterTest, Basic) { + SubchannelStreamLimiter limiter(/*max_concurrent_streams=*/2); + // Get quota for first RPC. Should succeed. + EXPECT_TRUE(limiter.GetQuotaForRpc()); + // Get quota for second RPC. Should succeed. + EXPECT_TRUE(limiter.GetQuotaForRpc()); + // Get quota for third RPC. Should fail, because we're at the limit. + EXPECT_FALSE(limiter.GetQuotaForRpc()); + // Return quota. Should return true because we are now below the limit. + EXPECT_TRUE(limiter.ReturnQuotaForRpc()); + // Return quota. Should return false because we were already below the limit. + EXPECT_FALSE(limiter.ReturnQuotaForRpc()); + // Getting quota for another RPC should succeed now. + EXPECT_TRUE(limiter.GetQuotaForRpc()); +} + +TEST(SubchannelStreamLimiterTest, IncreaseLimit) { + SubchannelStreamLimiter limiter(/*max_concurrent_streams=*/1); + // Get quota. Should succeed. + EXPECT_TRUE(limiter.GetQuotaForRpc()); + // Getting quota again should fail, because we're at the limit. + EXPECT_FALSE(limiter.GetQuotaForRpc()); + // Increase limit to 2. Should return true because we now have more + // quota to give out. + EXPECT_TRUE(limiter.SetMaxConcurrentStreams(2)); + // We can now get that quota. + EXPECT_TRUE(limiter.GetQuotaForRpc()); + // But no more than what's been added. + EXPECT_FALSE(limiter.GetQuotaForRpc()); +} + +TEST(SubchannelStreamLimiterTest, DecreaseLimit) { + SubchannelStreamLimiter limiter(/*max_concurrent_streams=*/2); + // Allocate all quota. + EXPECT_TRUE(limiter.GetQuotaForRpc()); + EXPECT_TRUE(limiter.GetQuotaForRpc()); + // Decrease limit to 1. This puts us under water: the limit is 1 but + // there are 2 RPCs currently in flight. + // Returns false because there is no quota to start any more RPCs. + EXPECT_FALSE(limiter.SetMaxConcurrentStreams(1)); + // Return quota for one RPC. This puts us back to the limit (limit 1, + // and 1 RPC in flight), but there's still no quota to start any more RPCs, + // so it returns false. + EXPECT_FALSE(limiter.ReturnQuotaForRpc()); + // Return quota for the last RPC. Now we're under the limit, so it + // returns true. + EXPECT_TRUE(limiter.ReturnQuotaForRpc()); +} + +} // namespace +} // namespace grpc_core + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/test/core/client_channel/subchannel_test.cc b/test/core/client_channel/subchannel_test.cc index fd6428a6bec17..7e80ab9e1761f 100644 --- a/test/core/client_channel/subchannel_test.cc +++ b/test/core/client_channel/subchannel_test.cc @@ -156,6 +156,7 @@ class SubchannelTest : public YodelTest { grpc_closure* notify) override { result->channel_args = args.channel_args; result->transport = MakeOrphanable(test_).release(); + result->max_concurrent_streams = std::numeric_limits::max(); ExecCtx::Run(DEBUG_LOCATION, notify, absl::OkStatus()); } diff --git a/test/core/end2end/grpc_core_end2end_test.bzl b/test/core/end2end/grpc_core_end2end_test.bzl index e05723aa33c83..8d6bd40743814 100644 --- a/test/core/end2end/grpc_core_end2end_test.bzl +++ b/test/core/end2end/grpc_core_end2end_test.bzl @@ -67,6 +67,7 @@ _DEPS = [ "//src/core:channel_init", "//src/core:channel_stack_type", "//src/core:chaotic_good", + "//src/core:client_channel_internal_header", "//src/core:closure", "//src/core:error", "//src/core:experiments", @@ -90,6 +91,7 @@ _DEPS = [ "//test/core/test_util:fail_first_call_filter", "//test/core/test_util:fake_stats_plugin", "//test/core/test_util:grpc_test_util", + "//test/core/test_util:scoped_env_var", "//test/core/test_util:test_call_creds", "//test/core/test_util:test_lb_policies", "//test/core/test_util:passthrough_endpoint", @@ -129,6 +131,7 @@ _TESTS = [ "client_streaming", "compressed_payload", "connectivity", + "connection_scaling", "default_host", "disappearing_server", "empty_batch", diff --git a/test/core/end2end/tests/connection_scaling.cc b/test/core/end2end/tests/connection_scaling.cc new file mode 100644 index 0000000000000..18b5323721079 --- /dev/null +++ b/test/core/end2end/tests/connection_scaling.cc @@ -0,0 +1,215 @@ +// +// Copyright 2026 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 +#include + +#include + +#include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/experiments/experiments.h" +#include "src/core/util/time.h" +#include "test/core/end2end/end2end_tests.h" +#include "test/core/test_util/scoped_env_var.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +namespace grpc_core { +namespace { + +// TODO(roth): There are a bunch of other test cases covered in the C++ +// e2e tests that should be covered here as well (or maybe instead). +// However, those test cases require more explicit control over +// connection establishment, and we don't currently have a good way to +// handle that in core e2e tests. Once the EventEngine migration is +// finished, we should be able to do this by injecting a custom EE impl +// that allows us to intercept connection attempts. + +CORE_END2END_TEST(Http2SingleHopTests, SubchannelConnectionScaling) { + SKIP_IF_MINSTACK(); + if (!IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + InitServer(DefaultServerArgs().Set(GRPC_ARG_MAX_CONCURRENT_STREAMS, 3)); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + InitClient(ChannelArgs().Set(GRPC_ARG_SERVICE_CONFIG, kServiceConfig)); + // Start 3 RPCs. Each one sends initial metadata and is seen by the server. + // First RPC. + auto c1 = NewClientCall("/alpha").Timeout(Duration::Seconds(1000)).Create(); + c1.NewBatch(101).SendInitialMetadata({}); + IncomingStatusOnClient server_status1; + c1.NewBatch(102).RecvStatusOnClient(server_status1); + Expect(101, true); + Step(); + auto s1 = RequestCall(201); + Expect(201, true); + Step(); + // Second RPC. + auto c2 = NewClientCall("/beta").Timeout(Duration::Seconds(1000)).Create(); + c2.NewBatch(301).SendInitialMetadata({}); + IncomingStatusOnClient server_status2; + c2.NewBatch(302).RecvStatusOnClient(server_status2); + Expect(301, true); + Step(); + auto s2 = RequestCall(401); + Expect(401, true); + Step(); + // Third RPC. + auto c3 = NewClientCall("/gamma").Timeout(Duration::Seconds(1000)).Create(); + c3.NewBatch(501).SendInitialMetadata({}); + IncomingStatusOnClient server_status3; + c3.NewBatch(502).RecvStatusOnClient(server_status3); + Expect(501, true); + Step(); + auto s3 = RequestCall(601); + Expect(601, true); + Step(); + // Those three RPCs should all be on the same connection. + EXPECT_EQ(s1.GetPeer(), s2.GetPeer()); + EXPECT_EQ(s1.GetPeer(), s3.GetPeer()); + // Start a 4th RPC, which should trigger a new connection. + auto c4 = NewClientCall("/delta").Timeout(Duration::Seconds(1000)).Create(); + c4.NewBatch(701).SendInitialMetadata({}); + IncomingStatusOnClient server_status4; + c4.NewBatch(702).RecvStatusOnClient(server_status4); + Expect(701, true); + Step(); + auto s4 = RequestCall(801); + Expect(801, true); + Step(); + // TODO(roth): Due to https://github.com/grpc/grpc/issues/35006, if + // the peer is a UDS, it will essentially always be a constant string. + // We should either fix that issue or maybe change this test to use + // channelz instead. + if (s1.GetPeer() != "unix:") EXPECT_NE(s1.GetPeer(), s4.GetPeer()); + // Clean up. + c1.Cancel(); + c2.Cancel(); + c3.Cancel(); + c4.Cancel(); + Expect(102, AnyStatus{}); + Expect(302, AnyStatus{}); + Expect(502, AnyStatus{}); + Expect(702, AnyStatus{}); + Step(); +} + +CORE_END2END_TEST(Http2SingleHopTests, HonorsMaxConnectionsPerSubchannel) { + SKIP_IF_MINSTACK(); + if (!IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + InitServer(DefaultServerArgs().Set(GRPC_ARG_MAX_CONCURRENT_STREAMS, 2)); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + InitClient(ChannelArgs().Set(GRPC_ARG_SERVICE_CONFIG, kServiceConfig)); + // Start 4 RPCs, which is enough to use all quota for all connections. + // Each one sends initial metadata and is seen by the server. + // First RPC. + auto c1 = NewClientCall("/alpha").Timeout(Duration::Seconds(1000)).Create(); + c1.NewBatch(101).SendInitialMetadata({}); + IncomingStatusOnClient server_status1; + c1.NewBatch(102).RecvStatusOnClient(server_status1); + Expect(101, true); + Step(); + auto s1 = RequestCall(201); + Expect(201, true); + Step(); + // Second RPC. + auto c2 = NewClientCall("/beta").Timeout(Duration::Seconds(1000)).Create(); + c2.NewBatch(301).SendInitialMetadata({}); + IncomingStatusOnClient server_status2; + c2.NewBatch(302).RecvStatusOnClient(server_status2); + Expect(301, true); + Step(); + auto s2 = RequestCall(401); + Expect(401, true); + Step(); + // First two RPCs should be on the same connection. + EXPECT_EQ(s1.GetPeer(), s2.GetPeer()); + // Third RPC. + auto c3 = NewClientCall("/gamma").Timeout(Duration::Seconds(1000)).Create(); + c3.NewBatch(501).SendInitialMetadata({}); + IncomingStatusOnClient server_status3; + c3.NewBatch(502).RecvStatusOnClient(server_status3); + Expect(501, true); + Step(); + auto s3 = RequestCall(601); + Expect(601, true); + Step(); + // Fourth RPC. + auto c4 = NewClientCall("/delta").Timeout(Duration::Seconds(1000)).Create(); + c4.NewBatch(701).SendInitialMetadata({}); + IncomingStatusOnClient server_status4; + c4.NewBatch(702).RecvStatusOnClient(server_status4); + Expect(701, true); + Step(); + auto s4 = RequestCall(801); + Expect(801, true); + Step(); + // Third and fourth RPCs should be on the same connection, which is + // different from the connection of the first two. + EXPECT_EQ(s3.GetPeer(), s4.GetPeer()); + // TODO(roth): Due to https://github.com/grpc/grpc/issues/35006, if + // the peer is a UDS, it will essentially always be a constant string. + // We should either fix that issue or maybe change this test to use + // channelz instead. + if (s1.GetPeer() != "unix:") EXPECT_NE(s1.GetPeer(), s3.GetPeer()); + // Start a 5th RPC, which will be queued. + auto c5 = NewClientCall("/epsilon").Timeout(Duration::Seconds(1000)).Create(); + c5.NewBatch(901).SendInitialMetadata({}); + IncomingStatusOnClient server_status5; + c5.NewBatch(902).RecvStatusOnClient(server_status5); + auto s5 = RequestCall(1001); + Step(); // Nothing completes yet. + // Cancel the first RPC, which will free up quota for the 5th RPC to + // be sent on the first connection. + c1.Cancel(); + Expect(102, AnyStatus{}); // First RPC sees status. + Expect(901, true); // Client sees 5th RPC start. + Expect(1001, true); // Server sees 5th RPC. + Step(); + // The 5th RPC should be sent on the first connection. + EXPECT_EQ(s5.GetPeer(), s1.GetPeer()); + // Clean up. + c2.Cancel(); + c3.Cancel(); + c4.Cancel(); + c5.Cancel(); + Expect(302, AnyStatus{}); + Expect(502, AnyStatus{}); + Expect(702, AnyStatus{}); + Expect(902, AnyStatus{}); + Step(); +} + +} // namespace +} // namespace grpc_core diff --git a/test/core/end2end/tests/max_concurrent_streams.cc b/test/core/end2end/tests/max_concurrent_streams.cc index 6cfc8264400db..890c901f59c95 100644 --- a/test/core/end2end/tests/max_concurrent_streams.cc +++ b/test/core/end2end/tests/max_concurrent_streams.cc @@ -21,6 +21,7 @@ #include +#include "src/core/client_channel/client_channel_internal.h" #include "src/core/ext/transport/chttp2/transport/internal.h" #include "src/core/lib/channel/channel_args.h" #include "src/core/util/time.h" @@ -393,7 +394,11 @@ CORE_END2END_TEST(Http2SingleHopTests, ServerMaxConcurrentStreams) { // The third request MUST fail with RESOURCE_EXHAUSTED. EXPECT_EQ(server_status3.status(), GRPC_STATUS_RESOURCE_EXHAUSTED); EXPECT_THAT(server_status3.message(), - ::testing::HasSubstr("Too many streams")); + ::testing::HasSubstr( + IsSubchannelConnectionScalingEnabled() + ? "subchannel at max number of connections, but no quota " + "to send RPC" + : "Too many streams")); } } // namespace diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index 608cf644d0d43..cec94ab4e0c84 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -834,6 +834,7 @@ grpc_cc_test( ":end2end_test_utils", ":test_service_impl", "//:backoff", + "//:channelz", "//:config_vars", "//:debug_location", "//:endpoint_addresses", @@ -855,6 +856,7 @@ grpc_cc_test( "//:sockaddr_utils", "//src/core:channel_args", "//src/core:client_channel_backup_poller", + "//src/core:client_channel_internal_header", "//src/core:config_selector", "//src/core:connectivity_state", "//src/core:env", @@ -863,6 +865,8 @@ grpc_cc_test( "//src/core:grpc_service_config", "//src/core:notification", "//src/core:time", + "//src/proto/grpc/channelz/v2:channelz_cc_proto", + "//src/proto/grpc/channelz/v2:property_list_cc_proto", "//src/proto/grpc/health/v1:health_cc_grpc", "//src/proto/grpc/testing:echo_cc_grpc", "//src/proto/grpc/testing:echo_messages_cc_proto", @@ -870,7 +874,9 @@ grpc_cc_test( "//test/core/test_util:grpc_test_util", "//test/core/test_util:grpc_test_util_base", "//test/core/test_util:postmortem", + "//test/core/test_util:scoped_env_var", "//test/core/test_util:test_lb_policies", + "//test/cpp/util:channelz_util", "//test/cpp/util:test_util", "@com_github_cncf_xds//xds/data/orca/v3:pkg_cc_proto", ], diff --git a/test/cpp/end2end/client_lb_end2end_test.cc b/test/cpp/end2end/client_lb_end2end_test.cc index c885ab5de371f..8e376d97747f3 100644 --- a/test/cpp/end2end/client_lb_end2end_test.cc +++ b/test/cpp/end2end/client_lb_end2end_test.cc @@ -38,7 +38,10 @@ #include #include +#include "src/core/channelz/channelz.h" +#include "src/core/channelz/channelz_registry.h" #include "src/core/client_channel/backup_poller.h" +#include "src/core/client_channel/client_channel_internal.h" #include "src/core/client_channel/config_selector.h" #include "src/core/client_channel/global_subchannel_pool.h" #include "src/core/config/config_vars.h" @@ -62,16 +65,20 @@ #include "src/core/util/ref_counted_ptr.h" #include "src/core/util/time.h" #include "src/cpp/server/secure_server_credentials.h" +#include "src/proto/grpc/channelz/v2/channelz.pb.h" +#include "src/proto/grpc/channelz/v2/property_list.pb.h" #include "src/proto/grpc/health/v1/health.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" #include "test/core/test_util/port.h" #include "test/core/test_util/postmortem.h" #include "test/core/test_util/resolve_localhost_ip46.h" +#include "test/core/test_util/scoped_env_var.h" #include "test/core/test_util/test_config.h" #include "test/core/test_util/test_lb_policies.h" #include "test/cpp/end2end/connection_attempt_injector.h" #include "test/cpp/end2end/end2end_test_utils.h" #include "test/cpp/end2end/test_service_impl.h" +#include "test/cpp/util/channelz_util.h" #include "test/cpp/util/credentials.h" #include "xds/data/orca/v3/orca_load_report.pb.h" #include "gmock/gmock.h" @@ -275,20 +282,27 @@ class ClientLbEnd2endTest : public ::testing::Test { void CreateServers( size_t num_servers, std::vector ports = {}, - std::shared_ptr server_creds = nullptr) { + std::shared_ptr server_creds = nullptr, + std::optional max_concurrent_streams = std::nullopt, + uint32_t idle_timeout_ms = 0) { servers_.clear(); for (size_t i = 0; i < num_servers; ++i) { int port = 0; if (ports.size() == num_servers) port = ports[i]; - servers_.emplace_back(new ServerData(port, server_creds)); + servers_.emplace_back(new ServerData( + port, server_creds, max_concurrent_streams, idle_timeout_ms)); } } void StartServer(size_t index) { servers_[index]->Start(); } - void StartServers(size_t num_servers, std::vector ports = {}, - std::shared_ptr server_creds = nullptr) { - CreateServers(num_servers, std::move(ports), std::move(server_creds)); + void StartServers( + size_t num_servers, std::vector ports = {}, + std::shared_ptr server_creds = nullptr, + std::optional max_concurrent_streams = std::nullopt, + uint32_t idle_timeout_ms = 0) { + CreateServers(num_servers, std::move(ports), std::move(server_creds), + max_concurrent_streams, idle_timeout_ms); for (size_t i = 0; i < num_servers; ++i) { StartServer(i); } @@ -410,6 +424,8 @@ class ClientLbEnd2endTest : public ::testing::Test { struct ServerData { const int port_; const std::shared_ptr server_creds_; + const std::optional max_concurrent_streams_; + const uint32_t idle_timeout_ms_; std::unique_ptr server_; MyTestServiceImpl service_; std::unique_ptr server_metric_recorder_; @@ -424,7 +440,9 @@ class ClientLbEnd2endTest : public ::testing::Test { bool started_ ABSL_GUARDED_BY(mu_) = false; explicit ServerData( - int port = 0, std::shared_ptr server_creds = nullptr) + int port = 0, std::shared_ptr server_creds = nullptr, + std::optional max_concurrent_streams = std::nullopt, + uint32_t idle_timeout_ms = 0) : port_(port > 0 ? port : grpc_pick_unused_port_or_die()), server_creds_( server_creds == nullptr @@ -432,6 +450,8 @@ class ClientLbEnd2endTest : public ::testing::Test { ServerCredentials>(new SecureServerCredentials( grpc_fake_transport_security_server_credentials_create())) : std::move(server_creds)), + max_concurrent_streams_(max_concurrent_streams), + idle_timeout_ms_(idle_timeout_ms), server_metric_recorder_(experimental::ServerMetricRecorder::Create()), orca_service_( server_metric_recorder_.get(), @@ -457,6 +477,14 @@ class ClientLbEnd2endTest : public ::testing::Test { server_creds_); builder.RegisterService(&service_); builder.RegisterService(&orca_service_); + if (max_concurrent_streams_.has_value()) { + builder.AddChannelArgument(GRPC_ARG_MAX_CONCURRENT_STREAMS, + *max_concurrent_streams_); + } + if (idle_timeout_ms_ > 0) { + builder.AddChannelArgument(GRPC_ARG_MAX_CONNECTION_IDLE_MS, + idle_timeout_ms_); + } if (enable_noop_health_check_service_) { builder.RegisterService(&noop_health_check_service_impl_); } @@ -3381,6 +3409,708 @@ TEST_P(WeightedRoundRobinParamTest, Basic) { EXPECT_EQ("weighted_round_robin", channel->GetLoadBalancingPolicyName()); } +// +// connection scaling tests +// + +class ConnectionScalingTest : public ClientLbEnd2endTest { + protected: + // A class for running a long-running RPC using the callback API. + class LongRunningRpc { + public: + ~LongRunningRpc() { CancelRpc(); } + + // Starts the RPC. + void StartRpc(grpc::testing::EchoTestService::Stub* stub) { + LOG(INFO) << "Starting long-running RPC..."; + request_.mutable_param()->set_client_cancel_after_us(1 * 1000 * 1000); + stub->async()->Echo(&context_, &request_, &response_, + [this](Status status) { + grpc_core::MutexLock lock(&mu_); + status_ = std::move(status); + cv_.Signal(); + }); + } + + // Cancels the RPC. + void CancelRpc() { + context_.TryCancel(); + (void)GetStatus(); + } + + // Gets the RPC's status. Blocks if the RPC is not yet complete. + Status GetStatus() { + grpc_core::MutexLock lock(&mu_); + while (!status_.has_value()) { + cv_.Wait(&mu_); + } + return *status_; + } + + private: + EchoRequest request_; + EchoResponse response_; + ClientContext context_; + grpc_core::Mutex mu_; + grpc_core::CondVar cv_; + std::optional status_ ABSL_GUARDED_BY(&mu_); + }; + + std::unique_ptr StartLongRunningRpc( + grpc::testing::EchoTestService::Stub* stub) { + auto rpc = std::make_unique(); + rpc->StartRpc(stub); + return rpc; + } + + bool WaitFor(absl::FunctionRef is_done, + absl::Duration timeout = absl::Seconds(10)) { + const absl::Time kDeadline = + absl::Now() + (timeout * grpc_test_slowdown_factor()); + while (!is_done()) { + if (absl::Now() > kDeadline) return false; + absl::SleepFor(absl::Milliseconds(1) * grpc_test_slowdown_factor()); + } + return true; + } +}; + +// TODO(roth): We'd also like to test the following connection scaling +// cases, but they're harder to cover: +// - one connection closes, but there is another still working, queued +// RPCs should trigger a connection attempt (need a way to trigger +// just one connection closing) +// - server changes MCS value dynamically (need a way to trigger the MCS +// change on the server -- might be able to do this after the MCS +// ResourceQuota changes land) + +TEST_F(ConnectionScalingTest, SingleConnection) { + const int kMaxConcurrentStreams = 3; + // Start a server with MAX_CONCURRENT_STREAMS set. + StartServers(1, {}, nullptr, + /*max_concurrent_streams=*/kMaxConcurrentStreams); + FakeResolverResponseGeneratorWrapper response_generator; + auto channel = BuildChannel("pick_first", response_generator); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts()); + // Start kMaxConcurrentStreams long-running RPCs. + std::vector> rpcs; + for (size_t i = 0; i < kMaxConcurrentStreams; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see the first kMaxConcurrentStreams RPCs. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + EXPECT_EQ(servers_[0]->service_.request_count(), kMaxConcurrentStreams); + // Server should see only one connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 1); + // Start another RPC, which should get queued. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // TODO(roth): Use a metric to determine when it's actually queued? + // Cancel one RPC to allow another one through. + LOG(INFO) << "Cancelling the first RPC..."; + rpcs[0].reset(); + // Now the server should see the 4th RPC. + LOG(INFO) << "Waiting for server to see the last RPC..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.request_count() == kMaxConcurrentStreams + 1; + })) << "timeout waiting for last RPC to start"; +} + +TEST_F(ConnectionScalingTest, MultipleConnections) { + if (!grpc_core::IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + grpc_core::testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + const int kMaxConcurrentStreams = 3; + // Start a server with MAX_CONCURRENT_STREAMS set. + StartServers(1, {}, nullptr, + /*max_concurrent_streams=*/kMaxConcurrentStreams); + FakeResolverResponseGeneratorWrapper response_generator; + auto channel = BuildChannel("pick_first", response_generator); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts(), kServiceConfig); + // Start kMaxConcurrentStreams long-running RPCs. + std::vector> rpcs; + for (size_t i = 0; i < kMaxConcurrentStreams; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see the first kMaxConcurrentStreams RPCs. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // There should be only one connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 1); + // Start another RPC, which will trigger the creation of a new + // connection. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // Now the server should see the new RPC. + LOG(INFO) << "Waiting for server to see the last RPC..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams + 1; + })) << "timeout waiting for last RPC to start"; + // And there should be another connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 2); +} + +TEST_F(ConnectionScalingTest, HonorsMaxConnectionsPerSubchannel) { + if (!grpc_core::IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + grpc_core::testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + const int kMaxConcurrentStreams = 2; + // Start a server with MAX_CONCURRENT_STREAMS set. + StartServers(1, {}, nullptr, + /*max_concurrent_streams=*/kMaxConcurrentStreams); + FakeResolverResponseGeneratorWrapper response_generator; + auto channel = BuildChannel("pick_first", response_generator); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts(), kServiceConfig); + // Start enough RPCs for 2 connections. + std::vector> rpcs; + const int kNumRpcs = kMaxConcurrentStreams * 2; + for (size_t i = 0; i < kNumRpcs; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see enough RPCs for the first two connections. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == kNumRpcs; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // There should be two connections. + EXPECT_EQ(servers_[0]->service_.clients().size(), 2); + // Start another RPC, which will wind up being queued. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // TODO(roth): Use a metric to determine when it's actually queued? + // Cancel the first RPC. + LOG(INFO) << "Cancelling the first RPC..."; + rpcs[0].reset(); + // Now the server should see the new RPC. + LOG(INFO) << "Waiting for server to see the last RPC..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.request_count() == kNumRpcs + 1; + })) << "timeout waiting for last RPC to start"; + // There should still be two connections. + EXPECT_EQ(servers_[0]->service_.clients().size(), 2); +} + +TEST_F(ConnectionScalingTest, + QueuedRpcsTriggerNewConnectionAttemptAfterBackoff) { + if (!grpc_core::IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + grpc_core::testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + const int kMaxConcurrentStreams = 3; + // Start a server with MAX_CONCURRENT_STREAMS set. + StartServers(1, {}, nullptr, + /*max_concurrent_streams=*/kMaxConcurrentStreams); + FakeResolverResponseGeneratorWrapper response_generator; + auto channel = BuildChannel("pick_first", response_generator); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts(), kServiceConfig); + // Start kMaxConcurrentStreams long-running RPCs. + std::vector> rpcs; + for (size_t i = 0; i < kMaxConcurrentStreams; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see the first kMaxConcurrentStreams RPCs. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // There should be only one connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 1); + // Intercept the next two connection attempts. + ConnectionAttemptInjector injector; + auto hold1 = injector.AddHold(servers_[0]->port_); + auto hold2 = injector.AddHold(servers_[0]->port_); + // Start another RPC, which will trigger the creation of a new + // connection. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // Fail the connection attempt. + hold1->Wait(); + hold1->Fail(absl::UnavailableError("nyet")); + // The failed connection attempt will put the subchannel into backoff, + // but the last RPC is still queued. When backoff expires, the + // subchannel will retry the queue, which will trigger a new + // connection attempt. + hold2->Wait(); + hold2->Resume(); + // Now the server should see the new RPC. + LOG(INFO) << "Waiting for server to see the last RPC..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams + 1; + })) << "timeout waiting for last RPC to start"; + // And there should be another connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 2); +} + +TEST_F(ConnectionScalingTest, QueuedRpcCancelled) { + if (!grpc_core::IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + grpc_core::testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + const int kMaxConcurrentStreams = 3; + // Start a server with MAX_CONCURRENT_STREAMS set. + StartServers(1, {}, nullptr, + /*max_concurrent_streams=*/kMaxConcurrentStreams); + FakeResolverResponseGeneratorWrapper response_generator; + auto channel = BuildChannel("pick_first", response_generator); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts(), kServiceConfig); + // Start kMaxConcurrentStreams long-running RPCs. + std::vector> rpcs; + for (size_t i = 0; i < kMaxConcurrentStreams; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see the first kMaxConcurrentStreams RPCs. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // There should be only one connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 1); + // Intercept the next connection attempt. + ConnectionAttemptInjector injector; + auto hold = injector.AddHold(servers_[0]->port_); + // Start another RPC, which will trigger the creation of a new + // connection. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // Wait for the connection attempt to start. + hold->Wait(); + // Start yet another RPC, which we'll use to know when the connection + // attempt is complete. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // Cancel the first queued RPC. + rpcs[kMaxConcurrentStreams].reset(); + // Allow the connection attempt to complete. + hold->Resume(); + // Now the server should see the new RPC. + LOG(INFO) << "Waiting for server to see the last RPC..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams + 1; + })) << "timeout waiting for last RPC to start"; + // And there should be another connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 2); +} + +TEST_F(ConnectionScalingTest, QueuedRpcsFailWhenLastConnectionCloses) { + if (!grpc_core::IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + grpc_core::testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + const int kMaxConcurrentStreams = 3; + // Start a server with MAX_CONCURRENT_STREAMS set. + StartServers(1, {}, nullptr, + /*max_concurrent_streams=*/kMaxConcurrentStreams); + FakeResolverResponseGeneratorWrapper response_generator; + // Disable retries, so that we can see the RPCs fail instead of being + // transparently retried. + ChannelArguments channel_args; + channel_args.SetInt(GRPC_ARG_ENABLE_RETRIES, 0); + auto channel = BuildChannel("pick_first", response_generator, channel_args); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts(), kServiceConfig); + // Start kMaxConcurrentStreams long-running RPCs. + std::vector> rpcs; + for (size_t i = 0; i < kMaxConcurrentStreams; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see the first kMaxConcurrentStreams RPCs. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // There should be only one connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 1); + // Intercept the next connection attempt. + ConnectionAttemptInjector injector; + auto hold = injector.AddHold(servers_[0]->port_); + // Start two more RPCs, which will trigger the creation of a new + // connection. When the connection attempt starts, we know that the + // subchannel has queued these RPCs. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // Wait for the connection attempt to start. + hold->Wait(); + // Shut down the server, which closes the existing connection. + servers_[0]->Shutdown(); + // The two queued RPCs should have failed. + for (size_t i = kMaxConcurrentStreams; i < kMaxConcurrentStreams + 2; ++i) { + auto& rpc = rpcs[i]; + Status status = rpc->GetStatus(); + EXPECT_EQ(status.error_code(), GRPC_STATUS_UNAVAILABLE); + EXPECT_THAT( + status.error_message(), + ::testing::MatchesRegex("(ipv6:%5B::1%5D|ipv4:127.0.0.1):[0-9]+: " + "subchannel lost all connections")); + rpc.reset(); + } + // Fail the connection attempt. + hold->Fail(absl::UnavailableError("lo")); +} + +TEST_F(ConnectionScalingTest, + QueuedRpcsTransparentlyRetriedWhenLastConnectionCloses) { + if (!grpc_core::IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + grpc_core::testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + const int kMaxConcurrentStreams = 3; + // Start two servers with MAX_CONCURRENT_STREAMS set. + StartServers(2, {}, nullptr, + /*max_concurrent_streams=*/kMaxConcurrentStreams); + // Channel initially talks only to the first server. + FakeResolverResponseGeneratorWrapper response_generator; + auto channel = BuildChannel("pick_first", response_generator); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts(0, 1), kServiceConfig); + // Start kMaxConcurrentStreams long-running RPCs. + std::vector> rpcs; + for (size_t i = 0; i < kMaxConcurrentStreams; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see the first kMaxConcurrentStreams RPCs. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // There should be only one connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 1); + // Intercept the next connection attempt. + ConnectionAttemptInjector injector; + auto hold = injector.AddHold(servers_[0]->port_); + // Start two more RPCs, which will trigger the creation of a new + // connection. When the connection attempt starts, we know that the + // subchannel has queued these RPCs. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // Wait for the connection attempt to start. + hold->Wait(); + // Send a resolver update to the channel pointing to the second server. + response_generator.SetNextResolution(GetServersPorts(1, 2), kServiceConfig); + // When pick_first sees the update, it will put the channel into IDLE state. + ASSERT_TRUE( + WaitForChannelState(channel.get(), [&](grpc_connectivity_state state) { + if (state == GRPC_CHANNEL_READY) return false; + EXPECT_EQ(state, GRPC_CHANNEL_IDLE); + return true; + })); + // Shut down the first server, which closes the existing connection. + // This should trigger the subchannel to fail the two queued RPCs in a + // way that will be transparently retried. The retry will cause + // pick_first to connect to the second server. + servers_[0]->Shutdown(); + // Resume the connection attempt. (It will fail, but we don't care.) + hold->Resume(); + // The RPCs should have hit the second server. + LOG(INFO) << "Waiting for server to see RPCs on the new server..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[1]->service_.RpcsWaitingForClientCancel() == 2; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[1]->service_.RpcsWaitingForClientCancel(); +} + +// TODO(roth): Ideally, we should also have a variant of this test with +// retries enabled, to show that the RPCs are failed in a way that is +// eligible for transparent retries. I tried writing that in a way that +// started a couple of RPCs and then sent a resolver update to switch to +// a new server, but that results in a tight infinite loop of +// transparent retries, and the test never manages to get to the point +// of the resolver update. I suspect this has something to do with +// ExecCtx constantly handling the transparent retries before it can +// return control back to the application, but I haven't dug into it +// deeply enough to verify. When we finish migrating to v3, try writing +// that test again. +TEST_F(ConnectionScalingTest, QueuedRpcsFailAtMaxConnectionsIfConfigured) { + if (!grpc_core::IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + grpc_core::testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + const int kMaxConcurrentStreams = 3; + // Start a server with MAX_CONCURRENT_STREAMS set. + StartServers(1, {}, nullptr, + /*max_concurrent_streams=*/kMaxConcurrentStreams); + FakeResolverResponseGeneratorWrapper response_generator; + // Set channel arg to fail instead of queueing. + // Also disable retries so that we see the failures instead of them + // being transparently retried. + ChannelArguments channel_args; + channel_args.SetInt(GRPC_ARG_ENABLE_RETRIES, 0); + channel_args.SetInt(GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT, 1); + auto channel = BuildChannel("pick_first", response_generator, channel_args); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts(), kServiceConfig); + // Start kMaxConcurrentStreams * 2 long-running RPCs. This will + // create two connections, both of which will be at their limit. + std::vector> rpcs; + for (size_t i = 0; i < kMaxConcurrentStreams * 2; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see the RPCs. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams * 2; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // There should be two connections. + EXPECT_EQ(servers_[0]->service_.clients().size(), 2); + // Start two more RPCs. Both should fail. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // The two queued RPCs should have failed. + LOG(INFO) << "Waiting for RPCs to fail..."; + for (size_t i = kMaxConcurrentStreams * 2; + i < (kMaxConcurrentStreams * 2) + 2; ++i) { + auto& rpc = rpcs[i]; + Status status = rpc->GetStatus(); + EXPECT_EQ(status.error_code(), GRPC_STATUS_RESOURCE_EXHAUSTED); + EXPECT_THAT( + status.error_message(), + ::testing::MatchesRegex("(ipv6:%5B::1%5D|ipv4:127.0.0.1):[0-9]+: " + "subchannel at max number of connections, " + "but no quota to send RPC")); + rpc.reset(); + } +} + +TEST_F(ConnectionScalingTest, + MaxConnectionsPerSubchannelChangeTriggersConnectionAttempt) { + if (!grpc_core::IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + grpc_core::testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + constexpr char kServiceConfig1[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 1\n" + " }\n" + "}"; + const int kMaxConcurrentStreams = 3; + // Start two servers with MAX_CONCURRENT_STREAMS set. + StartServers(1, {}, nullptr, + /*max_concurrent_streams=*/kMaxConcurrentStreams); + // Channel initially talks only to the first server. + FakeResolverResponseGeneratorWrapper response_generator; + auto channel = BuildChannel("pick_first", response_generator); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts(), kServiceConfig1); + // Start kMaxConcurrentStreams long-running RPCs. + std::vector> rpcs; + for (size_t i = 0; i < kMaxConcurrentStreams; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see the first kMaxConcurrentStreams RPCs. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // There should be only one connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 1); + // Intercept the next connection attempt. + ConnectionAttemptInjector injector; + auto hold = injector.AddHold(servers_[0]->port_); + // Start two more RPCs, which will be queued. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // TODO(roth): Use a metric to determine when they're actually queued? + // No connection attempt should be started yet, since + // max_connections_per_subchannel is currently 1. + EXPECT_FALSE(hold->IsStarted()); + // Send a resolver update that increases max_connections_per_subchannel. + constexpr char kServiceConfig2[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + response_generator.SetNextResolution(GetServersPorts(), kServiceConfig2); + // Now that we can create a second connection, the queued RPCs should + // cause us to do that. + hold->Wait(); + hold->Resume(); + // The server should see all of the RPCs now. + LOG(INFO) << "Waiting for server to see the new RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams + 2; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // There should be two connections. + EXPECT_EQ(servers_[0]->service_.clients().size(), 2); +} + +TEST_F(ConnectionScalingTest, IdleConnectionsClosed) { + if (!grpc_core::IsSubchannelConnectionScalingEnabled()) { + GTEST_SKIP() + << "this test requires the subchannel_connection_scaling experiment"; + } + grpc_core::testing::ScopedExperimentalEnvVar env( + "GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING"); + constexpr char kServiceConfig[] = + "{\n" + " \"connectionScaling\": {\n" + " \"maxConnectionsPerSubchannel\": 2\n" + " }\n" + "}"; + const int kMaxConcurrentStreams = 3; + // Start a server with MAX_CONCURRENT_STREAMS set and an IDLE timeout + // of 10 seconds. + const uint32_t kIdleTimeoutMs = 10000; + StartServers(1, {}, nullptr, /*max_concurrent_streams=*/kMaxConcurrentStreams, + /*idle_timeout_ms=*/kIdleTimeoutMs); + FakeResolverResponseGeneratorWrapper response_generator; + auto channel = BuildChannel("pick_first", response_generator); + auto stub = BuildStub(channel); + response_generator.SetNextResolution(GetServersPorts(), kServiceConfig); + // Start kMaxConcurrentStreams long-running RPCs. + std::vector> rpcs; + for (size_t i = 0; i < kMaxConcurrentStreams; ++i) { + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + } + // Wait for the server to see the first kMaxConcurrentStreams RPCs. + LOG(INFO) << "Waiting for server to see the initial RPCs..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams; + })) << "timeout waiting for initial RPCs to start -- RPCs started: " + << servers_[0]->service_.RpcsWaitingForClientCancel(); + // The server should see only one connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 1); + // Find the subchannel in channelz, and verify that there's only one + // connection there as well. + auto subchannel_nodes = ChannelzUtil::GetSubchannelsForAddress( + grpc_core::LocalIpUri(servers_[0]->port_)); + EXPECT_EQ(subchannel_nodes.size(), 1); + if (subchannel_nodes.empty()) return; + auto socket_nodes = + ChannelzUtil::GetSubchannelConnections(subchannel_nodes.front().id()); + EXPECT_EQ(socket_nodes.size(), 1); + // Start another RPC, which will trigger the creation of a new + // connection. + rpcs.emplace_back(StartLongRunningRpc(stub.get())); + // Now the server should see the new RPC. + LOG(INFO) << "Waiting for server to see the last RPC..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == + kMaxConcurrentStreams + 1; + })) << "timeout waiting for last RPC to start"; + // The server should see a second connection. + EXPECT_EQ(servers_[0]->service_.clients().size(), 2); + // And channelz should too. + socket_nodes = + ChannelzUtil::GetSubchannelConnections(subchannel_nodes.front().id()); + EXPECT_EQ(socket_nodes.size(), 2); + // Cancel all of the RPCs. + LOG(INFO) << "Cancelling RPCs..."; + rpcs.clear(); + // Wait for server to see no active RPCs. + LOG(INFO) << "Waiting for server to see the RPCs cancelled..."; + EXPECT_TRUE(WaitFor([&]() { + return servers_[0]->service_.RpcsWaitingForClientCancel() == 0; + })) << "timeout waiting for server to see RPCs cancelled"; + // Send normal, short-lived RPCs in a loop. These should all go on + // the first connection, so after the idle timeout, the server should + // close the second connection, and channelz should show only one + // connection. We add a fudge factor to account for timing. + LOG(INFO) << "Sending short-lived RPCs until second connection closes..."; + absl::Time deadline = + absl::Now() + + absl::Milliseconds(kIdleTimeoutMs * 3 * grpc_test_slowdown_factor()); + while (true) { + ASSERT_LT(absl::Now(), deadline) + << "timed out waiting for connection to close"; + CheckRpcSendOk(DEBUG_LOCATION, stub); + socket_nodes = + ChannelzUtil::GetSubchannelConnections(subchannel_nodes.front().id()); + LOG(INFO) << "Channelz socket nodes:"; + for (auto& socket_node : socket_nodes) { + LOG(INFO) << " Socket node: " << socket_node.DebugString(); + } + if (socket_nodes.size() == 1) break; + } +} + } // namespace } // namespace testing } // namespace grpc diff --git a/test/cpp/end2end/connection_attempt_injector.h b/test/cpp/end2end/connection_attempt_injector.h index b827675b250e5..adc9983c8198b 100644 --- a/test/cpp/end2end/connection_attempt_injector.h +++ b/test/cpp/end2end/connection_attempt_injector.h @@ -35,9 +35,9 @@ namespace testing { // // // To inject a hold for the next connection attempt for a given port. // auto hold = injector.AddHold(port); -// hold.Wait(); +// hold->Wait(); // // ...do stuff... -// hold.Resume(); // Or hold.Fail() if you want to force a failure. +// hold->Resume(); // Or hold->Fail() if you want to force a failure. // // // Inject a fixed delay for all connection attempts. // injector.SetDelay(grpc_core::Duration::Seconds(10)); diff --git a/test/cpp/util/BUILD b/test/cpp/util/BUILD index 472824b6fc1ac..62a8ddcdd19fb 100644 --- a/test/cpp/util/BUILD +++ b/test/cpp/util/BUILD @@ -479,6 +479,28 @@ grpc_cc_test( ], ) +grpc_cc_library( + name = "channelz_util", + testonly = 1, + srcs = [ + "channelz_util.cc", + ], + hdrs = [ + "channelz_util.h", + ], + external_deps = [ + "protobuf", + "absl/strings", + ], + deps = [ + "//:channelz", + "//src/core:down_cast", + "//src/core:grpc_check", + "//src/proto/grpc/channelz/v2:channelz_cc_proto", + "//test/core/test_util:grpc_test_util", + ], +) + grpc_cc_library( name = "tls_test_utils", srcs = [ diff --git a/test/cpp/util/channelz_util.cc b/test/cpp/util/channelz_util.cc new file mode 100644 index 0000000000000..4445d018e5c1a --- /dev/null +++ b/test/cpp/util/channelz_util.cc @@ -0,0 +1,82 @@ +// +// Copyright 2025 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 "test/cpp/util/channelz_util.h" + +#include "src/core/channelz/channelz.h" +#include "src/core/channelz/channelz_registry.h" +#include "src/core/util/down_cast.h" +#include "src/core/util/grpc_check.h" +#include "test/core/test_util/test_config.h" + +namespace grpc { +namespace testing { + +using grpc_core::channelz::BaseNode; +using grpc_core::channelz::ChannelzRegistry; +using grpc_core::channelz::SubchannelNode; + +namespace { + +grpc::channelz::v2::Entity GetEntityFromNode(BaseNode& node) { + const absl::Duration kTimeout = + absl::Seconds(1) * grpc_test_slowdown_factor(); + std::string serialized_entity = node.SerializeEntityToString(kTimeout); + grpc::channelz::v2::Entity entity; + GRPC_CHECK(entity.ParseFromString(serialized_entity)); + return entity; +} + +} // namespace + +std::vector ChannelzUtil::GetSubchannelsForAddress( + absl::string_view address) { + std::vector entities; + while (true) { + auto [nodes, done] = ChannelzRegistry::GetNodesOfType( + /*start_node=*/0, BaseNode::EntityType::kSubchannel, + /*max_results=*/std::numeric_limits::max()); + for (auto& node : nodes) { + auto* subchannel_node = grpc_core::DownCast(node.get()); + if (subchannel_node->target() == address) { + entities.push_back(GetEntityFromNode(*node)); + } + } + if (done) break; + } + return entities; +} + +std::vector ChannelzUtil::GetSubchannelConnections( + int64_t subchannel_id) { + auto subchannel_node = ChannelzRegistry::GetSubchannel(subchannel_id); + GRPC_CHECK(subchannel_node != nullptr); + std::vector entities; + while (true) { + auto [nodes, done] = ChannelzRegistry::GetChildrenOfType( + /*start_node=*/0, /*parent=*/subchannel_node.get(), + BaseNode::EntityType::kSocket, + /*max_results=*/std::numeric_limits::max()); + for (auto& node : nodes) { + entities.push_back(GetEntityFromNode(*node)); + } + if (done) break; + } + return entities; +} + +} // namespace testing +} // namespace grpc diff --git a/test/cpp/util/channelz_util.h b/test/cpp/util/channelz_util.h new file mode 100644 index 0000000000000..edc8ddc4cd236 --- /dev/null +++ b/test/cpp/util/channelz_util.h @@ -0,0 +1,45 @@ +// +// Copyright 2025 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_TEST_CPP_UTIL_CHANNELZ_UTIL_H +#define GRPC_TEST_CPP_UTIL_CHANNELZ_UTIL_H + +#include + +#include "src/proto/grpc/channelz/v2/channelz.pb.h" +#include "absl/strings/string_view.h" + +namespace grpc { +namespace testing { + +// A collection of channelz utilities that are useful in tests. +class ChannelzUtil { + public: + // Returns the channelz entities for all subchannels for the specified + // address URI. + static std::vector GetSubchannelsForAddress( + absl::string_view address); + + // Returns the channelz entities for all connections for the specified + // subchannel. + static std::vector GetSubchannelConnections( + int64_t subchannel_id); +}; + +} // namespace testing +} // namespace grpc + +#endif // GRPC_TEST_CPP_UTIL_CHANNELZ_UTIL_H diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 8ffd6573a5244..44236420e0e54 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -1191,6 +1191,8 @@ src/core/client_channel/subchannel_pool_interface.cc \ src/core/client_channel/subchannel_pool_interface.h \ src/core/client_channel/subchannel_stream_client.cc \ src/core/client_channel/subchannel_stream_client.h \ +src/core/client_channel/subchannel_stream_limiter.cc \ +src/core/client_channel/subchannel_stream_limiter.h \ src/core/config/config_vars.cc \ src/core/config/config_vars.h \ src/core/config/config_vars_non_generated.cc \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 7896d1049ef43..2cbf6c1d222f5 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -998,6 +998,8 @@ src/core/client_channel/subchannel_pool_interface.cc \ src/core/client_channel/subchannel_pool_interface.h \ src/core/client_channel/subchannel_stream_client.cc \ src/core/client_channel/subchannel_stream_client.h \ +src/core/client_channel/subchannel_stream_limiter.cc \ +src/core/client_channel/subchannel_stream_limiter.h \ src/core/config/GEMINI.md \ src/core/config/config_vars.cc \ src/core/config/config_vars.h \ diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json index 6ad226c2228f8..c38c9261cbb21 100644 --- a/tools/run_tests/generated/tests.json +++ b/tools/run_tests/generated/tests.json @@ -9065,6 +9065,30 @@ ], "uses_polling": false }, + { + "args": [], + "benchmark": false, + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "subchannel_stream_limiter_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "uses_polling": false + }, { "args": [], "benchmark": false, From 179910b6da34a2761b83eaad6da60e39a8e5acae Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Mon, 2 Feb 2026 09:25:07 -0800 Subject: [PATCH 45/67] [deps] update cncf/xds protos, and add dependency on CEL protos (#41421) The xDS protos are actually split between two repos, and I forgot to update the second one when I did the first one. Updating these protos also required adding a new dependency on the CEL protos. Closes #41421 PiperOrigin-RevId: 864390170 --- .gitmodules | 3 + CMakeLists.txt | 499 ++-- MODULE.bazel | 2 +- Makefile | 4 + Package.swift | 10 + bazel/grpc_deps.bzl | 19 +- build_autogenerated.yaml | 162 +- config.m4 | 6 + config.w32 | 8 + gRPC-C++.podspec | 12 + gRPC-Core.podspec | 16 + grpc.gemspec | 10 + package.xml | 10 + py_xds_protos/build_xds_protos.py | 4 + py_xds_protos/cel/__init__.py | 0 py_xds_protos/cel/expr/__init__.py | 0 py_xds_protos/cel/expr/checked_pb2.py | 72 + .../cel/expr/conformance/__init__.py | 0 .../conformance/conformance_service_pb2.py | 63 + .../cel/expr/conformance/env_config_pb2.py | 56 + .../cel/expr/conformance/proto2/__init__.py | 0 .../proto2/test_all_types_extensions_pb2.py | 38 + .../conformance/proto2/test_all_types_pb2.py | 712 ++++++ .../cel/expr/conformance/proto3/__init__.py | 0 .../conformance/proto3/test_all_types_pb2.py | 708 ++++++ .../cel/expr/conformance/test/__init__.py | 0 .../cel/expr/conformance/test/simple_pb2.py | 54 + .../cel/expr/conformance/test/suite_pb2.py | 56 + py_xds_protos/cel/expr/eval_pb2.py | 49 + py_xds_protos/cel/expr/explain_pb2.py | 42 + py_xds_protos/cel/expr/syntax_pb2.py | 78 + py_xds_protos/cel/expr/value_pb2.py | 47 + py_xds_protos/generated_file_import_test.py | 12 + py_xds_protos/test/v1/simple_pb2.py | 54 + py_xds_protos/udpa/annotations/migrate_pb2.py | 4 +- .../udpa/annotations/security_pb2.py | 4 +- .../udpa/annotations/sensitive_pb2.py | 4 +- py_xds_protos/udpa/annotations/status_pb2.py | 4 +- .../udpa/annotations/versioning_pb2.py | 4 +- py_xds_protos/xds/type/matcher/v3/cel_pb2.py | 9 +- .../xds/type/matcher/v3/http_inputs_pb2.py | 9 +- .../xds/type/matcher/v3/matcher_pb2.py | 45 +- .../xds/type/matcher/v3/string_pb2.py | 11 +- py_xds_protos/xds/type/v3/cel_pb2.py | 18 +- src/core/ext/upb-gen/cel/expr/checked.upb.h | 1875 ++++++++++++++ .../upb-gen/cel/expr/checked.upb_minitable.c | 409 +++ .../upb-gen/cel/expr/checked.upb_minitable.h | 56 + src/core/ext/upb-gen/cel/expr/syntax.upb.h | 2223 +++++++++++++++++ .../upb-gen/cel/expr/syntax.upb_minitable.c | 489 ++++ .../upb-gen/cel/expr/syntax.upb_minitable.h | 60 + .../ext/upb-gen/xds/type/matcher/v3/cel.upb.h | 1 - .../xds/type/matcher/v3/cel.upb_minitable.c | 1 - .../xds/type/matcher/v3/http_inputs.upb.h | 1 - .../matcher/v3/http_inputs.upb_minitable.c | 1 - .../upb-gen/xds/type/matcher/v3/matcher.upb.h | 37 +- .../type/matcher/v3/matcher.upb_minitable.c | 16 +- .../upb-gen/xds/type/matcher/v3/string.upb.h | 33 + .../type/matcher/v3/string.upb_minitable.c | 17 +- src/core/ext/upb-gen/xds/type/v3/cel.upb.h | 100 +- .../upb-gen/xds/type/v3/cel.upb_minitable.c | 25 +- .../upbdefs-gen/cel/expr/checked.upbdefs.c | 248 ++ .../upbdefs-gen/cel/expr/checked.upbdefs.h | 97 + .../ext/upbdefs-gen/cel/expr/syntax.upbdefs.c | 283 +++ .../ext/upbdefs-gen/cel/expr/syntax.upbdefs.h | 107 + .../udpa/annotations/migrate.upbdefs.c | 10 +- .../udpa/annotations/security.upbdefs.c | 11 +- .../udpa/annotations/sensitive.upbdefs.c | 10 +- .../udpa/annotations/status.upbdefs.c | 10 +- .../udpa/annotations/versioning.upbdefs.c | 10 +- .../xds/type/matcher/v3/cel.upbdefs.c | 55 +- .../xds/type/matcher/v3/http_inputs.upbdefs.c | 34 +- .../xds/type/matcher/v3/matcher.upbdefs.c | 363 ++- .../xds/type/matcher/v3/string.upbdefs.c | 103 +- .../ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c | 116 +- src/python/grpcio/grpc_core_dependencies.py | 4 + templates/CMakeLists.txt.template | 10 +- templates/MODULE.bazel.inja | 2 +- templates/tools/dockerfile/git_config.include | 20 +- .../bazel/test_single_bazel_version.sh | 6 + third_party/README.md | 2 +- third_party/cel-spec | 1 + third_party/xds | 2 +- .../extract_metadata_from_bazel_xml.cc | 1 + tools/artifact_gen/gen_upb_api_from_bazel.cc | 11 +- .../dockerimage_current_versions.bzl | 14 +- .../extract_metadata_from_bazel_xml.py | 37 +- tools/buildgen/plugins/check_attrs.py | 1 + ...rtifact_python_linux_armv7.current_version | 2 +- .../Dockerfile | 20 +- ...thon_manylinux2014_aarch64.current_version | 2 +- .../Dockerfile | 20 +- ...t_python_manylinux2014_x64.current_version | 2 +- .../Dockerfile | 20 +- ...t_python_manylinux2014_x86.current_version | 2 +- .../Dockerfile | 20 +- ...thon_musllinux_1_2_aarch64.current_version | 2 +- .../Dockerfile | 20 +- ...t_python_musllinux_1_2_x64.current_version | 2 +- .../Dockerfile | 20 +- ...t_python_musllinux_1_2_x86.current_version | 2 +- .../Dockerfile | 20 +- tools/doxygen/Doxyfile.c++.internal | 10 + tools/doxygen/Doxyfile.core.internal | 10 + .../run_tests/sanity/check_bazel_workspace.py | 1 + tools/run_tests/sanity/check_submodules.sh | 3 +- 105 files changed, 9077 insertions(+), 931 deletions(-) create mode 100644 py_xds_protos/cel/__init__.py create mode 100644 py_xds_protos/cel/expr/__init__.py create mode 100644 py_xds_protos/cel/expr/checked_pb2.py create mode 100644 py_xds_protos/cel/expr/conformance/__init__.py create mode 100644 py_xds_protos/cel/expr/conformance/conformance_service_pb2.py create mode 100644 py_xds_protos/cel/expr/conformance/env_config_pb2.py create mode 100644 py_xds_protos/cel/expr/conformance/proto2/__init__.py create mode 100644 py_xds_protos/cel/expr/conformance/proto2/test_all_types_extensions_pb2.py create mode 100644 py_xds_protos/cel/expr/conformance/proto2/test_all_types_pb2.py create mode 100644 py_xds_protos/cel/expr/conformance/proto3/__init__.py create mode 100644 py_xds_protos/cel/expr/conformance/proto3/test_all_types_pb2.py create mode 100644 py_xds_protos/cel/expr/conformance/test/__init__.py create mode 100644 py_xds_protos/cel/expr/conformance/test/simple_pb2.py create mode 100644 py_xds_protos/cel/expr/conformance/test/suite_pb2.py create mode 100644 py_xds_protos/cel/expr/eval_pb2.py create mode 100644 py_xds_protos/cel/expr/explain_pb2.py create mode 100644 py_xds_protos/cel/expr/syntax_pb2.py create mode 100644 py_xds_protos/cel/expr/value_pb2.py create mode 100644 py_xds_protos/test/v1/simple_pb2.py create mode 100644 src/core/ext/upb-gen/cel/expr/checked.upb.h create mode 100644 src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c create mode 100644 src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h create mode 100644 src/core/ext/upb-gen/cel/expr/syntax.upb.h create mode 100644 src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c create mode 100644 src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h create mode 100644 src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c create mode 100644 src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h create mode 100644 src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c create mode 100644 src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h create mode 160000 third_party/cel-spec diff --git a/.gitmodules b/.gitmodules index 9b16a02148d33..a159d0188a71d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -50,3 +50,6 @@ [submodule "third_party/opentelemetry-cpp"] path = third_party/opentelemetry-cpp url = https://github.com/open-telemetry/opentelemetry-cpp +[submodule "third_party/cel-spec"] + path = third_party/cel-spec + url = https://github.com/google/cel-spec diff --git a/CMakeLists.txt b/CMakeLists.txt index 96a91d15bc2e3..132f88703c2b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -406,6 +406,25 @@ if(gRPC_BUILD_GRPCPP_OTEL_PLUGIN) include(cmake/opentelemetry-cpp.cmake) endif() +# Setup external proto library at third_party/cel-spec with 2 download URLs +if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/cel-spec AND gRPC_DOWNLOAD_ARCHIVES) + # Download the archive via HTTP, validate the checksum, and extract to third_party/cel-spec. + download_archive( + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/cel-spec + https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/cel-spec/archive/9f069b3ee58b02d6f6736c5ebd6587075c1a1b22.tar.gz + d6cb6b4ed272500d16546c672a65a7452b241462a200dda3f62a7de413883344 + cel-spec-9f069b3ee58b02d6f6736c5ebd6587075c1a1b22 + ) +endif() +if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/cel-spec AND gRPC_DOWNLOAD_ARCHIVES) + # Download the archive via HTTP, validate the checksum, and extract to third_party/cel-spec. + download_archive( + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/cel-spec + https://github.com/google/cel-spec/archive/9f069b3ee58b02d6f6736c5ebd6587075c1a1b22.tar.gz + d6cb6b4ed272500d16546c672a65a7452b241462a200dda3f62a7de413883344 + cel-spec-9f069b3ee58b02d6f6736c5ebd6587075c1a1b22 + ) +endif() # Setup external proto library at third_party/envoy-api with 2 download URLs if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/envoy-api AND gRPC_DOWNLOAD_ARCHIVES) # Download the archive via HTTP, validate the checksum, and extract to third_party/envoy-api. @@ -487,18 +506,18 @@ if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/xds AND gRPC_DOWNLOAD_ARC # Download the archive via HTTP, validate the checksum, and extract to third_party/xds. download_archive( ${CMAKE_CURRENT_SOURCE_DIR}/third_party/xds - https://storage.googleapis.com/grpc-bazel-mirror/github.com/cncf/xds/archive/3a472e524827f72d1ad621c4983dd5af54c46776.tar.gz - dc305e20c9fa80822322271b50aa2ffa917bf4fd3973bcec52bfc28dc32c5927 - xds-3a472e524827f72d1ad621c4983dd5af54c46776 + https://storage.googleapis.com/grpc-bazel-mirror/github.com/cncf/xds/archive/ee656c7534f5d7dc23d44dd611689568f72017a6.tar.gz + 49535f3c3370004309da50194c09bbfc528d4702424dd46e7d56a278a3dfc15d + xds-ee656c7534f5d7dc23d44dd611689568f72017a6 ) endif() if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/xds AND gRPC_DOWNLOAD_ARCHIVES) # Download the archive via HTTP, validate the checksum, and extract to third_party/xds. download_archive( ${CMAKE_CURRENT_SOURCE_DIR}/third_party/xds - https://github.com/cncf/xds/archive/3a472e524827f72d1ad621c4983dd5af54c46776.tar.gz - dc305e20c9fa80822322271b50aa2ffa917bf4fd3973bcec52bfc28dc32c5927 - xds-3a472e524827f72d1ad621c4983dd5af54c46776 + https://github.com/cncf/xds/archive/ee656c7534f5d7dc23d44dd611689568f72017a6.tar.gz + 49535f3c3370004309da50194c09bbfc528d4702424dd46e7d56a278a3dfc15d + xds-ee656c7534f5d7dc23d44dd611689568f72017a6 ) endif() @@ -803,6 +822,12 @@ protobuf_generate_grpc_cpp_with_import_path_correction( protobuf_generate_grpc_cpp_with_import_path_correction( test/core/tsi/alts/fake_handshaker/transport_security_common.proto test/core/tsi/alts/fake_handshaker/transport_security_common.proto ) +protobuf_generate_grpc_cpp_with_import_path_correction( + third_party/cel-spec/proto/cel/expr/checked.proto cel/expr/checked.proto +) +protobuf_generate_grpc_cpp_with_import_path_correction( + third_party/cel-spec/proto/cel/expr/syntax.proto cel/expr/syntax.proto +) protobuf_generate_grpc_cpp_with_import_path_correction( third_party/envoy-api/envoy/admin/v3/certs.proto envoy/admin/v3/certs.proto ) @@ -2387,6 +2412,8 @@ add_library(grpc src/core/ext/transport/chttp2/transport/writing.cc src/core/ext/transport/inproc/inproc_transport.cc src/core/ext/transport/inproc/legacy_inproc_transport.cc + src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c + src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c @@ -2561,6 +2588,8 @@ add_library(grpc src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c + src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c + src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c @@ -3516,7 +3545,6 @@ add_library(grpc_unsecure src/core/ext/transport/chttp2/transport/writing.cc src/core/ext/transport/inproc/inproc_transport.cc src/core/ext/transport/inproc/legacy_inproc_transport.cc - src/core/ext/upb-gen/google/api/annotations.upb_minitable.c src/core/ext/upb-gen/google/api/http.upb_minitable.c src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c @@ -4739,10 +4767,6 @@ add_library(benchmark_helpers ${_gRPC_STATIC_WIN32} ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -6923,6 +6947,14 @@ endif() if(gRPC_BUILD_TESTS) add_executable(admin_services_end2end_test + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.h @@ -8419,10 +8451,6 @@ add_executable(async_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -10488,6 +10516,8 @@ endif() if(gRPC_BUILD_TESTS) add_executable(cel_authorization_engine_test + src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c + src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c @@ -10813,10 +10843,6 @@ add_executable(cfstream_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -11236,10 +11262,6 @@ add_executable(channelz_service_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -11486,10 +11508,6 @@ add_executable(channelz_v2_service_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -11820,10 +11838,6 @@ add_executable(cli_call_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -12005,10 +12019,6 @@ add_executable(client_callback_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -12172,10 +12182,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -12250,10 +12256,6 @@ add_executable(client_interceptors_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -12344,10 +12346,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -13088,10 +13086,6 @@ add_executable(context_allocator_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -13392,10 +13386,6 @@ add_executable(crl_provider_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -13555,10 +13545,6 @@ add_executable(delegating_channel_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -15790,10 +15776,6 @@ add_executable(end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -16051,10 +16033,6 @@ add_executable(error_details_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -16429,10 +16407,6 @@ add_executable(exception_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -17340,10 +17314,6 @@ add_executable(flaky_network_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -18256,10 +18226,6 @@ add_executable(generic_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -18758,10 +18724,6 @@ add_executable(grpc_authz_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -19595,10 +19557,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -19787,10 +19745,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -20273,10 +20227,6 @@ add_executable(health_service_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -21124,10 +21074,6 @@ add_executable(hybrid_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -24515,10 +24461,6 @@ add_executable(message_allocator_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -24878,10 +24820,6 @@ add_executable(mock_stream_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -24957,10 +24895,6 @@ add_executable(mock_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -25153,10 +25087,6 @@ add_executable(nonblocking_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -25468,10 +25398,6 @@ add_executable(orca_service_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_service.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_service.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_service.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -25663,10 +25589,6 @@ add_executable(otel_npc_metrics_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -25746,10 +25668,6 @@ add_executable(otel_plugin_option_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -25829,10 +25747,6 @@ add_executable(otel_plugin_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -25913,10 +25827,6 @@ add_executable(otel_tracing_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -26972,10 +26882,6 @@ add_executable(port_sharing_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -27347,6 +27253,14 @@ add_executable(pre_stop_hook_server_test ${_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 + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.h @@ -28699,10 +28613,6 @@ add_executable(proto_server_reflection_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -29328,10 +29238,6 @@ add_executable(raw_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -29934,10 +29840,6 @@ add_executable(resource_quota_end2end_stress_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -30263,10 +30165,6 @@ add_executable(rls_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -30766,10 +30664,6 @@ add_executable(server_builder_plugin_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -30843,10 +30737,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -30923,10 +30813,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -31170,10 +31056,6 @@ add_executable(server_early_return_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -31245,10 +31127,6 @@ add_executable(server_interceptors_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -31367,10 +31245,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -31535,10 +31409,6 @@ add_executable(service_config_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -31784,10 +31654,6 @@ add_executable(shutdown_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -32197,10 +32063,6 @@ add_executable(spiffe_bundle_map_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -33075,10 +32937,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -34352,10 +34210,6 @@ add_executable(test_cpp_end2end_ssl_credentials_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -34428,10 +34282,6 @@ add_executable(test_cpp_end2end_tls_credentials_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -34925,10 +34775,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -35361,10 +35207,6 @@ add_executable(tls_key_export_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -37364,10 +37206,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_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 - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -37435,6 +37273,14 @@ add_executable(xds_audit_logger_registry_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -37925,6 +37771,14 @@ add_executable(xds_client_test ${_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 + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.h @@ -38528,6 +38382,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -39051,6 +38913,14 @@ endif() if(gRPC_BUILD_TESTS) add_executable(xds_cluster_resource_type_test + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -39595,6 +39465,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -40125,6 +40003,14 @@ add_executable(xds_common_types_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -40576,6 +40462,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -41110,10 +41004,6 @@ add_executable(xds_credentials_end2end_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.cc - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.pb.h - ${_gRPC_PROTO_GENS_DIR}/google/api/annotations.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/google/api/http.pb.h @@ -41233,6 +41123,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.h @@ -41864,6 +41762,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -42725,6 +42631,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -43263,6 +43177,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -43809,6 +43731,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -44351,6 +44281,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -44881,6 +44819,14 @@ add_executable(xds_http_filters_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -45366,6 +45312,14 @@ add_executable(xds_lb_policy_registry_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -45811,6 +45765,14 @@ add_executable(xds_listener_resource_type_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -46320,6 +46282,14 @@ endif() if(gRPC_BUILD_TESTS) add_executable(xds_matcher_parse_test + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -46660,7 +46630,8 @@ add_executable(xds_matcher_parse_test ${_gRPC_PROTO_GENS_DIR}/xds/type/v3/typed_struct.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/xds/type/v3/typed_struct.pb.h ${_gRPC_PROTO_GENS_DIR}/xds/type/v3/typed_struct.grpc.pb.h - src/core/ext/upb-gen/google/api/annotations.upb_minitable.c + src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c + src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c src/core/ext/upb-gen/google/api/http.upb_minitable.c @@ -47106,6 +47077,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -47652,6 +47631,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -48289,6 +48276,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -48836,6 +48831,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -49387,6 +49390,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -49917,6 +49928,14 @@ add_executable(xds_route_config_resource_type_test ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -50339,6 +50358,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -50885,6 +50912,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -51449,6 +51484,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h @@ -52008,6 +52051,14 @@ add_executable(xds_stats_watcher_test ${_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 + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/admin/v3/certs.pb.h @@ -52599,6 +52650,14 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.pb.h ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/simple_messages.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/checked.grpc.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.cc + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.pb.h + ${_gRPC_PROTO_GENS_DIR}/cel/expr/syntax.grpc.pb.h ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.grpc.pb.cc ${_gRPC_PROTO_GENS_DIR}/envoy/annotations/deprecation.pb.h diff --git a/MODULE.bazel b/MODULE.bazel index ea55411605201..fd7fc55495e4d 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -57,7 +57,7 @@ bazel_dep(name = "re2", version = "2024-07-02.bcr.1", repo_name = "com_googlesou bazel_dep(name = "rules_apple", version = "3.16.0", repo_name = "build_bazel_rules_apple") bazel_dep(name = "rules_cc", version = "0.1.1") bazel_dep(name = "rules_proto", version = "7.0.2") -bazel_dep(name = "xds", version = "0.0.0-20240423-555b57e", repo_name = "com_github_cncf_xds") # mismatched 20231116 +bazel_dep(name = "xds", version = "0.0.0-20251210-ee656c7", repo_name = "com_github_cncf_xds") bazel_dep(name = "zlib", version = "1.3.1.bcr.5") # Development dependencies diff --git a/Makefile b/Makefile index 55aca28601b44..4d3df85cfea86 100644 --- a/Makefile +++ b/Makefile @@ -834,6 +834,8 @@ LIBGRPC_SRC = \ src/core/ext/transport/chttp2/transport/writing.cc \ src/core/ext/transport/inproc/inproc_transport.cc \ src/core/ext/transport/inproc/legacy_inproc_transport.cc \ + src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c \ + src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c \ src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c \ src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c \ src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c \ @@ -1008,6 +1010,8 @@ LIBGRPC_SRC = \ src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c \ src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c \ src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c \ + src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c \ + src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c \ src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c \ src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c \ src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c \ diff --git a/Package.swift b/Package.swift index 6f2a0c3ffb0d1..82d085166339f 100644 --- a/Package.swift +++ b/Package.swift @@ -473,6 +473,12 @@ let package = Package( "src/core/ext/transport/inproc/inproc_transport.h", "src/core/ext/transport/inproc/legacy_inproc_transport.cc", "src/core/ext/transport/inproc/legacy_inproc_transport.h", + "src/core/ext/upb-gen/cel/expr/checked.upb.h", + "src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c", + "src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h", + "src/core/ext/upb-gen/cel/expr/syntax.upb.h", + "src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c", + "src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h", "src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h", "src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c", "src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h", @@ -995,6 +1001,10 @@ let package = Package( "src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h", "src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c", "src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h", + "src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c", + "src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h", + "src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c", + "src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h", "src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c", "src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h", "src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c", diff --git a/bazel/grpc_deps.bzl b/bazel/grpc_deps.bzl index a9e16cfa0e9e1..c5e976e56a8d9 100644 --- a/bazel/grpc_deps.bzl +++ b/bazel/grpc_deps.bzl @@ -351,11 +351,22 @@ def grpc_deps(): if "com_github_cncf_xds" not in native.existing_rules(): http_archive( name = "com_github_cncf_xds", - sha256 = "dc305e20c9fa80822322271b50aa2ffa917bf4fd3973bcec52bfc28dc32c5927", - strip_prefix = "xds-3a472e524827f72d1ad621c4983dd5af54c46776", + sha256 = "49535f3c3370004309da50194c09bbfc528d4702424dd46e7d56a278a3dfc15d", + strip_prefix = "xds-ee656c7534f5d7dc23d44dd611689568f72017a6", urls = [ - "https://storage.googleapis.com/grpc-bazel-mirror/github.com/cncf/xds/archive/3a472e524827f72d1ad621c4983dd5af54c46776.tar.gz", - "https://github.com/cncf/xds/archive/3a472e524827f72d1ad621c4983dd5af54c46776.tar.gz", + "https://storage.googleapis.com/grpc-bazel-mirror/github.com/cncf/xds/archive/ee656c7534f5d7dc23d44dd611689568f72017a6.tar.gz", + "https://github.com/cncf/xds/archive/ee656c7534f5d7dc23d44dd611689568f72017a6.tar.gz", + ], + ) + + if "dev_cel" not in native.existing_rules(): + http_archive( + name = "dev_cel", + sha256 = "d6cb6b4ed272500d16546c672a65a7452b241462a200dda3f62a7de413883344", + strip_prefix = "cel-spec-9f069b3ee58b02d6f6736c5ebd6587075c1a1b22", + urls = [ + "https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/cel-spec/archive/9f069b3ee58b02d6f6736c5ebd6587075c1a1b22.tar.gz", + "https://github.com/google/cel-spec/archive/9f069b3ee58b02d6f6736c5ebd6587075c1a1b22.tar.gz", ], ) diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index d446589357ca9..bbff0b19b8ffd 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -372,6 +372,10 @@ libs: - src/core/ext/transport/chttp2/transport/write_size_policy.h - src/core/ext/transport/inproc/inproc_transport.h - src/core/ext/transport/inproc/legacy_inproc_transport.h + - src/core/ext/upb-gen/cel/expr/checked.upb.h + - src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h + - src/core/ext/upb-gen/cel/expr/syntax.upb.h + - src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h - src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h - src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h - src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h @@ -720,6 +724,8 @@ libs: - src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h - src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h - src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h + - src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h + - src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h - src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h - src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h - src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h @@ -1514,6 +1520,8 @@ libs: - src/core/ext/transport/chttp2/transport/writing.cc - src/core/ext/transport/inproc/inproc_transport.cc - src/core/ext/transport/inproc/legacy_inproc_transport.cc + - src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c + - src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c - src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c - src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c - src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c @@ -1688,6 +1696,8 @@ libs: - src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c - src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c - src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c + - src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c + - src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c - src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c - src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c - src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c @@ -2549,8 +2559,6 @@ libs: - src/core/ext/transport/chttp2/transport/write_size_policy.h - src/core/ext/transport/inproc/inproc_transport.h - src/core/ext/transport/inproc/legacy_inproc_transport.h - - src/core/ext/upb-gen/google/api/annotations.upb.h - - src/core/ext/upb-gen/google/api/annotations.upb_minitable.h - src/core/ext/upb-gen/google/api/http.upb.h - src/core/ext/upb-gen/google/api/http.upb_minitable.h - src/core/ext/upb-gen/google/protobuf/any.upb.h @@ -3100,7 +3108,6 @@ libs: - src/core/ext/transport/chttp2/transport/writing.cc - src/core/ext/transport/inproc/inproc_transport.cc - src/core/ext/transport/inproc/legacy_inproc_transport.cc - - src/core/ext/upb-gen/google/api/annotations.upb_minitable.c - src/core/ext/upb-gen/google/api/http.upb_minitable.c - src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c - src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c @@ -3898,7 +3905,6 @@ libs: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -5722,6 +5728,8 @@ targets: - src/cpp/server/csds/csds.h - third_party/protoc-gen-validate/validate/validate.h src: + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/admin/v3/certs.proto - third_party/envoy-api/envoy/admin/v3/clusters.proto - third_party/envoy-api/envoy/admin/v3/config_dump.proto @@ -6297,7 +6305,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -8173,6 +8180,10 @@ targets: build: test language: c++ headers: + - src/core/ext/upb-gen/cel/expr/checked.upb.h + - src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h + - src/core/ext/upb-gen/cel/expr/syntax.upb.h + - src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h - src/core/ext/upb-gen/envoy/annotations/deprecation.upb.h - src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.h - src/core/ext/upb-gen/envoy/annotations/resource.upb.h @@ -8365,6 +8376,8 @@ targets: - src/core/lib/security/authorization/mock_cel/evaluator_core.h - src/core/lib/security/authorization/mock_cel/flat_expr_builder.h src: + - src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c + - src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c - src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c - src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c - src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c @@ -8534,7 +8547,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -8647,7 +8659,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -8837,7 +8848,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -9118,7 +9128,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -9187,7 +9196,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -9230,7 +9238,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -9257,7 +9264,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -9291,7 +9297,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/api/httpbody.proto - third_party/googleapis/google/rpc/status.proto @@ -9512,7 +9517,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -9742,7 +9746,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -9790,7 +9793,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -11995,7 +11997,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -12117,7 +12118,6 @@ targets: headers: [] src: - src/proto/grpc/testing/echo_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -12226,7 +12226,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -13218,7 +13217,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -14268,7 +14266,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -14402,7 +14399,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -14638,7 +14634,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -14710,7 +14705,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -14943,7 +14937,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -15412,7 +15405,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -18931,7 +18923,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -19028,7 +19019,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -19048,7 +19038,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -19107,7 +19096,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -19369,7 +19357,6 @@ targets: - test/cpp/end2end/end2end_test_utils.h src: - src/proto/grpc/testing/xds/v3/orca_service.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -19430,7 +19417,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -19465,7 +19451,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -19501,7 +19486,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -19538,7 +19522,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -20097,7 +20080,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -20254,6 +20236,8 @@ targets: - src/proto/grpc/testing/istio_echo.proto - src/proto/grpc/testing/messages.proto - src/proto/grpc/testing/test.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/admin/v3/certs.proto - third_party/envoy-api/envoy/admin/v3/clusters.proto - third_party/envoy-api/envoy/admin/v3/config_dump.proto @@ -21435,7 +21419,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -22102,7 +22085,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -22503,7 +22485,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -22611,7 +22592,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -22908,7 +22888,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -22928,7 +22907,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -22953,7 +22931,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -23020,7 +22997,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -23041,7 +23017,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -23075,7 +23050,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -23126,7 +23100,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -23203,7 +23176,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -23341,7 +23313,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -23902,7 +23873,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -24730,7 +24700,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -24750,7 +24719,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -25029,7 +24997,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -25174,7 +25141,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -27106,7 +27072,6 @@ targets: - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -27137,6 +27102,8 @@ targets: - third_party/utf8_range/utf8_validity.h src: - src/proto/grpc/reflection/v1alpha/reflection.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/common/mutation_rules/v3/mutation_rules.proto @@ -27276,6 +27243,8 @@ targets: - third_party/protoc-gen-validate/validate/validate.h src: - test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/admin/v3/certs.proto - third_party/envoy-api/envoy/admin/v3/clusters.proto - third_party/envoy-api/envoy/admin/v3/config_dump.proto @@ -27447,6 +27416,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -27588,6 +27559,8 @@ targets: - test/core/test_util/scoped_env_var.h - third_party/protoc-gen-validate/validate/validate.h src: + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -27741,6 +27714,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -28043,6 +28018,8 @@ targets: - third_party/utf8_range/utf8_validity.h src: - src/proto/grpc/reflection/v1alpha/reflection.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/core/v3/address.proto @@ -28231,6 +28208,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -28373,7 +28352,6 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto - - third_party/googleapis/google/api/annotations.proto - third_party/googleapis/google/api/http.proto - third_party/googleapis/google/rpc/status.proto - third_party/protoc-gen-validate/validate/validate.proto @@ -28411,6 +28389,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/admin/v3/certs.proto - third_party/envoy-api/envoy/admin/v3/clusters.proto - third_party/envoy-api/envoy/admin/v3/config_dump.proto @@ -28585,6 +28565,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -28824,6 +28806,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -28973,6 +28957,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -29123,6 +29109,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -29274,6 +29262,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -29423,6 +29413,8 @@ targets: - third_party/utf8_range/utf8_validity.h src: - src/proto/grpc/reflection/v1alpha/reflection.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -29561,6 +29553,8 @@ targets: - third_party/utf8_range/utf8_validity.h src: - src/proto/grpc/reflection/v1alpha/reflection.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/cluster/v3/circuit_breaker.proto @@ -29688,6 +29682,8 @@ targets: - third_party/utf8_range/utf8_validity.h src: - src/proto/grpc/reflection/v1alpha/reflection.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -29822,8 +29818,10 @@ targets: build: test language: c++ headers: - - src/core/ext/upb-gen/google/api/annotations.upb.h - - src/core/ext/upb-gen/google/api/annotations.upb_minitable.h + - src/core/ext/upb-gen/cel/expr/checked.upb.h + - src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h + - src/core/ext/upb-gen/cel/expr/syntax.upb.h + - src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h - src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h - src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.h - src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h @@ -29898,6 +29896,8 @@ targets: - src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h - third_party/protoc-gen-validate/validate/validate.h src: + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/common/matcher/v3/matcher.proto @@ -29983,7 +29983,8 @@ targets: - third_party/xds/xds/type/v3/cel.proto - third_party/xds/xds/type/v3/range.proto - third_party/xds/xds/type/v3/typed_struct.proto - - src/core/ext/upb-gen/google/api/annotations.upb_minitable.c + - src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c + - src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c - src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c - src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c - src/core/ext/upb-gen/google/api/http.upb_minitable.c @@ -30134,6 +30135,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -30285,6 +30288,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -30466,6 +30471,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -30620,6 +30627,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -30774,6 +30783,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -30923,6 +30934,8 @@ targets: src: - src/proto/grpc/lookup/v1/rls_config.proto - src/proto/grpc/reflection/v1alpha/reflection.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/common/mutation_rules/v3/mutation_rules.proto @@ -31045,6 +31058,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -31198,6 +31213,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -31356,6 +31373,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -31508,6 +31527,8 @@ targets: - src/proto/grpc/testing/empty.proto - src/proto/grpc/testing/messages.proto - src/proto/grpc/testing/test.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/admin/v3/certs.proto - third_party/envoy-api/envoy/admin/v3/clusters.proto - third_party/envoy-api/envoy/admin/v3/config_dump.proto @@ -31669,6 +31690,8 @@ targets: - src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/simple_messages.proto + - third_party/cel-spec/proto/cel/expr/checked.proto + - third_party/cel-spec/proto/cel/expr/syntax.proto - third_party/envoy-api/envoy/annotations/deprecation.proto - third_party/envoy-api/envoy/annotations/resource.proto - third_party/envoy-api/envoy/config/accesslog/v3/accesslog.proto @@ -31823,9 +31846,18 @@ targets: - posix - mac external_proto_libraries: +- destination: third_party/cel-spec + hash: d6cb6b4ed272500d16546c672a65a7452b241462a200dda3f62a7de413883344 + proto_prefix: third_party/cel-spec/ + strip_path_prefix: proto/ + strip_prefix: cel-spec-9f069b3ee58b02d6f6736c5ebd6587075c1a1b22 + urls: + - https://storage.googleapis.com/grpc-bazel-mirror/github.com/google/cel-spec/archive/9f069b3ee58b02d6f6736c5ebd6587075c1a1b22.tar.gz + - https://github.com/google/cel-spec/archive/9f069b3ee58b02d6f6736c5ebd6587075c1a1b22.tar.gz - destination: third_party/envoy-api hash: ed5e6c319f8ebcdf24a9491f866a599bb9a3c193b859a94ad13bd31f85b46855 proto_prefix: third_party/envoy-api/ + strip_path_prefix: '' strip_prefix: data-plane-api-6ef568cf4a67362849911d1d2a546fd9f35db2ff urls: - https://storage.googleapis.com/grpc-bazel-mirror/github.com/envoyproxy/data-plane-api/archive/6ef568cf4a67362849911d1d2a546fd9f35db2ff.tar.gz @@ -31833,6 +31865,7 @@ external_proto_libraries: - destination: third_party/googleapis hash: 3de3a199400eea7a766091aeb96c4b84c86266ad1f933f9933bbb7c359e727fe proto_prefix: third_party/googleapis/ + strip_path_prefix: '' strip_prefix: googleapis-2193a2bfcecb92b92aad7a4d81baa428cafd7dfd urls: - https://storage.googleapis.com/grpc-bazel-mirror/github.com/googleapis/googleapis/archive/2193a2bfcecb92b92aad7a4d81baa428cafd7dfd.tar.gz @@ -31840,6 +31873,7 @@ external_proto_libraries: - destination: third_party/opencensus-proto/src hash: b7e13f0b4259e80c3070b583c2f39e53153085a6918718b1c710caf7037572b0 proto_prefix: third_party/opencensus-proto/src/ + strip_path_prefix: '' strip_prefix: opencensus-proto-0.3.0/src urls: - https://storage.googleapis.com/grpc-bazel-mirror/github.com/census-instrumentation/opencensus-proto/archive/v0.3.0.tar.gz @@ -31847,15 +31881,17 @@ external_proto_libraries: - destination: third_party/protoc-gen-validate hash: ab51e978326b87e06be7a12fc6496f3ff6586339043557dbbd31f622332a5d45 proto_prefix: third_party/protoc-gen-validate/ + strip_path_prefix: '' strip_prefix: protoc-gen-validate-1.2.1 urls: - https://storage.googleapis.com/grpc-bazel-mirror/github.com/bufbuild/protoc-gen-validate/archive/refs/tags/v1.2.1.zip - https://github.com/bufbuild/protoc-gen-validate/archive/refs/tags/v1.2.1.zip - destination: third_party/xds - hash: dc305e20c9fa80822322271b50aa2ffa917bf4fd3973bcec52bfc28dc32c5927 + hash: 49535f3c3370004309da50194c09bbfc528d4702424dd46e7d56a278a3dfc15d proto_prefix: third_party/xds/ - strip_prefix: xds-3a472e524827f72d1ad621c4983dd5af54c46776 + strip_path_prefix: '' + strip_prefix: xds-ee656c7534f5d7dc23d44dd611689568f72017a6 urls: - - https://storage.googleapis.com/grpc-bazel-mirror/github.com/cncf/xds/archive/3a472e524827f72d1ad621c4983dd5af54c46776.tar.gz - - https://github.com/cncf/xds/archive/3a472e524827f72d1ad621c4983dd5af54c46776.tar.gz + - https://storage.googleapis.com/grpc-bazel-mirror/github.com/cncf/xds/archive/ee656c7534f5d7dc23d44dd611689568f72017a6.tar.gz + - https://github.com/cncf/xds/archive/ee656c7534f5d7dc23d44dd611689568f72017a6.tar.gz tests: [] diff --git a/config.m4 b/config.m4 index fac67826be76e..cd8a911f6f591 100644 --- a/config.m4 +++ b/config.m4 @@ -208,6 +208,8 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/transport/chttp2/transport/writing.cc \ src/core/ext/transport/inproc/inproc_transport.cc \ src/core/ext/transport/inproc/legacy_inproc_transport.cc \ + src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c \ + src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c \ src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c \ src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c \ src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c \ @@ -382,6 +384,8 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c \ src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c \ src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c \ + src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c \ + src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c \ src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c \ src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c \ src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c \ @@ -1526,6 +1530,7 @@ if test "$PHP_GRPC" != "no"; then PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/server) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/chttp2/transport) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/transport/inproc) + PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/cel/expr) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/admin/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/annotations) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/config/accesslog/v3) @@ -1586,6 +1591,7 @@ if test "$PHP_GRPC" != "no"; then PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/xds/service/orca/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/xds/type/matcher/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/xds/type/v3) + PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/cel/expr) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/admin/v3) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/annotations) PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3) diff --git a/config.w32 b/config.w32 index 7a6ce78c2acd6..40b79f9611d5b 100644 --- a/config.w32 +++ b/config.w32 @@ -173,6 +173,8 @@ if (PHP_GRPC != "no") { "src\\core\\ext\\transport\\chttp2\\transport\\writing.cc " + "src\\core\\ext\\transport\\inproc\\inproc_transport.cc " + "src\\core\\ext\\transport\\inproc\\legacy_inproc_transport.cc " + + "src\\core\\ext\\upb-gen\\cel\\expr\\checked.upb_minitable.c " + + "src\\core\\ext\\upb-gen\\cel\\expr\\syntax.upb_minitable.c " + "src\\core\\ext\\upb-gen\\envoy\\admin\\v3\\certs.upb_minitable.c " + "src\\core\\ext\\upb-gen\\envoy\\admin\\v3\\clusters.upb_minitable.c " + "src\\core\\ext\\upb-gen\\envoy\\admin\\v3\\config_dump.upb_minitable.c " + @@ -347,6 +349,8 @@ if (PHP_GRPC != "no") { "src\\core\\ext\\upb-gen\\xds\\type\\v3\\cel.upb_minitable.c " + "src\\core\\ext\\upb-gen\\xds\\type\\v3\\range.upb_minitable.c " + "src\\core\\ext\\upb-gen\\xds\\type\\v3\\typed_struct.upb_minitable.c " + + "src\\core\\ext\\upbdefs-gen\\cel\\expr\\checked.upbdefs.c " + + "src\\core\\ext\\upbdefs-gen\\cel\\expr\\syntax.upbdefs.c " + "src\\core\\ext\\upbdefs-gen\\envoy\\admin\\v3\\certs.upbdefs.c " + "src\\core\\ext\\upbdefs-gen\\envoy\\admin\\v3\\clusters.upbdefs.c " + "src\\core\\ext\\upbdefs-gen\\envoy\\admin\\v3\\config_dump.upbdefs.c " + @@ -1523,6 +1527,8 @@ if (PHP_GRPC != "no") { FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\chttp2\\transport"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\transport\\inproc"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\cel"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\cel\\expr"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\admin"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\admin\\v3"); @@ -1659,6 +1665,8 @@ if (PHP_GRPC != "no") { FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\xds\\type\\matcher\\v3"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\xds\\type\\v3"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\cel"); + FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\cel\\expr"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\admin"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\admin\\v3"); diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec index 683a53048fd07..397cb170c543c 100644 --- a/gRPC-C++.podspec +++ b/gRPC-C++.podspec @@ -460,6 +460,10 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/write_size_policy.h', 'src/core/ext/transport/inproc/inproc_transport.h', 'src/core/ext/transport/inproc/legacy_inproc_transport.h', + 'src/core/ext/upb-gen/cel/expr/checked.upb.h', + 'src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h', + 'src/core/ext/upb-gen/cel/expr/syntax.upb.h', + 'src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h', 'src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h', @@ -808,6 +812,8 @@ Pod::Spec.new do |s| 'src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h', 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h', 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h', + 'src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h', + 'src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h', @@ -1856,6 +1862,10 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/write_size_policy.h', 'src/core/ext/transport/inproc/inproc_transport.h', 'src/core/ext/transport/inproc/legacy_inproc_transport.h', + 'src/core/ext/upb-gen/cel/expr/checked.upb.h', + 'src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h', + 'src/core/ext/upb-gen/cel/expr/syntax.upb.h', + 'src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h', 'src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h', @@ -2204,6 +2214,8 @@ Pod::Spec.new do |s| 'src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h', 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h', 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h', + 'src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h', + 'src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h', diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 9f6711693fad0..42dff5a2275e9 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -596,6 +596,12 @@ Pod::Spec.new do |s| 'src/core/ext/transport/inproc/inproc_transport.h', 'src/core/ext/transport/inproc/legacy_inproc_transport.cc', 'src/core/ext/transport/inproc/legacy_inproc_transport.h', + 'src/core/ext/upb-gen/cel/expr/checked.upb.h', + 'src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c', + 'src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h', + 'src/core/ext/upb-gen/cel/expr/syntax.upb.h', + 'src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c', + 'src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h', @@ -1118,6 +1124,10 @@ Pod::Spec.new do |s| 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h', 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c', 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h', + 'src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c', + 'src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h', + 'src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c', + 'src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c', 'src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c', @@ -2777,6 +2787,10 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/write_size_policy.h', 'src/core/ext/transport/inproc/inproc_transport.h', 'src/core/ext/transport/inproc/legacy_inproc_transport.h', + 'src/core/ext/upb-gen/cel/expr/checked.upb.h', + 'src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h', + 'src/core/ext/upb-gen/cel/expr/syntax.upb.h', + 'src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h', 'src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h', @@ -3125,6 +3139,8 @@ Pod::Spec.new do |s| 'src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h', 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h', 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h', + 'src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h', + 'src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h', 'src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h', diff --git a/grpc.gemspec b/grpc.gemspec index 38abdfa782a83..5d0a9ac589fc1 100644 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -479,6 +479,12 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/transport/inproc/inproc_transport.h ) s.files += %w( src/core/ext/transport/inproc/legacy_inproc_transport.cc ) s.files += %w( src/core/ext/transport/inproc/legacy_inproc_transport.h ) + s.files += %w( src/core/ext/upb-gen/cel/expr/checked.upb.h ) + s.files += %w( src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c ) + s.files += %w( src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h ) + s.files += %w( src/core/ext/upb-gen/cel/expr/syntax.upb.h ) + s.files += %w( src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c ) + s.files += %w( src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h ) s.files += %w( src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h ) s.files += %w( src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c ) s.files += %w( src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h ) @@ -1001,6 +1007,10 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h ) s.files += %w( src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c ) s.files += %w( src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h ) + s.files += %w( src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c ) + s.files += %w( src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h ) + s.files += %w( src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c ) + s.files += %w( src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h ) s.files += %w( src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c ) s.files += %w( src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h ) s.files += %w( src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c ) diff --git a/package.xml b/package.xml index b1561d4ed0d63..ed7be4cc4d196 100644 --- a/package.xml +++ b/package.xml @@ -461,6 +461,12 @@ + + + + + + @@ -983,6 +989,10 @@ + + + + diff --git a/py_xds_protos/build_xds_protos.py b/py_xds_protos/build_xds_protos.py index 9ba289fe2de58..ad963eff59913 100644 --- a/py_xds_protos/build_xds_protos.py +++ b/py_xds_protos/build_xds_protos.py @@ -61,6 +61,7 @@ def _get_resource_file_name( ENVOY_API_PROTO_ROOT = os.path.join("third_party", "envoy-api") XDS_PROTO_ROOT = os.path.join("third_party", "xds") GOOGLEAPIS_ROOT = os.path.join("third_party", "googleapis") +CEL_PROTO_ROOT = os.path.join("third_party", "cel-spec", "proto") VALIDATE_ROOT = os.path.join("third_party", "protoc-gen-validate") OPENCENSUS_PROTO_ROOT = os.path.join( "third_party", "opencensus-proto", "src" @@ -105,6 +106,7 @@ def add_test_import(proto_package_path: str, file_name: str, service: bool = Fal "--proto_path={}".format(ENVOY_API_PROTO_ROOT), "--proto_path={}".format(XDS_PROTO_ROOT), "--proto_path={}".format(GOOGLEAPIS_ROOT), + "--proto_path={}".format(CEL_PROTO_ROOT), "--proto_path={}".format(VALIDATE_ROOT), "--proto_path={}".format(WELL_KNOWN_PROTOS_INCLUDE), "--proto_path={}".format(OPENCENSUS_PROTO_ROOT), @@ -173,6 +175,7 @@ def main(): compile_protos(VALIDATE_ROOT, "validate") compile_protos(OPENCENSUS_PROTO_ROOT) compile_protos(OPENTELEMETRY_PROTO_ROOT) + compile_protos(CEL_PROTO_ROOT, "cel") # Generate __init__.py files for all modules create_init_file(WORK_DIR) @@ -184,6 +187,7 @@ def main(): "validate", "xds", "opentelemetry", + "cel", ]: for root, _, _ in os.walk(os.path.join(WORK_DIR, proto_root_module)): package_path = os.path.relpath(root, WORK_DIR) diff --git a/py_xds_protos/cel/__init__.py b/py_xds_protos/cel/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/py_xds_protos/cel/expr/__init__.py b/py_xds_protos/cel/expr/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/py_xds_protos/cel/expr/checked_pb2.py b/py_xds_protos/cel/expr/checked_pb2.py new file mode 100644 index 0000000000000..dc3f520ed8d03 --- /dev/null +++ b/py_xds_protos/cel/expr/checked_pb2.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/checked.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/checked.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from cel.expr import syntax_pb2 as cel_dot_expr_dot_syntax__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x63\x65l/expr/checked.proto\x12\x08\x63\x65l.expr\x1a\x15\x63\x65l/expr/syntax.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xec\x02\n\x0b\x43heckedExpr\x12>\n\rreference_map\x18\x02 \x03(\x0b\x32\'.cel.expr.CheckedExpr.ReferenceMapEntry\x12\x34\n\x08type_map\x18\x03 \x03(\x0b\x32\".cel.expr.CheckedExpr.TypeMapEntry\x12)\n\x0bsource_info\x18\x05 \x01(\x0b\x32\x14.cel.expr.SourceInfo\x12\x14\n\x0c\x65xpr_version\x18\x06 \x01(\t\x12\x1c\n\x04\x65xpr\x18\x04 \x01(\x0b\x32\x0e.cel.expr.Expr\x1aH\n\x11ReferenceMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.cel.expr.Reference:\x02\x38\x01\x1a>\n\x0cTypeMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.cel.expr.Type:\x02\x38\x01\"\xa2\x08\n\x04Type\x12%\n\x03\x64yn\x18\x01 \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12*\n\x04null\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValueH\x00\x12\x31\n\tprimitive\x18\x03 \x01(\x0e\x32\x1c.cel.expr.Type.PrimitiveTypeH\x00\x12/\n\x07wrapper\x18\x04 \x01(\x0e\x32\x1c.cel.expr.Type.PrimitiveTypeH\x00\x12\x32\n\nwell_known\x18\x05 \x01(\x0e\x32\x1c.cel.expr.Type.WellKnownTypeH\x00\x12,\n\tlist_type\x18\x06 \x01(\x0b\x32\x17.cel.expr.Type.ListTypeH\x00\x12*\n\x08map_type\x18\x07 \x01(\x0b\x32\x16.cel.expr.Type.MapTypeH\x00\x12/\n\x08\x66unction\x18\x08 \x01(\x0b\x32\x1b.cel.expr.Type.FunctionTypeH\x00\x12\x16\n\x0cmessage_type\x18\t \x01(\tH\x00\x12\x14\n\ntype_param\x18\n \x01(\tH\x00\x12\x1e\n\x04type\x18\x0b \x01(\x0b\x32\x0e.cel.expr.TypeH\x00\x12\'\n\x05\x65rror\x18\x0c \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12\x34\n\rabstract_type\x18\x0e \x01(\x0b\x32\x1b.cel.expr.Type.AbstractTypeH\x00\x1a-\n\x08ListType\x12!\n\telem_type\x18\x01 \x01(\x0b\x32\x0e.cel.expr.Type\x1aO\n\x07MapType\x12 \n\x08key_type\x18\x01 \x01(\x0b\x32\x0e.cel.expr.Type\x12\"\n\nvalue_type\x18\x02 \x01(\x0b\x32\x0e.cel.expr.Type\x1aV\n\x0c\x46unctionType\x12#\n\x0bresult_type\x18\x01 \x01(\x0b\x32\x0e.cel.expr.Type\x12!\n\targ_types\x18\x02 \x03(\x0b\x32\x0e.cel.expr.Type\x1a\x45\n\x0c\x41\x62stractType\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\'\n\x0fparameter_types\x18\x02 \x03(\x0b\x32\x0e.cel.expr.Type\"s\n\rPrimitiveType\x12\x1e\n\x1aPRIMITIVE_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04\x42OOL\x10\x01\x12\t\n\x05INT64\x10\x02\x12\n\n\x06UINT64\x10\x03\x12\n\n\x06\x44OUBLE\x10\x04\x12\n\n\x06STRING\x10\x05\x12\t\n\x05\x42YTES\x10\x06\"V\n\rWellKnownType\x12\x1f\n\x1bWELL_KNOWN_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03\x41NY\x10\x01\x12\r\n\tTIMESTAMP\x10\x02\x12\x0c\n\x08\x44URATION\x10\x03\x42\x0b\n\ttype_kind\"\xd6\x03\n\x04\x44\x65\x63l\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x05ident\x18\x02 \x01(\x0b\x32\x18.cel.expr.Decl.IdentDeclH\x00\x12/\n\x08\x66unction\x18\x03 \x01(\x0b\x32\x1b.cel.expr.Decl.FunctionDeclH\x00\x1aY\n\tIdentDecl\x12\x1c\n\x04type\x18\x01 \x01(\x0b\x32\x0e.cel.expr.Type\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.cel.expr.Constant\x12\x0b\n\x03\x64oc\x18\x03 \x01(\t\x1a\xfb\x01\n\x0c\x46unctionDecl\x12\x37\n\toverloads\x18\x01 \x03(\x0b\x32$.cel.expr.Decl.FunctionDecl.Overload\x12\x0b\n\x03\x64oc\x18\x02 \x01(\t\x1a\xa4\x01\n\x08Overload\x12\x13\n\x0boverload_id\x18\x01 \x01(\t\x12\x1e\n\x06params\x18\x02 \x03(\x0b\x32\x0e.cel.expr.Type\x12\x13\n\x0btype_params\x18\x03 \x03(\t\x12#\n\x0bresult_type\x18\x04 \x01(\x0b\x32\x0e.cel.expr.Type\x12\x1c\n\x14is_instance_function\x18\x05 \x01(\x08\x12\x0b\n\x03\x64oc\x18\x06 \x01(\tB\x0b\n\tdecl_kind\"Q\n\tReference\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0boverload_id\x18\x03 \x03(\t\x12!\n\x05value\x18\x04 \x01(\x0b\x32\x12.cel.expr.ConstantB,\n\x0c\x64\x65v.cel.exprB\tDeclProtoP\x01Z\x0c\x63\x65l.dev/expr\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.checked_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\014dev.cel.exprB\tDeclProtoP\001Z\014cel.dev/expr\370\001\001' + _globals['_CHECKEDEXPR_REFERENCEMAPENTRY']._loaded_options = None + _globals['_CHECKEDEXPR_REFERENCEMAPENTRY']._serialized_options = b'8\001' + _globals['_CHECKEDEXPR_TYPEMAPENTRY']._loaded_options = None + _globals['_CHECKEDEXPR_TYPEMAPENTRY']._serialized_options = b'8\001' + _globals['_CHECKEDEXPR']._serialized_start=119 + _globals['_CHECKEDEXPR']._serialized_end=483 + _globals['_CHECKEDEXPR_REFERENCEMAPENTRY']._serialized_start=347 + _globals['_CHECKEDEXPR_REFERENCEMAPENTRY']._serialized_end=419 + _globals['_CHECKEDEXPR_TYPEMAPENTRY']._serialized_start=421 + _globals['_CHECKEDEXPR_TYPEMAPENTRY']._serialized_end=483 + _globals['_TYPE']._serialized_start=486 + _globals['_TYPE']._serialized_end=1544 + _globals['_TYPE_LISTTYPE']._serialized_start=1041 + _globals['_TYPE_LISTTYPE']._serialized_end=1086 + _globals['_TYPE_MAPTYPE']._serialized_start=1088 + _globals['_TYPE_MAPTYPE']._serialized_end=1167 + _globals['_TYPE_FUNCTIONTYPE']._serialized_start=1169 + _globals['_TYPE_FUNCTIONTYPE']._serialized_end=1255 + _globals['_TYPE_ABSTRACTTYPE']._serialized_start=1257 + _globals['_TYPE_ABSTRACTTYPE']._serialized_end=1326 + _globals['_TYPE_PRIMITIVETYPE']._serialized_start=1328 + _globals['_TYPE_PRIMITIVETYPE']._serialized_end=1443 + _globals['_TYPE_WELLKNOWNTYPE']._serialized_start=1445 + _globals['_TYPE_WELLKNOWNTYPE']._serialized_end=1531 + _globals['_DECL']._serialized_start=1547 + _globals['_DECL']._serialized_end=2017 + _globals['_DECL_IDENTDECL']._serialized_start=1661 + _globals['_DECL_IDENTDECL']._serialized_end=1750 + _globals['_DECL_FUNCTIONDECL']._serialized_start=1753 + _globals['_DECL_FUNCTIONDECL']._serialized_end=2004 + _globals['_DECL_FUNCTIONDECL_OVERLOAD']._serialized_start=1840 + _globals['_DECL_FUNCTIONDECL_OVERLOAD']._serialized_end=2004 + _globals['_REFERENCE']._serialized_start=2019 + _globals['_REFERENCE']._serialized_end=2100 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/conformance/__init__.py b/py_xds_protos/cel/expr/conformance/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/py_xds_protos/cel/expr/conformance/conformance_service_pb2.py b/py_xds_protos/cel/expr/conformance/conformance_service_pb2.py new file mode 100644 index 0000000000000..fe57bfe2653ca --- /dev/null +++ b/py_xds_protos/cel/expr/conformance/conformance_service_pb2.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/conformance/conformance_service.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/conformance/conformance_service.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from cel.expr import checked_pb2 as cel_dot_expr_dot_checked__pb2 +from cel.expr import eval_pb2 as cel_dot_expr_dot_eval__pb2 +from cel.expr import syntax_pb2 as cel_dot_expr_dot_syntax__pb2 +from google.rpc import status_pb2 as google_dot_rpc_dot_status__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n.cel/expr/conformance/conformance_service.proto\x12\x14\x63\x65l.expr.conformance\x1a\x16\x63\x65l/expr/checked.proto\x1a\x13\x63\x65l/expr/eval.proto\x1a\x15\x63\x65l/expr/syntax.proto\x1a\x17google/rpc/status.proto\"k\n\x0cParseRequest\x12\x12\n\ncel_source\x18\x01 \x01(\t\x12\x16\n\x0esyntax_version\x18\x02 \x01(\t\x12\x17\n\x0fsource_location\x18\x03 \x01(\t\x12\x16\n\x0e\x64isable_macros\x18\x04 \x01(\x08\"^\n\rParseResponse\x12)\n\x0bparsed_expr\x18\x01 \x01(\x0b\x32\x14.cel.expr.ParsedExpr\x12\"\n\x06issues\x18\x02 \x03(\x0b\x32\x12.google.rpc.Status\"\x82\x01\n\x0c\x43heckRequest\x12)\n\x0bparsed_expr\x18\x01 \x01(\x0b\x32\x14.cel.expr.ParsedExpr\x12 \n\x08type_env\x18\x02 \x03(\x0b\x32\x0e.cel.expr.Decl\x12\x11\n\tcontainer\x18\x03 \x01(\t\x12\x12\n\nno_std_env\x18\x04 \x01(\x08\"`\n\rCheckResponse\x12+\n\x0c\x63hecked_expr\x18\x01 \x01(\x0b\x32\x15.cel.expr.CheckedExpr\x12\"\n\x06issues\x18\x02 \x03(\x0b\x32\x12.google.rpc.Status\"\x92\x02\n\x0b\x45valRequest\x12+\n\x0bparsed_expr\x18\x01 \x01(\x0b\x32\x14.cel.expr.ParsedExprH\x00\x12-\n\x0c\x63hecked_expr\x18\x02 \x01(\x0b\x32\x15.cel.expr.CheckedExprH\x00\x12\x41\n\x08\x62indings\x18\x03 \x03(\x0b\x32/.cel.expr.conformance.EvalRequest.BindingsEntry\x12\x11\n\tcontainer\x18\x04 \x01(\t\x1a\x44\n\rBindingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.cel.expr.ExprValue:\x02\x38\x01\x42\x0b\n\texpr_kind\"W\n\x0c\x45valResponse\x12#\n\x06result\x18\x01 \x01(\x0b\x32\x13.cel.expr.ExprValue\x12\"\n\x06issues\x18\x02 \x03(\x0b\x32\x12.google.rpc.Status\"P\n\x0eSourcePosition\x12\x10\n\x08location\x18\x01 \x01(\t\x12\x0e\n\x06offset\x18\x02 \x01(\x05\x12\x0c\n\x04line\x18\x03 \x01(\x05\x12\x0e\n\x06\x63olumn\x18\x04 \x01(\x05\"\xe0\x01\n\x0cIssueDetails\x12=\n\x08severity\x18\x01 \x01(\x0e\x32+.cel.expr.conformance.IssueDetails.Severity\x12\x36\n\x08position\x18\x02 \x01(\x0b\x32$.cel.expr.conformance.SourcePosition\x12\n\n\x02id\x18\x03 \x01(\x03\"M\n\x08Severity\x12\x18\n\x14SEVERITY_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x44\x45PRECATION\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x32\x8d\x02\n\x12\x43onformanceService\x12R\n\x05Parse\x12\".cel.expr.conformance.ParseRequest\x1a#.cel.expr.conformance.ParseResponse\"\x00\x12R\n\x05\x43heck\x12\".cel.expr.conformance.CheckRequest\x1a#.cel.expr.conformance.CheckResponse\"\x00\x12O\n\x04\x45val\x12!.cel.expr.conformance.EvalRequest\x1a\".cel.expr.conformance.EvalResponse\"\x00\x42R\n\x18\x64\x65v.cel.expr.conformanceB\x17\x43onformanceServiceProtoP\x01Z\x18\x63\x65l.dev/expr/conformance\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.conformance.conformance_service_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\030dev.cel.expr.conformanceB\027ConformanceServiceProtoP\001Z\030cel.dev/expr/conformance\370\001\001' + _globals['_EVALREQUEST_BINDINGSENTRY']._loaded_options = None + _globals['_EVALREQUEST_BINDINGSENTRY']._serialized_options = b'8\001' + _globals['_PARSEREQUEST']._serialized_start=165 + _globals['_PARSEREQUEST']._serialized_end=272 + _globals['_PARSERESPONSE']._serialized_start=274 + _globals['_PARSERESPONSE']._serialized_end=368 + _globals['_CHECKREQUEST']._serialized_start=371 + _globals['_CHECKREQUEST']._serialized_end=501 + _globals['_CHECKRESPONSE']._serialized_start=503 + _globals['_CHECKRESPONSE']._serialized_end=599 + _globals['_EVALREQUEST']._serialized_start=602 + _globals['_EVALREQUEST']._serialized_end=876 + _globals['_EVALREQUEST_BINDINGSENTRY']._serialized_start=795 + _globals['_EVALREQUEST_BINDINGSENTRY']._serialized_end=863 + _globals['_EVALRESPONSE']._serialized_start=878 + _globals['_EVALRESPONSE']._serialized_end=965 + _globals['_SOURCEPOSITION']._serialized_start=967 + _globals['_SOURCEPOSITION']._serialized_end=1047 + _globals['_ISSUEDETAILS']._serialized_start=1050 + _globals['_ISSUEDETAILS']._serialized_end=1274 + _globals['_ISSUEDETAILS_SEVERITY']._serialized_start=1197 + _globals['_ISSUEDETAILS_SEVERITY']._serialized_end=1274 + _globals['_CONFORMANCESERVICE']._serialized_start=1277 + _globals['_CONFORMANCESERVICE']._serialized_end=1546 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/conformance/env_config_pb2.py b/py_xds_protos/cel/expr/conformance/env_config_pb2.py new file mode 100644 index 0000000000000..4a14d257454b5 --- /dev/null +++ b/py_xds_protos/cel/expr/conformance/env_config_pb2.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/conformance/env_config.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/conformance/env_config.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from cel.expr import checked_pb2 as cel_dot_expr_dot_checked__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%cel/expr/conformance/env_config.proto\x12\x14\x63\x65l.expr.conformance\x1a\x16\x63\x65l/expr/checked.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a google/protobuf/descriptor.proto\"\x92\x05\n\x0b\x45nvironment\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x11\n\tcontainer\x18\x03 \x01(\t\x12\x39\n\x07imports\x18\x04 \x03(\x0b\x32(.cel.expr.conformance.Environment.Import\x12\x33\n\x06stdlib\x18\x05 \x01(\x0b\x32#.cel.expr.conformance.LibrarySubset\x12\x33\n\nextensions\x18\x06 \x03(\x0b\x32\x1f.cel.expr.conformance.Extension\x12K\n\x10\x63ontext_variable\x18\x07 \x01(\x0b\x32\x31.cel.expr.conformance.Environment.ContextVariable\x12$\n\x0c\x64\x65\x63larations\x18\x08 \x03(\x0b\x32\x0e.cel.expr.Decl\x12\x33\n\nvalidators\x18\t \x03(\x0b\x32\x1f.cel.expr.conformance.Validator\x12/\n\x08\x66\x65\x61tures\x18\n \x03(\x0b\x32\x1d.cel.expr.conformance.Feature\x12)\n!disable_standard_cel_declarations\x18\x0b \x01(\x08\x12\x42\n\x16message_type_extension\x18\x0c \x01(\x0b\x32\".google.protobuf.FileDescriptorSet\x12\"\n\x1a\x65nable_macro_call_tracking\x18\r \x01(\x08\x1a\x16\n\x06Import\x12\x0c\n\x04name\x18\x01 \x01(\t\x1a$\n\x0f\x43ontextVariable\x12\x11\n\ttype_name\x18\x01 \x01(\t\"\x9d\x01\n\tValidator\x12\x0c\n\x04name\x18\x01 \x01(\t\x12;\n\x06\x63onfig\x18\x02 \x03(\x0b\x32+.cel.expr.conformance.Validator.ConfigEntry\x1a\x45\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\"(\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\"*\n\tExtension\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"\xbf\x01\n\rLibrarySubset\x12\x10\n\x08\x64isabled\x18\x01 \x01(\x08\x12\x16\n\x0e\x64isable_macros\x18\x02 \x01(\x08\x12\x16\n\x0einclude_macros\x18\x03 \x03(\t\x12\x16\n\x0e\x65xclude_macros\x18\x04 \x03(\t\x12)\n\x11include_functions\x18\x05 \x03(\x0b\x32\x0e.cel.expr.Decl\x12)\n\x11\x65xclude_functions\x18\x06 \x03(\x0b\x32\x0e.cel.expr.DeclBK\n\x18\x63\x65l.dev.expr.conformanceB\x10\x45nvironmentProtoP\x01Z\x18\x63\x65l.dev/expr/conformance\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.conformance.env_config_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\030cel.dev.expr.conformanceB\020EnvironmentProtoP\001Z\030cel.dev/expr/conformance\370\001\001' + _globals['_VALIDATOR_CONFIGENTRY']._loaded_options = None + _globals['_VALIDATOR_CONFIGENTRY']._serialized_options = b'8\001' + _globals['_ENVIRONMENT']._serialized_start=152 + _globals['_ENVIRONMENT']._serialized_end=810 + _globals['_ENVIRONMENT_IMPORT']._serialized_start=750 + _globals['_ENVIRONMENT_IMPORT']._serialized_end=772 + _globals['_ENVIRONMENT_CONTEXTVARIABLE']._serialized_start=774 + _globals['_ENVIRONMENT_CONTEXTVARIABLE']._serialized_end=810 + _globals['_VALIDATOR']._serialized_start=813 + _globals['_VALIDATOR']._serialized_end=970 + _globals['_VALIDATOR_CONFIGENTRY']._serialized_start=901 + _globals['_VALIDATOR_CONFIGENTRY']._serialized_end=970 + _globals['_FEATURE']._serialized_start=972 + _globals['_FEATURE']._serialized_end=1012 + _globals['_EXTENSION']._serialized_start=1014 + _globals['_EXTENSION']._serialized_end=1056 + _globals['_LIBRARYSUBSET']._serialized_start=1059 + _globals['_LIBRARYSUBSET']._serialized_end=1250 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/conformance/proto2/__init__.py b/py_xds_protos/cel/expr/conformance/proto2/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/py_xds_protos/cel/expr/conformance/proto2/test_all_types_extensions_pb2.py b/py_xds_protos/cel/expr/conformance/proto2/test_all_types_extensions_pb2.py new file mode 100644 index 0000000000000..c369343533604 --- /dev/null +++ b/py_xds_protos/cel/expr/conformance/proto2/test_all_types_extensions_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/conformance/proto2/test_all_types_extensions.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/conformance/proto2/test_all_types_extensions.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from cel.expr.conformance.proto2 import test_all_types_pb2 as cel_dot_expr_dot_conformance_dot_proto2_dot_test__all__types__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n;cel/expr/conformance/proto2/test_all_types_extensions.proto\x12\x1b\x63\x65l.expr.conformance.proto2\x1a\x30\x63\x65l/expr/conformance/proto2/test_all_types.proto\"\xda\x03\n\x1cProto2ExtensionScopedMessage2=\n\tint64_ext\x12).cel.expr.conformance.proto2.TestAllTypes\x18\xed\x07 \x01(\x03\x32x\n\x19message_scoped_nested_ext\x12).cel.expr.conformance.proto2.TestAllTypes\x18\xee\x07 \x01(\x0b\x32).cel.expr.conformance.proto2.TestAllTypes2y\n\x0fnested_enum_ext\x12).cel.expr.conformance.proto2.TestAllTypes\x18\xef\x07 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum2\x85\x01\n&message_scoped_repeated_test_all_types\x12).cel.expr.conformance.proto2.TestAllTypes\x18\xf0\x07 \x03(\x0b\x32).cel.expr.conformance.proto2.TestAllTypes:=\n\tint32_ext\x12).cel.expr.conformance.proto2.TestAllTypes\x18\xe8\x07 \x01(\x05:i\n\nnested_ext\x12).cel.expr.conformance.proto2.TestAllTypes\x18\xe9\x07 \x01(\x0b\x32).cel.expr.conformance.proto2.TestAllTypes:q\n\x12test_all_types_ext\x12).cel.expr.conformance.proto2.TestAllTypes\x18\xea\x07 \x01(\x0b\x32).cel.expr.conformance.proto2.TestAllTypes:y\n\x0fnested_enum_ext\x12).cel.expr.conformance.proto2.TestAllTypes\x18\xeb\x07 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum:v\n\x17repeated_test_all_types\x12).cel.expr.conformance.proto2.TestAllTypes\x18\xec\x07 \x03(\x0b\x32).cel.expr.conformance.proto2.TestAllTypesB_\n\x1f\x64\x65v.cel.expr.conformance.proto2B\x16TestAllTypesExtensionsP\x01Z\x1f\x63\x65l.dev/expr/conformance/proto2\xf8\x01\x01') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.conformance.proto2.test_all_types_extensions_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\037dev.cel.expr.conformance.proto2B\026TestAllTypesExtensionsP\001Z\037cel.dev/expr/conformance/proto2\370\001\001' + _globals['_PROTO2EXTENSIONSCOPEDMESSAGE']._serialized_start=143 + _globals['_PROTO2EXTENSIONSCOPEDMESSAGE']._serialized_end=617 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/conformance/proto2/test_all_types_pb2.py b/py_xds_protos/cel/expr/conformance/proto2/test_all_types_pb2.py new file mode 100644 index 0000000000000..6424ad0cf9c99 --- /dev/null +++ b/py_xds_protos/cel/expr/conformance/proto2/test_all_types_pb2.py @@ -0,0 +1,712 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/conformance/proto2/test_all_types.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/conformance/proto2/test_all_types.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n0cel/expr/conformance/proto2/test_all_types.proto\x12\x1b\x63\x65l.expr.conformance.proto2\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xc8\xfa\x01\n\x0cTestAllTypes\x12\x19\n\x0csingle_int32\x18\x01 \x01(\x05:\x03-32\x12\x19\n\x0csingle_int64\x18\x02 \x01(\x03:\x03-64\x12\x19\n\rsingle_uint32\x18\x03 \x01(\r:\x02\x33\x32\x12\x19\n\rsingle_uint64\x18\x04 \x01(\x04:\x02\x36\x34\x12\x15\n\rsingle_sint32\x18\x05 \x01(\x11\x12\x15\n\rsingle_sint64\x18\x06 \x01(\x12\x12\x16\n\x0esingle_fixed32\x18\x07 \x01(\x07\x12\x16\n\x0esingle_fixed64\x18\x08 \x01(\x06\x12\x17\n\x0fsingle_sfixed32\x18\t \x01(\x0f\x12\x17\n\x0fsingle_sfixed64\x18\n \x01(\x10\x12\x17\n\x0csingle_float\x18\x0b \x01(\x02:\x01\x33\x12\x1a\n\rsingle_double\x18\x0c \x01(\x01:\x03\x36.4\x12\x19\n\x0bsingle_bool\x18\r \x01(\x08:\x04true\x12\x1c\n\rsingle_string\x18\x0e \x01(\t:\x05\x65mpty\x12\x1a\n\x0csingle_bytes\x18\x0f \x01(\x0c:\x04none\x12\n\n\x02in\x18\x12 \x01(\x08\x12(\n\nsingle_any\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\x12\x32\n\x0fsingle_duration\x18\x65 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x10single_timestamp\x18\x66 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\rsingle_struct\x18g \x01(\x0b\x32\x17.google.protobuf.Struct\x12,\n\x0csingle_value\x18h \x01(\x0b\x32\x16.google.protobuf.Value\x12\x39\n\x14single_int64_wrapper\x18i \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x39\n\x14single_int32_wrapper\x18j \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x15single_double_wrapper\x18k \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x39\n\x14single_float_wrapper\x18l \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12;\n\x15single_uint64_wrapper\x18m \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12;\n\x15single_uint32_wrapper\x18n \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12;\n\x15single_string_wrapper\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x13single_bool_wrapper\x18p \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x14single_bytes_wrapper\x18q \x01(\x0b\x32\x1b.google.protobuf.BytesValue\x12.\n\nlist_value\x18r \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12.\n\nnull_value\x18s \x01(\x0e\x32\x1a.google.protobuf.NullValue\x12\x37\n\x13optional_null_value\x18t \x01(\x0e\x32\x1a.google.protobuf.NullValue\x12.\n\nfield_mask\x18u \x01(\x0b\x32\x1a.google.protobuf.FieldMask\x12%\n\x05\x65mpty\x18v \x01(\x0b\x32\x16.google.protobuf.Empty\x12X\n\x15single_nested_message\x18\x15 \x01(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessageH\x00\x12W\n\x12single_nested_enum\x18\x16 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum:\x03\x42\x41RH\x00\x12S\n\x12standalone_message\x18\x17 \x01(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessage\x12M\n\x0fstandalone_enum\x18\x18 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum\x12\x16\n\x0erepeated_int32\x18\x1f \x03(\x05\x12\x16\n\x0erepeated_int64\x18 \x03(\x03\x12\x17\n\x0frepeated_uint32\x18! \x03(\r\x12\x17\n\x0frepeated_uint64\x18\" \x03(\x04\x12\x17\n\x0frepeated_sint32\x18# \x03(\x11\x12\x17\n\x0frepeated_sint64\x18$ \x03(\x12\x12\x18\n\x10repeated_fixed32\x18% \x03(\x07\x12\x18\n\x10repeated_fixed64\x18& \x03(\x06\x12\x19\n\x11repeated_sfixed32\x18\' \x03(\x0f\x12\x19\n\x11repeated_sfixed64\x18( \x03(\x10\x12\x16\n\x0erepeated_float\x18) \x03(\x02\x12\x17\n\x0frepeated_double\x18* \x03(\x01\x12\x15\n\rrepeated_bool\x18+ \x03(\x08\x12\x17\n\x0frepeated_string\x18, \x03(\t\x12\x16\n\x0erepeated_bytes\x18- \x03(\x0c\x12X\n\x17repeated_nested_message\x18\x33 \x03(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessage\x12R\n\x14repeated_nested_enum\x18\x34 \x03(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum\x12!\n\x15repeated_string_piece\x18\x35 \x03(\tB\x02\x08\x02\x12\x19\n\rrepeated_cord\x18\x36 \x03(\tB\x02\x08\x01\x12V\n\x15repeated_lazy_message\x18\x37 \x03(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessage\x12*\n\x0crepeated_any\x18x \x03(\x0b\x32\x14.google.protobuf.Any\x12\x34\n\x11repeated_duration\x18y \x03(\x0b\x32\x19.google.protobuf.Duration\x12\x36\n\x12repeated_timestamp\x18z \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0frepeated_struct\x18{ \x03(\x0b\x32\x17.google.protobuf.Struct\x12.\n\x0erepeated_value\x18| \x03(\x0b\x32\x16.google.protobuf.Value\x12;\n\x16repeated_int64_wrapper\x18} \x03(\x0b\x32\x1b.google.protobuf.Int64Value\x12;\n\x16repeated_int32_wrapper\x18~ \x03(\x0b\x32\x1b.google.protobuf.Int32Value\x12=\n\x17repeated_double_wrapper\x18\x7f \x03(\x0b\x32\x1c.google.protobuf.DoubleValue\x12<\n\x16repeated_float_wrapper\x18\x80\x01 \x03(\x0b\x32\x1b.google.protobuf.FloatValue\x12>\n\x17repeated_uint64_wrapper\x18\x81\x01 \x03(\x0b\x32\x1c.google.protobuf.UInt64Value\x12>\n\x17repeated_uint32_wrapper\x18\x82\x01 \x03(\x0b\x32\x1c.google.protobuf.UInt32Value\x12>\n\x17repeated_string_wrapper\x18\x83\x01 \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x15repeated_bool_wrapper\x18\x84\x01 \x03(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x16repeated_bytes_wrapper\x18\x85\x01 \x03(\x0b\x32\x1b.google.protobuf.BytesValue\x12\x38\n\x13repeated_list_value\x18\x86\x01 \x03(\x0b\x32\x1a.google.protobuf.ListValue\x12\x38\n\x13repeated_null_value\x18\x87\x01 \x03(\x0e\x32\x1a.google.protobuf.NullValue\x12`\n\x15map_int64_nested_type\x18> \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapInt64NestedTypeEntry\x12Q\n\rmap_bool_bool\x18? \x03(\x0b\x32:.cel.expr.conformance.proto2.TestAllTypes.MapBoolBoolEntry\x12U\n\x0fmap_bool_string\x18@ \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapBoolStringEntry\x12S\n\x0emap_bool_bytes\x18\x41 \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapBoolBytesEntry\x12S\n\x0emap_bool_int32\x18\x42 \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapBoolInt32Entry\x12S\n\x0emap_bool_int64\x18\x43 \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapBoolInt64Entry\x12U\n\x0fmap_bool_uint32\x18\x44 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapBoolUint32Entry\x12U\n\x0fmap_bool_uint64\x18\x45 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapBoolUint64Entry\x12S\n\x0emap_bool_float\x18\x46 \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapBoolFloatEntry\x12U\n\x0fmap_bool_double\x18G \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapBoolDoubleEntry\x12Q\n\rmap_bool_enum\x18H \x03(\x0b\x32:.cel.expr.conformance.proto2.TestAllTypes.MapBoolEnumEntry\x12W\n\x10map_bool_message\x18I \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapBoolMessageEntry\x12Z\n\x11map_bool_duration\x18\xe4\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapBoolDurationEntry\x12\\\n\x12map_bool_timestamp\x18\xe5\x01 \x03(\x0b\x32?.cel.expr.conformance.proto2.TestAllTypes.MapBoolTimestampEntry\x12]\n\x13map_bool_null_value\x18\xe6\x01 \x03(\x0b\x32?.cel.expr.conformance.proto2.TestAllTypes.MapBoolNullValueEntry\x12P\n\x0cmap_bool_any\x18\xf6\x01 \x03(\x0b\x32\x39.cel.expr.conformance.proto2.TestAllTypes.MapBoolAnyEntry\x12V\n\x0fmap_bool_struct\x18\xf7\x01 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapBoolStructEntry\x12T\n\x0emap_bool_value\x18\xf8\x01 \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapBoolValueEntry\x12]\n\x13map_bool_list_value\x18\xf9\x01 \x03(\x0b\x32?.cel.expr.conformance.proto2.TestAllTypes.MapBoolListValueEntry\x12\x63\n\x16map_bool_int64_wrapper\x18\xfa\x01 \x03(\x0b\x32\x42.cel.expr.conformance.proto2.TestAllTypes.MapBoolInt64WrapperEntry\x12\x63\n\x16map_bool_int32_wrapper\x18\xfb\x01 \x03(\x0b\x32\x42.cel.expr.conformance.proto2.TestAllTypes.MapBoolInt32WrapperEntry\x12\x65\n\x17map_bool_double_wrapper\x18\xfc\x01 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapBoolDoubleWrapperEntry\x12\x63\n\x16map_bool_float_wrapper\x18\xfd\x01 \x03(\x0b\x32\x42.cel.expr.conformance.proto2.TestAllTypes.MapBoolFloatWrapperEntry\x12\x65\n\x17map_bool_uint64_wrapper\x18\xfe\x01 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapBoolUint64WrapperEntry\x12\x65\n\x17map_bool_uint32_wrapper\x18\xff\x01 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapBoolUint32WrapperEntry\x12\x65\n\x17map_bool_string_wrapper\x18\x80\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapBoolStringWrapperEntry\x12\x61\n\x15map_bool_bool_wrapper\x18\x81\x02 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapBoolBoolWrapperEntry\x12\x63\n\x16map_bool_bytes_wrapper\x18\x82\x02 \x03(\x0b\x32\x42.cel.expr.conformance.proto2.TestAllTypes.MapBoolBytesWrapperEntry\x12S\n\x0emap_int32_bool\x18J \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapInt32BoolEntry\x12W\n\x10map_int32_string\x18K \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt32StringEntry\x12U\n\x0fmap_int32_bytes\x18L \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt32BytesEntry\x12U\n\x0fmap_int32_int32\x18M \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt32Int32Entry\x12U\n\x0fmap_int32_int64\x18N \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt32Int64Entry\x12W\n\x10map_int32_uint32\x18O \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint32Entry\x12W\n\x10map_int32_uint64\x18P \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint64Entry\x12U\n\x0fmap_int32_float\x18Q \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt32FloatEntry\x12W\n\x10map_int32_double\x18R \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt32DoubleEntry\x12S\n\x0emap_int32_enum\x18S \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapInt32EnumEntry\x12Y\n\x11map_int32_message\x18T \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapInt32MessageEntry\x12\\\n\x12map_int32_duration\x18\xe7\x01 \x03(\x0b\x32?.cel.expr.conformance.proto2.TestAllTypes.MapInt32DurationEntry\x12^\n\x13map_int32_timestamp\x18\xe8\x01 \x03(\x0b\x32@.cel.expr.conformance.proto2.TestAllTypes.MapInt32TimestampEntry\x12_\n\x14map_int32_null_value\x18\xe9\x01 \x03(\x0b\x32@.cel.expr.conformance.proto2.TestAllTypes.MapInt32NullValueEntry\x12R\n\rmap_int32_any\x18\x83\x02 \x03(\x0b\x32:.cel.expr.conformance.proto2.TestAllTypes.MapInt32AnyEntry\x12X\n\x10map_int32_struct\x18\x84\x02 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt32StructEntry\x12V\n\x0fmap_int32_value\x18\x85\x02 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt32ValueEntry\x12_\n\x14map_int32_list_value\x18\x86\x02 \x03(\x0b\x32@.cel.expr.conformance.proto2.TestAllTypes.MapInt32ListValueEntry\x12\x65\n\x17map_int32_int64_wrapper\x18\x87\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapInt32Int64WrapperEntry\x12\x65\n\x17map_int32_int32_wrapper\x18\x88\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapInt32Int32WrapperEntry\x12g\n\x18map_int32_double_wrapper\x18\x89\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapInt32DoubleWrapperEntry\x12\x65\n\x17map_int32_float_wrapper\x18\x8a\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapInt32FloatWrapperEntry\x12g\n\x18map_int32_uint64_wrapper\x18\x8b\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint64WrapperEntry\x12g\n\x18map_int32_uint32_wrapper\x18\x8c\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint32WrapperEntry\x12g\n\x18map_int32_string_wrapper\x18\x8d\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapInt32StringWrapperEntry\x12\x63\n\x16map_int32_bool_wrapper\x18\x8e\x02 \x03(\x0b\x32\x42.cel.expr.conformance.proto2.TestAllTypes.MapInt32BoolWrapperEntry\x12\x65\n\x17map_int32_bytes_wrapper\x18\x8f\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapInt32BytesWrapperEntry\x12S\n\x0emap_int64_bool\x18U \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapInt64BoolEntry\x12W\n\x10map_int64_string\x18V \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt64StringEntry\x12U\n\x0fmap_int64_bytes\x18W \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt64BytesEntry\x12U\n\x0fmap_int64_int32\x18X \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt64Int32Entry\x12U\n\x0fmap_int64_int64\x18Y \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt64Int64Entry\x12W\n\x10map_int64_uint32\x18Z \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint32Entry\x12W\n\x10map_int64_uint64\x18[ \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint64Entry\x12U\n\x0fmap_int64_float\x18\\ \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt64FloatEntry\x12W\n\x10map_int64_double\x18] \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt64DoubleEntry\x12S\n\x0emap_int64_enum\x18^ \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapInt64EnumEntry\x12Y\n\x11map_int64_message\x18_ \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapInt64MessageEntry\x12\\\n\x12map_int64_duration\x18\xea\x01 \x03(\x0b\x32?.cel.expr.conformance.proto2.TestAllTypes.MapInt64DurationEntry\x12^\n\x13map_int64_timestamp\x18\xeb\x01 \x03(\x0b\x32@.cel.expr.conformance.proto2.TestAllTypes.MapInt64TimestampEntry\x12_\n\x14map_int64_null_value\x18\xec\x01 \x03(\x0b\x32@.cel.expr.conformance.proto2.TestAllTypes.MapInt64NullValueEntry\x12R\n\rmap_int64_any\x18\x90\x02 \x03(\x0b\x32:.cel.expr.conformance.proto2.TestAllTypes.MapInt64AnyEntry\x12X\n\x10map_int64_struct\x18\x91\x02 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapInt64StructEntry\x12V\n\x0fmap_int64_value\x18\x92\x02 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapInt64ValueEntry\x12_\n\x14map_int64_list_value\x18\x93\x02 \x03(\x0b\x32@.cel.expr.conformance.proto2.TestAllTypes.MapInt64ListValueEntry\x12\x65\n\x17map_int64_int64_wrapper\x18\x94\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapInt64Int64WrapperEntry\x12\x65\n\x17map_int64_int32_wrapper\x18\x95\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapInt64Int32WrapperEntry\x12g\n\x18map_int64_double_wrapper\x18\x96\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapInt64DoubleWrapperEntry\x12\x65\n\x17map_int64_float_wrapper\x18\x97\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapInt64FloatWrapperEntry\x12g\n\x18map_int64_uint64_wrapper\x18\x98\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint64WrapperEntry\x12g\n\x18map_int64_uint32_wrapper\x18\x99\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint32WrapperEntry\x12g\n\x18map_int64_string_wrapper\x18\x9a\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapInt64StringWrapperEntry\x12\x63\n\x16map_int64_bool_wrapper\x18\x9b\x02 \x03(\x0b\x32\x42.cel.expr.conformance.proto2.TestAllTypes.MapInt64BoolWrapperEntry\x12\x65\n\x17map_int64_bytes_wrapper\x18\x9c\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapInt64BytesWrapperEntry\x12U\n\x0fmap_uint32_bool\x18` \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapUint32BoolEntry\x12Y\n\x11map_uint32_string\x18\x61 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint32StringEntry\x12W\n\x10map_uint32_bytes\x18\x62 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint32BytesEntry\x12W\n\x10map_uint32_int32\x18\x63 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint32Int32Entry\x12X\n\x10map_uint32_int64\x18\xc8\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint32Int64Entry\x12Z\n\x11map_uint32_uint32\x18\xc9\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint32Entry\x12Z\n\x11map_uint32_uint64\x18\xca\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint64Entry\x12X\n\x10map_uint32_float\x18\xcb\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint32FloatEntry\x12Z\n\x11map_uint32_double\x18\xcc\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint32DoubleEntry\x12V\n\x0fmap_uint32_enum\x18\xcd\x01 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapUint32EnumEntry\x12\\\n\x12map_uint32_message\x18\xce\x01 \x03(\x0b\x32?.cel.expr.conformance.proto2.TestAllTypes.MapUint32MessageEntry\x12^\n\x13map_uint32_duration\x18\xed\x01 \x03(\x0b\x32@.cel.expr.conformance.proto2.TestAllTypes.MapUint32DurationEntry\x12`\n\x14map_uint32_timestamp\x18\xee\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapUint32TimestampEntry\x12\x61\n\x15map_uint32_null_value\x18\xef\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapUint32NullValueEntry\x12T\n\x0emap_uint32_any\x18\x9d\x02 \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapUint32AnyEntry\x12Z\n\x11map_uint32_struct\x18\x9e\x02 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint32StructEntry\x12X\n\x10map_uint32_value\x18\x9f\x02 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint32ValueEntry\x12\x61\n\x15map_uint32_list_value\x18\xa0\x02 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapUint32ListValueEntry\x12g\n\x18map_uint32_int64_wrapper\x18\xa1\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapUint32Int64WrapperEntry\x12g\n\x18map_uint32_int32_wrapper\x18\xa2\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapUint32Int32WrapperEntry\x12i\n\x19map_uint32_double_wrapper\x18\xa3\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapUint32DoubleWrapperEntry\x12g\n\x18map_uint32_float_wrapper\x18\xa4\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapUint32FloatWrapperEntry\x12i\n\x19map_uint32_uint64_wrapper\x18\xa5\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint64WrapperEntry\x12i\n\x19map_uint32_uint32_wrapper\x18\xa6\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint32WrapperEntry\x12i\n\x19map_uint32_string_wrapper\x18\xa7\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapUint32StringWrapperEntry\x12\x65\n\x17map_uint32_bool_wrapper\x18\xa8\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapUint32BoolWrapperEntry\x12g\n\x18map_uint32_bytes_wrapper\x18\xa9\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapUint32BytesWrapperEntry\x12V\n\x0fmap_uint64_bool\x18\xcf\x01 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapUint64BoolEntry\x12Z\n\x11map_uint64_string\x18\xd0\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint64StringEntry\x12X\n\x10map_uint64_bytes\x18\xd1\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint64BytesEntry\x12X\n\x10map_uint64_int32\x18\xd2\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint64Int32Entry\x12X\n\x10map_uint64_int64\x18\xd3\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint64Int64Entry\x12Z\n\x11map_uint64_uint32\x18\xd4\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint32Entry\x12Z\n\x11map_uint64_uint64\x18\xd5\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint64Entry\x12X\n\x10map_uint64_float\x18\xd6\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint64FloatEntry\x12Z\n\x11map_uint64_double\x18\xd7\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint64DoubleEntry\x12V\n\x0fmap_uint64_enum\x18\xd8\x01 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapUint64EnumEntry\x12\\\n\x12map_uint64_message\x18\xd9\x01 \x03(\x0b\x32?.cel.expr.conformance.proto2.TestAllTypes.MapUint64MessageEntry\x12^\n\x13map_uint64_duration\x18\xf0\x01 \x03(\x0b\x32@.cel.expr.conformance.proto2.TestAllTypes.MapUint64DurationEntry\x12`\n\x14map_uint64_timestamp\x18\xf1\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapUint64TimestampEntry\x12\x61\n\x15map_uint64_null_value\x18\xf2\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapUint64NullValueEntry\x12T\n\x0emap_uint64_any\x18\xaa\x02 \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapUint64AnyEntry\x12Z\n\x11map_uint64_struct\x18\xab\x02 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapUint64StructEntry\x12X\n\x10map_uint64_value\x18\xac\x02 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapUint64ValueEntry\x12\x61\n\x15map_uint64_list_value\x18\xad\x02 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapUint64ListValueEntry\x12g\n\x18map_uint64_int64_wrapper\x18\xae\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapUint64Int64WrapperEntry\x12g\n\x18map_uint64_int32_wrapper\x18\xaf\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapUint64Int32WrapperEntry\x12i\n\x19map_uint64_double_wrapper\x18\xb0\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapUint64DoubleWrapperEntry\x12g\n\x18map_uint64_float_wrapper\x18\xb1\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapUint64FloatWrapperEntry\x12i\n\x19map_uint64_uint64_wrapper\x18\xb2\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint64WrapperEntry\x12i\n\x19map_uint64_uint32_wrapper\x18\xb3\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint32WrapperEntry\x12i\n\x19map_uint64_string_wrapper\x18\xb4\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapUint64StringWrapperEntry\x12\x65\n\x17map_uint64_bool_wrapper\x18\xb5\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapUint64BoolWrapperEntry\x12g\n\x18map_uint64_bytes_wrapper\x18\xb6\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapUint64BytesWrapperEntry\x12V\n\x0fmap_string_bool\x18\xda\x01 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapStringBoolEntry\x12Y\n\x11map_string_string\x18= \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapStringStringEntry\x12X\n\x10map_string_bytes\x18\xdb\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapStringBytesEntry\x12X\n\x10map_string_int32\x18\xdc\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapStringInt32Entry\x12X\n\x10map_string_int64\x18\xdd\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapStringInt64Entry\x12Z\n\x11map_string_uint32\x18\xde\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapStringUint32Entry\x12Z\n\x11map_string_uint64\x18\xdf\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapStringUint64Entry\x12X\n\x10map_string_float\x18\xe0\x01 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapStringFloatEntry\x12Z\n\x11map_string_double\x18\xe1\x01 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapStringDoubleEntry\x12V\n\x0fmap_string_enum\x18\xe2\x01 \x03(\x0b\x32<.cel.expr.conformance.proto2.TestAllTypes.MapStringEnumEntry\x12\\\n\x12map_string_message\x18\xe3\x01 \x03(\x0b\x32?.cel.expr.conformance.proto2.TestAllTypes.MapStringMessageEntry\x12^\n\x13map_string_duration\x18\xf3\x01 \x03(\x0b\x32@.cel.expr.conformance.proto2.TestAllTypes.MapStringDurationEntry\x12`\n\x14map_string_timestamp\x18\xf4\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapStringTimestampEntry\x12\x61\n\x15map_string_null_value\x18\xf5\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapStringNullValueEntry\x12T\n\x0emap_string_any\x18\xb7\x02 \x03(\x0b\x32;.cel.expr.conformance.proto2.TestAllTypes.MapStringAnyEntry\x12Z\n\x11map_string_struct\x18\xb8\x02 \x03(\x0b\x32>.cel.expr.conformance.proto2.TestAllTypes.MapStringStructEntry\x12X\n\x10map_string_value\x18\xb9\x02 \x03(\x0b\x32=.cel.expr.conformance.proto2.TestAllTypes.MapStringValueEntry\x12\x61\n\x15map_string_list_value\x18\xba\x02 \x03(\x0b\x32\x41.cel.expr.conformance.proto2.TestAllTypes.MapStringListValueEntry\x12g\n\x18map_string_int64_wrapper\x18\xbb\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapStringInt64WrapperEntry\x12g\n\x18map_string_int32_wrapper\x18\xbc\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapStringInt32WrapperEntry\x12i\n\x19map_string_double_wrapper\x18\xbd\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapStringDoubleWrapperEntry\x12g\n\x18map_string_float_wrapper\x18\xbe\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapStringFloatWrapperEntry\x12i\n\x19map_string_uint64_wrapper\x18\xbf\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapStringUint64WrapperEntry\x12i\n\x19map_string_uint32_wrapper\x18\xc0\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapStringUint32WrapperEntry\x12i\n\x19map_string_string_wrapper\x18\xc1\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto2.TestAllTypes.MapStringStringWrapperEntry\x12\x65\n\x17map_string_bool_wrapper\x18\xc2\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto2.TestAllTypes.MapStringBoolWrapperEntry\x12g\n\x18map_string_bytes_wrapper\x18\xc3\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto2.TestAllTypes.MapStringBytesWrapperEntry\x12\x46\n\noneof_type\x18\x90\x03 \x01(\x0b\x32/.cel.expr.conformance.proto2.NestedTestAllTypesH\x01\x12M\n\toneof_msg\x18\x91\x03 \x01(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessageH\x01\x12\x15\n\noneof_bool\x18\x92\x03 \x01(\x08H\x01\x12K\n\x0bnestedgroup\x18\x93\x03 \x01(\n25.cel.expr.conformance.proto2.TestAllTypes.NestedGroup\x1a\x1b\n\rNestedMessage\x12\n\n\x02\x62\x62\x18\x01 \x01(\x05\x1aj\n\x17MapInt64NestedTypeEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12>\n\x05value\x18\x02 \x01(\x0b\x32/.cel.expr.conformance.proto2.NestedTestAllTypes:\x02\x38\x01\x1a\x32\n\x10MapBoolBoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x34\n\x12MapBoolStringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x33\n\x11MapBoolBytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x33\n\x11MapBoolInt32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x33\n\x11MapBoolInt64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x34\n\x12MapBoolUint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x34\n\x12MapBoolUint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x33\n\x11MapBoolFloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x34\n\x12MapBoolDoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1ah\n\x10MapBoolEnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum:\x02\x38\x01\x1an\n\x13MapBoolMessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessage:\x02\x38\x01\x1aQ\n\x14MapBoolDurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aS\n\x15MapBoolTimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aS\n\x15MapBoolNullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aG\n\x0fMapBoolAnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aM\n\x12MapBoolStructEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aK\n\x11MapBoolValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aS\n\x15MapBoolListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aW\n\x18MapBoolInt64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aW\n\x18MapBoolInt32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1aY\n\x19MapBoolDoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aW\n\x18MapBoolFloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1aY\n\x19MapBoolUint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1aY\n\x19MapBoolUint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1aY\n\x19MapBoolStringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aU\n\x17MapBoolBoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aW\n\x18MapBoolBytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x33\n\x11MapInt32BoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x35\n\x13MapInt32StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x34\n\x12MapInt32BytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x34\n\x12MapInt32Int32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x34\n\x12MapInt32Int64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x35\n\x13MapInt32Uint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x35\n\x13MapInt32Uint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x34\n\x12MapInt32FloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x35\n\x13MapInt32DoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1ai\n\x11MapInt32EnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum:\x02\x38\x01\x1ao\n\x14MapInt32MessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessage:\x02\x38\x01\x1aR\n\x15MapInt32DurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aT\n\x16MapInt32TimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aT\n\x16MapInt32NullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aH\n\x10MapInt32AnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aN\n\x13MapInt32StructEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aL\n\x12MapInt32ValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aT\n\x16MapInt32ListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aX\n\x19MapInt32Int64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aX\n\x19MapInt32Int32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1aZ\n\x1aMapInt32DoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aX\n\x19MapInt32FloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1aZ\n\x1aMapInt32Uint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1aZ\n\x1aMapInt32Uint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1aZ\n\x1aMapInt32StringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aV\n\x18MapInt32BoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aX\n\x19MapInt32BytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x33\n\x11MapInt64BoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x35\n\x13MapInt64StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x34\n\x12MapInt64BytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x34\n\x12MapInt64Int32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x34\n\x12MapInt64Int64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x35\n\x13MapInt64Uint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x35\n\x13MapInt64Uint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x34\n\x12MapInt64FloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x35\n\x13MapInt64DoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1ai\n\x11MapInt64EnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum:\x02\x38\x01\x1ao\n\x14MapInt64MessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessage:\x02\x38\x01\x1aR\n\x15MapInt64DurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aT\n\x16MapInt64TimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aT\n\x16MapInt64NullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aH\n\x10MapInt64AnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aN\n\x13MapInt64StructEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aL\n\x12MapInt64ValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aT\n\x16MapInt64ListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aX\n\x19MapInt64Int64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aX\n\x19MapInt64Int32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1aZ\n\x1aMapInt64DoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aX\n\x19MapInt64FloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1aZ\n\x1aMapInt64Uint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1aZ\n\x1aMapInt64Uint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1aZ\n\x1aMapInt64StringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aV\n\x18MapInt64BoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aX\n\x19MapInt64BytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x34\n\x12MapUint32BoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x36\n\x14MapUint32StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x35\n\x13MapUint32BytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x35\n\x13MapUint32Int32Entry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x35\n\x13MapUint32Int64Entry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x36\n\x14MapUint32Uint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x36\n\x14MapUint32Uint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x35\n\x13MapUint32FloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x36\n\x14MapUint32DoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1aj\n\x12MapUint32EnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum:\x02\x38\x01\x1ap\n\x15MapUint32MessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessage:\x02\x38\x01\x1aS\n\x16MapUint32DurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aU\n\x17MapUint32TimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aU\n\x17MapUint32NullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aI\n\x11MapUint32AnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aO\n\x14MapUint32StructEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aM\n\x13MapUint32ValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aU\n\x17MapUint32ListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aY\n\x1aMapUint32Int64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aY\n\x1aMapUint32Int32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1a[\n\x1bMapUint32DoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aY\n\x1aMapUint32FloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1a[\n\x1bMapUint32Uint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1a[\n\x1bMapUint32Uint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1a[\n\x1bMapUint32StringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aW\n\x19MapUint32BoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aY\n\x1aMapUint32BytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x34\n\x12MapUint64BoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x36\n\x14MapUint64StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x35\n\x13MapUint64BytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x35\n\x13MapUint64Int32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x35\n\x13MapUint64Int64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x36\n\x14MapUint64Uint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x36\n\x14MapUint64Uint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x35\n\x13MapUint64FloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x36\n\x14MapUint64DoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1aj\n\x12MapUint64EnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum:\x02\x38\x01\x1ap\n\x15MapUint64MessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessage:\x02\x38\x01\x1aS\n\x16MapUint64DurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aU\n\x17MapUint64TimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aU\n\x17MapUint64NullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aI\n\x11MapUint64AnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aO\n\x14MapUint64StructEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aM\n\x13MapUint64ValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aU\n\x17MapUint64ListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aY\n\x1aMapUint64Int64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aY\n\x1aMapUint64Int32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1a[\n\x1bMapUint64DoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aY\n\x1aMapUint64FloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1a[\n\x1bMapUint64Uint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1a[\n\x1bMapUint64Uint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1a[\n\x1bMapUint64StringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aW\n\x19MapUint64BoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aY\n\x1aMapUint64BytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x34\n\x12MapStringBoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x36\n\x14MapStringStringEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x35\n\x13MapStringBytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x35\n\x13MapStringInt32Entry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x35\n\x13MapStringInt64Entry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x36\n\x14MapStringUint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x36\n\x14MapStringUint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x35\n\x13MapStringFloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x36\n\x14MapStringDoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1aj\n\x12MapStringEnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto2.TestAllTypes.NestedEnum:\x02\x38\x01\x1ap\n\x15MapStringMessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto2.TestAllTypes.NestedMessage:\x02\x38\x01\x1aS\n\x16MapStringDurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aU\n\x17MapStringTimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aU\n\x17MapStringNullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aI\n\x11MapStringAnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aO\n\x14MapStringStructEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aM\n\x13MapStringValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aU\n\x17MapStringListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aY\n\x1aMapStringInt64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aY\n\x1aMapStringInt32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1a[\n\x1bMapStringDoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aY\n\x1aMapStringFloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1a[\n\x1bMapStringUint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1a[\n\x1bMapStringUint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1a[\n\x1bMapStringStringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aW\n\x19MapStringBoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aY\n\x1aMapStringBytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x37\n\x0bNestedGroup\x12\x12\n\tsingle_id\x18\x94\x03 \x01(\x05\x12\x14\n\x0bsingle_name\x18\x95\x03 \x01(\t\"\'\n\nNestedEnum\x12\x07\n\x03\x46OO\x10\x00\x12\x07\n\x03\x42\x41R\x10\x01\x12\x07\n\x03\x42\x41Z\x10\x02*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\r\n\x0bnested_typeB\x06\n\x04kind\"\x90\x01\n\x12NestedTestAllTypes\x12>\n\x05\x63hild\x18\x01 \x01(\x0b\x32/.cel.expr.conformance.proto2.NestedTestAllTypes\x12:\n\x07payload\x18\x02 \x01(\x0b\x32).cel.expr.conformance.proto2.TestAllTypes\"&\n\x0cTestRequired\x12\x16\n\x0erequired_int32\x18\x01 \x02(\x05*\'\n\nGlobalEnum\x12\x07\n\x03GOO\x10\x00\x12\x07\n\x03GAR\x10\x01\x12\x07\n\x03GAZ\x10\x02\x42Z\n\x1f\x64\x65v.cel.expr.conformance.proto2B\x11TestAllTypesProtoP\x01Z\x1f\x63\x65l.dev/expr/conformance/proto2\xf8\x01\x01') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.conformance.proto2.test_all_types_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\037dev.cel.expr.conformance.proto2B\021TestAllTypesProtoP\001Z\037cel.dev/expr/conformance/proto2\370\001\001' + _globals['_TESTALLTYPES_MAPINT64NESTEDTYPEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64NESTEDTYPEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLBOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLBOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLSTRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLSTRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLBYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLBYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLUINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLUINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLUINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLUINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLFLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLFLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLDOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLDOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLMESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLMESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLDURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLDURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLTIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLTIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLNULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLNULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLSTRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLSTRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLLISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLLISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLDOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLDOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLFLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLFLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLUINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLUINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLUINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLUINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLSTRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLSTRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLBOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLBOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLBYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLBYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32BOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32BOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32STRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32STRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32BYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32BYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32INT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32INT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32INT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32INT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32UINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32UINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32UINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32UINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32FLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32FLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32DOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32DOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32ENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32ENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32MESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32MESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32DURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32DURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32TIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32TIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32NULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32NULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32ANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32ANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32STRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32STRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32VALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32VALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32LISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32LISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32INT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32INT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32INT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32INT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32DOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32DOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32FLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32FLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32UINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32UINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32UINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32UINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32STRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32STRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32BOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32BOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32BYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32BYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64BOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64BOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64STRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64STRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64BYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64BYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64INT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64INT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64INT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64INT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64UINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64UINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64UINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64UINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64FLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64FLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64DOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64DOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64ENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64ENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64MESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64MESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64DURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64DURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64TIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64TIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64NULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64NULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64ANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64ANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64STRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64STRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64VALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64VALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64LISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64LISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64INT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64INT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64INT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64INT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64DOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64DOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64FLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64FLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64UINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64UINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64UINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64UINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64STRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64STRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64BOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64BOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64BYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64BYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32BOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32BOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32STRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32STRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32BYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32BYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32INT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32INT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32INT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32INT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32UINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32UINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32UINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32UINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32FLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32FLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32DOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32DOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32ENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32ENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32MESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32MESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32DURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32DURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32TIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32TIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32NULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32NULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32ANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32ANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32STRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32STRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32VALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32VALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32LISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32LISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32INT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32INT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32INT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32INT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32DOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32DOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32FLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32FLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32UINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32UINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32UINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32UINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32STRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32STRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32BOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32BOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32BYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32BYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64BOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64BOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64STRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64STRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64BYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64BYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64INT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64INT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64INT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64INT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64UINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64UINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64UINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64UINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64FLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64FLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64DOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64DOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64ENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64ENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64MESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64MESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64DURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64DURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64TIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64TIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64NULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64NULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64ANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64ANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64STRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64STRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64VALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64VALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64LISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64LISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64INT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64INT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64INT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64INT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64DOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64DOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64FLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64FLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64UINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64UINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64UINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64UINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64STRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64STRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64BOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64BOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64BYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64BYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGBOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGBOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGSTRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGSTRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGBYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGBYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGUINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGUINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGUINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGUINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGFLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGFLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGMESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGMESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGDURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGDURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGTIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGTIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGNULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGNULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGSTRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGSTRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGLISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGLISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGFLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGFLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGUINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGUINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGUINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGUINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGSTRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGSTRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGBOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGBOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGBYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGBYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES'].fields_by_name['repeated_string_piece']._loaded_options = None + _globals['_TESTALLTYPES'].fields_by_name['repeated_string_piece']._serialized_options = b'\010\002' + _globals['_TESTALLTYPES'].fields_by_name['repeated_cord']._loaded_options = None + _globals['_TESTALLTYPES'].fields_by_name['repeated_cord']._serialized_options = b'\010\001' + _globals['_GLOBALENUM']._serialized_start=32561 + _globals['_GLOBALENUM']._serialized_end=32600 + _globals['_TESTALLTYPES']._serialized_start=300 + _globals['_TESTALLTYPES']._serialized_end=32372 + _globals['_TESTALLTYPES_NESTEDMESSAGE']._serialized_start=19457 + _globals['_TESTALLTYPES_NESTEDMESSAGE']._serialized_end=19484 + _globals['_TESTALLTYPES_MAPINT64NESTEDTYPEENTRY']._serialized_start=19486 + _globals['_TESTALLTYPES_MAPINT64NESTEDTYPEENTRY']._serialized_end=19592 + _globals['_TESTALLTYPES_MAPBOOLBOOLENTRY']._serialized_start=19594 + _globals['_TESTALLTYPES_MAPBOOLBOOLENTRY']._serialized_end=19644 + _globals['_TESTALLTYPES_MAPBOOLSTRINGENTRY']._serialized_start=19646 + _globals['_TESTALLTYPES_MAPBOOLSTRINGENTRY']._serialized_end=19698 + _globals['_TESTALLTYPES_MAPBOOLBYTESENTRY']._serialized_start=19700 + _globals['_TESTALLTYPES_MAPBOOLBYTESENTRY']._serialized_end=19751 + _globals['_TESTALLTYPES_MAPBOOLINT32ENTRY']._serialized_start=19753 + _globals['_TESTALLTYPES_MAPBOOLINT32ENTRY']._serialized_end=19804 + _globals['_TESTALLTYPES_MAPBOOLINT64ENTRY']._serialized_start=19806 + _globals['_TESTALLTYPES_MAPBOOLINT64ENTRY']._serialized_end=19857 + _globals['_TESTALLTYPES_MAPBOOLUINT32ENTRY']._serialized_start=19859 + _globals['_TESTALLTYPES_MAPBOOLUINT32ENTRY']._serialized_end=19911 + _globals['_TESTALLTYPES_MAPBOOLUINT64ENTRY']._serialized_start=19913 + _globals['_TESTALLTYPES_MAPBOOLUINT64ENTRY']._serialized_end=19965 + _globals['_TESTALLTYPES_MAPBOOLFLOATENTRY']._serialized_start=19967 + _globals['_TESTALLTYPES_MAPBOOLFLOATENTRY']._serialized_end=20018 + _globals['_TESTALLTYPES_MAPBOOLDOUBLEENTRY']._serialized_start=20020 + _globals['_TESTALLTYPES_MAPBOOLDOUBLEENTRY']._serialized_end=20072 + _globals['_TESTALLTYPES_MAPBOOLENUMENTRY']._serialized_start=20074 + _globals['_TESTALLTYPES_MAPBOOLENUMENTRY']._serialized_end=20178 + _globals['_TESTALLTYPES_MAPBOOLMESSAGEENTRY']._serialized_start=20180 + _globals['_TESTALLTYPES_MAPBOOLMESSAGEENTRY']._serialized_end=20290 + _globals['_TESTALLTYPES_MAPBOOLDURATIONENTRY']._serialized_start=20292 + _globals['_TESTALLTYPES_MAPBOOLDURATIONENTRY']._serialized_end=20373 + _globals['_TESTALLTYPES_MAPBOOLTIMESTAMPENTRY']._serialized_start=20375 + _globals['_TESTALLTYPES_MAPBOOLTIMESTAMPENTRY']._serialized_end=20458 + _globals['_TESTALLTYPES_MAPBOOLNULLVALUEENTRY']._serialized_start=20460 + _globals['_TESTALLTYPES_MAPBOOLNULLVALUEENTRY']._serialized_end=20543 + _globals['_TESTALLTYPES_MAPBOOLANYENTRY']._serialized_start=20545 + _globals['_TESTALLTYPES_MAPBOOLANYENTRY']._serialized_end=20616 + _globals['_TESTALLTYPES_MAPBOOLSTRUCTENTRY']._serialized_start=20618 + _globals['_TESTALLTYPES_MAPBOOLSTRUCTENTRY']._serialized_end=20695 + _globals['_TESTALLTYPES_MAPBOOLVALUEENTRY']._serialized_start=20697 + _globals['_TESTALLTYPES_MAPBOOLVALUEENTRY']._serialized_end=20772 + _globals['_TESTALLTYPES_MAPBOOLLISTVALUEENTRY']._serialized_start=20774 + _globals['_TESTALLTYPES_MAPBOOLLISTVALUEENTRY']._serialized_end=20857 + _globals['_TESTALLTYPES_MAPBOOLINT64WRAPPERENTRY']._serialized_start=20859 + _globals['_TESTALLTYPES_MAPBOOLINT64WRAPPERENTRY']._serialized_end=20946 + _globals['_TESTALLTYPES_MAPBOOLINT32WRAPPERENTRY']._serialized_start=20948 + _globals['_TESTALLTYPES_MAPBOOLINT32WRAPPERENTRY']._serialized_end=21035 + _globals['_TESTALLTYPES_MAPBOOLDOUBLEWRAPPERENTRY']._serialized_start=21037 + _globals['_TESTALLTYPES_MAPBOOLDOUBLEWRAPPERENTRY']._serialized_end=21126 + _globals['_TESTALLTYPES_MAPBOOLFLOATWRAPPERENTRY']._serialized_start=21128 + _globals['_TESTALLTYPES_MAPBOOLFLOATWRAPPERENTRY']._serialized_end=21215 + _globals['_TESTALLTYPES_MAPBOOLUINT64WRAPPERENTRY']._serialized_start=21217 + _globals['_TESTALLTYPES_MAPBOOLUINT64WRAPPERENTRY']._serialized_end=21306 + _globals['_TESTALLTYPES_MAPBOOLUINT32WRAPPERENTRY']._serialized_start=21308 + _globals['_TESTALLTYPES_MAPBOOLUINT32WRAPPERENTRY']._serialized_end=21397 + _globals['_TESTALLTYPES_MAPBOOLSTRINGWRAPPERENTRY']._serialized_start=21399 + _globals['_TESTALLTYPES_MAPBOOLSTRINGWRAPPERENTRY']._serialized_end=21488 + _globals['_TESTALLTYPES_MAPBOOLBOOLWRAPPERENTRY']._serialized_start=21490 + _globals['_TESTALLTYPES_MAPBOOLBOOLWRAPPERENTRY']._serialized_end=21575 + _globals['_TESTALLTYPES_MAPBOOLBYTESWRAPPERENTRY']._serialized_start=21577 + _globals['_TESTALLTYPES_MAPBOOLBYTESWRAPPERENTRY']._serialized_end=21664 + _globals['_TESTALLTYPES_MAPINT32BOOLENTRY']._serialized_start=21666 + _globals['_TESTALLTYPES_MAPINT32BOOLENTRY']._serialized_end=21717 + _globals['_TESTALLTYPES_MAPINT32STRINGENTRY']._serialized_start=21719 + _globals['_TESTALLTYPES_MAPINT32STRINGENTRY']._serialized_end=21772 + _globals['_TESTALLTYPES_MAPINT32BYTESENTRY']._serialized_start=21774 + _globals['_TESTALLTYPES_MAPINT32BYTESENTRY']._serialized_end=21826 + _globals['_TESTALLTYPES_MAPINT32INT32ENTRY']._serialized_start=21828 + _globals['_TESTALLTYPES_MAPINT32INT32ENTRY']._serialized_end=21880 + _globals['_TESTALLTYPES_MAPINT32INT64ENTRY']._serialized_start=21882 + _globals['_TESTALLTYPES_MAPINT32INT64ENTRY']._serialized_end=21934 + _globals['_TESTALLTYPES_MAPINT32UINT32ENTRY']._serialized_start=21936 + _globals['_TESTALLTYPES_MAPINT32UINT32ENTRY']._serialized_end=21989 + _globals['_TESTALLTYPES_MAPINT32UINT64ENTRY']._serialized_start=21991 + _globals['_TESTALLTYPES_MAPINT32UINT64ENTRY']._serialized_end=22044 + _globals['_TESTALLTYPES_MAPINT32FLOATENTRY']._serialized_start=22046 + _globals['_TESTALLTYPES_MAPINT32FLOATENTRY']._serialized_end=22098 + _globals['_TESTALLTYPES_MAPINT32DOUBLEENTRY']._serialized_start=22100 + _globals['_TESTALLTYPES_MAPINT32DOUBLEENTRY']._serialized_end=22153 + _globals['_TESTALLTYPES_MAPINT32ENUMENTRY']._serialized_start=22155 + _globals['_TESTALLTYPES_MAPINT32ENUMENTRY']._serialized_end=22260 + _globals['_TESTALLTYPES_MAPINT32MESSAGEENTRY']._serialized_start=22262 + _globals['_TESTALLTYPES_MAPINT32MESSAGEENTRY']._serialized_end=22373 + _globals['_TESTALLTYPES_MAPINT32DURATIONENTRY']._serialized_start=22375 + _globals['_TESTALLTYPES_MAPINT32DURATIONENTRY']._serialized_end=22457 + _globals['_TESTALLTYPES_MAPINT32TIMESTAMPENTRY']._serialized_start=22459 + _globals['_TESTALLTYPES_MAPINT32TIMESTAMPENTRY']._serialized_end=22543 + _globals['_TESTALLTYPES_MAPINT32NULLVALUEENTRY']._serialized_start=22545 + _globals['_TESTALLTYPES_MAPINT32NULLVALUEENTRY']._serialized_end=22629 + _globals['_TESTALLTYPES_MAPINT32ANYENTRY']._serialized_start=22631 + _globals['_TESTALLTYPES_MAPINT32ANYENTRY']._serialized_end=22703 + _globals['_TESTALLTYPES_MAPINT32STRUCTENTRY']._serialized_start=22705 + _globals['_TESTALLTYPES_MAPINT32STRUCTENTRY']._serialized_end=22783 + _globals['_TESTALLTYPES_MAPINT32VALUEENTRY']._serialized_start=22785 + _globals['_TESTALLTYPES_MAPINT32VALUEENTRY']._serialized_end=22861 + _globals['_TESTALLTYPES_MAPINT32LISTVALUEENTRY']._serialized_start=22863 + _globals['_TESTALLTYPES_MAPINT32LISTVALUEENTRY']._serialized_end=22947 + _globals['_TESTALLTYPES_MAPINT32INT64WRAPPERENTRY']._serialized_start=22949 + _globals['_TESTALLTYPES_MAPINT32INT64WRAPPERENTRY']._serialized_end=23037 + _globals['_TESTALLTYPES_MAPINT32INT32WRAPPERENTRY']._serialized_start=23039 + _globals['_TESTALLTYPES_MAPINT32INT32WRAPPERENTRY']._serialized_end=23127 + _globals['_TESTALLTYPES_MAPINT32DOUBLEWRAPPERENTRY']._serialized_start=23129 + _globals['_TESTALLTYPES_MAPINT32DOUBLEWRAPPERENTRY']._serialized_end=23219 + _globals['_TESTALLTYPES_MAPINT32FLOATWRAPPERENTRY']._serialized_start=23221 + _globals['_TESTALLTYPES_MAPINT32FLOATWRAPPERENTRY']._serialized_end=23309 + _globals['_TESTALLTYPES_MAPINT32UINT64WRAPPERENTRY']._serialized_start=23311 + _globals['_TESTALLTYPES_MAPINT32UINT64WRAPPERENTRY']._serialized_end=23401 + _globals['_TESTALLTYPES_MAPINT32UINT32WRAPPERENTRY']._serialized_start=23403 + _globals['_TESTALLTYPES_MAPINT32UINT32WRAPPERENTRY']._serialized_end=23493 + _globals['_TESTALLTYPES_MAPINT32STRINGWRAPPERENTRY']._serialized_start=23495 + _globals['_TESTALLTYPES_MAPINT32STRINGWRAPPERENTRY']._serialized_end=23585 + _globals['_TESTALLTYPES_MAPINT32BOOLWRAPPERENTRY']._serialized_start=23587 + _globals['_TESTALLTYPES_MAPINT32BOOLWRAPPERENTRY']._serialized_end=23673 + _globals['_TESTALLTYPES_MAPINT32BYTESWRAPPERENTRY']._serialized_start=23675 + _globals['_TESTALLTYPES_MAPINT32BYTESWRAPPERENTRY']._serialized_end=23763 + _globals['_TESTALLTYPES_MAPINT64BOOLENTRY']._serialized_start=23765 + _globals['_TESTALLTYPES_MAPINT64BOOLENTRY']._serialized_end=23816 + _globals['_TESTALLTYPES_MAPINT64STRINGENTRY']._serialized_start=23818 + _globals['_TESTALLTYPES_MAPINT64STRINGENTRY']._serialized_end=23871 + _globals['_TESTALLTYPES_MAPINT64BYTESENTRY']._serialized_start=23873 + _globals['_TESTALLTYPES_MAPINT64BYTESENTRY']._serialized_end=23925 + _globals['_TESTALLTYPES_MAPINT64INT32ENTRY']._serialized_start=23927 + _globals['_TESTALLTYPES_MAPINT64INT32ENTRY']._serialized_end=23979 + _globals['_TESTALLTYPES_MAPINT64INT64ENTRY']._serialized_start=23981 + _globals['_TESTALLTYPES_MAPINT64INT64ENTRY']._serialized_end=24033 + _globals['_TESTALLTYPES_MAPINT64UINT32ENTRY']._serialized_start=24035 + _globals['_TESTALLTYPES_MAPINT64UINT32ENTRY']._serialized_end=24088 + _globals['_TESTALLTYPES_MAPINT64UINT64ENTRY']._serialized_start=24090 + _globals['_TESTALLTYPES_MAPINT64UINT64ENTRY']._serialized_end=24143 + _globals['_TESTALLTYPES_MAPINT64FLOATENTRY']._serialized_start=24145 + _globals['_TESTALLTYPES_MAPINT64FLOATENTRY']._serialized_end=24197 + _globals['_TESTALLTYPES_MAPINT64DOUBLEENTRY']._serialized_start=24199 + _globals['_TESTALLTYPES_MAPINT64DOUBLEENTRY']._serialized_end=24252 + _globals['_TESTALLTYPES_MAPINT64ENUMENTRY']._serialized_start=24254 + _globals['_TESTALLTYPES_MAPINT64ENUMENTRY']._serialized_end=24359 + _globals['_TESTALLTYPES_MAPINT64MESSAGEENTRY']._serialized_start=24361 + _globals['_TESTALLTYPES_MAPINT64MESSAGEENTRY']._serialized_end=24472 + _globals['_TESTALLTYPES_MAPINT64DURATIONENTRY']._serialized_start=24474 + _globals['_TESTALLTYPES_MAPINT64DURATIONENTRY']._serialized_end=24556 + _globals['_TESTALLTYPES_MAPINT64TIMESTAMPENTRY']._serialized_start=24558 + _globals['_TESTALLTYPES_MAPINT64TIMESTAMPENTRY']._serialized_end=24642 + _globals['_TESTALLTYPES_MAPINT64NULLVALUEENTRY']._serialized_start=24644 + _globals['_TESTALLTYPES_MAPINT64NULLVALUEENTRY']._serialized_end=24728 + _globals['_TESTALLTYPES_MAPINT64ANYENTRY']._serialized_start=24730 + _globals['_TESTALLTYPES_MAPINT64ANYENTRY']._serialized_end=24802 + _globals['_TESTALLTYPES_MAPINT64STRUCTENTRY']._serialized_start=24804 + _globals['_TESTALLTYPES_MAPINT64STRUCTENTRY']._serialized_end=24882 + _globals['_TESTALLTYPES_MAPINT64VALUEENTRY']._serialized_start=24884 + _globals['_TESTALLTYPES_MAPINT64VALUEENTRY']._serialized_end=24960 + _globals['_TESTALLTYPES_MAPINT64LISTVALUEENTRY']._serialized_start=24962 + _globals['_TESTALLTYPES_MAPINT64LISTVALUEENTRY']._serialized_end=25046 + _globals['_TESTALLTYPES_MAPINT64INT64WRAPPERENTRY']._serialized_start=25048 + _globals['_TESTALLTYPES_MAPINT64INT64WRAPPERENTRY']._serialized_end=25136 + _globals['_TESTALLTYPES_MAPINT64INT32WRAPPERENTRY']._serialized_start=25138 + _globals['_TESTALLTYPES_MAPINT64INT32WRAPPERENTRY']._serialized_end=25226 + _globals['_TESTALLTYPES_MAPINT64DOUBLEWRAPPERENTRY']._serialized_start=25228 + _globals['_TESTALLTYPES_MAPINT64DOUBLEWRAPPERENTRY']._serialized_end=25318 + _globals['_TESTALLTYPES_MAPINT64FLOATWRAPPERENTRY']._serialized_start=25320 + _globals['_TESTALLTYPES_MAPINT64FLOATWRAPPERENTRY']._serialized_end=25408 + _globals['_TESTALLTYPES_MAPINT64UINT64WRAPPERENTRY']._serialized_start=25410 + _globals['_TESTALLTYPES_MAPINT64UINT64WRAPPERENTRY']._serialized_end=25500 + _globals['_TESTALLTYPES_MAPINT64UINT32WRAPPERENTRY']._serialized_start=25502 + _globals['_TESTALLTYPES_MAPINT64UINT32WRAPPERENTRY']._serialized_end=25592 + _globals['_TESTALLTYPES_MAPINT64STRINGWRAPPERENTRY']._serialized_start=25594 + _globals['_TESTALLTYPES_MAPINT64STRINGWRAPPERENTRY']._serialized_end=25684 + _globals['_TESTALLTYPES_MAPINT64BOOLWRAPPERENTRY']._serialized_start=25686 + _globals['_TESTALLTYPES_MAPINT64BOOLWRAPPERENTRY']._serialized_end=25772 + _globals['_TESTALLTYPES_MAPINT64BYTESWRAPPERENTRY']._serialized_start=25774 + _globals['_TESTALLTYPES_MAPINT64BYTESWRAPPERENTRY']._serialized_end=25862 + _globals['_TESTALLTYPES_MAPUINT32BOOLENTRY']._serialized_start=25864 + _globals['_TESTALLTYPES_MAPUINT32BOOLENTRY']._serialized_end=25916 + _globals['_TESTALLTYPES_MAPUINT32STRINGENTRY']._serialized_start=25918 + _globals['_TESTALLTYPES_MAPUINT32STRINGENTRY']._serialized_end=25972 + _globals['_TESTALLTYPES_MAPUINT32BYTESENTRY']._serialized_start=25974 + _globals['_TESTALLTYPES_MAPUINT32BYTESENTRY']._serialized_end=26027 + _globals['_TESTALLTYPES_MAPUINT32INT32ENTRY']._serialized_start=26029 + _globals['_TESTALLTYPES_MAPUINT32INT32ENTRY']._serialized_end=26082 + _globals['_TESTALLTYPES_MAPUINT32INT64ENTRY']._serialized_start=26084 + _globals['_TESTALLTYPES_MAPUINT32INT64ENTRY']._serialized_end=26137 + _globals['_TESTALLTYPES_MAPUINT32UINT32ENTRY']._serialized_start=26139 + _globals['_TESTALLTYPES_MAPUINT32UINT32ENTRY']._serialized_end=26193 + _globals['_TESTALLTYPES_MAPUINT32UINT64ENTRY']._serialized_start=26195 + _globals['_TESTALLTYPES_MAPUINT32UINT64ENTRY']._serialized_end=26249 + _globals['_TESTALLTYPES_MAPUINT32FLOATENTRY']._serialized_start=26251 + _globals['_TESTALLTYPES_MAPUINT32FLOATENTRY']._serialized_end=26304 + _globals['_TESTALLTYPES_MAPUINT32DOUBLEENTRY']._serialized_start=26306 + _globals['_TESTALLTYPES_MAPUINT32DOUBLEENTRY']._serialized_end=26360 + _globals['_TESTALLTYPES_MAPUINT32ENUMENTRY']._serialized_start=26362 + _globals['_TESTALLTYPES_MAPUINT32ENUMENTRY']._serialized_end=26468 + _globals['_TESTALLTYPES_MAPUINT32MESSAGEENTRY']._serialized_start=26470 + _globals['_TESTALLTYPES_MAPUINT32MESSAGEENTRY']._serialized_end=26582 + _globals['_TESTALLTYPES_MAPUINT32DURATIONENTRY']._serialized_start=26584 + _globals['_TESTALLTYPES_MAPUINT32DURATIONENTRY']._serialized_end=26667 + _globals['_TESTALLTYPES_MAPUINT32TIMESTAMPENTRY']._serialized_start=26669 + _globals['_TESTALLTYPES_MAPUINT32TIMESTAMPENTRY']._serialized_end=26754 + _globals['_TESTALLTYPES_MAPUINT32NULLVALUEENTRY']._serialized_start=26756 + _globals['_TESTALLTYPES_MAPUINT32NULLVALUEENTRY']._serialized_end=26841 + _globals['_TESTALLTYPES_MAPUINT32ANYENTRY']._serialized_start=26843 + _globals['_TESTALLTYPES_MAPUINT32ANYENTRY']._serialized_end=26916 + _globals['_TESTALLTYPES_MAPUINT32STRUCTENTRY']._serialized_start=26918 + _globals['_TESTALLTYPES_MAPUINT32STRUCTENTRY']._serialized_end=26997 + _globals['_TESTALLTYPES_MAPUINT32VALUEENTRY']._serialized_start=26999 + _globals['_TESTALLTYPES_MAPUINT32VALUEENTRY']._serialized_end=27076 + _globals['_TESTALLTYPES_MAPUINT32LISTVALUEENTRY']._serialized_start=27078 + _globals['_TESTALLTYPES_MAPUINT32LISTVALUEENTRY']._serialized_end=27163 + _globals['_TESTALLTYPES_MAPUINT32INT64WRAPPERENTRY']._serialized_start=27165 + _globals['_TESTALLTYPES_MAPUINT32INT64WRAPPERENTRY']._serialized_end=27254 + _globals['_TESTALLTYPES_MAPUINT32INT32WRAPPERENTRY']._serialized_start=27256 + _globals['_TESTALLTYPES_MAPUINT32INT32WRAPPERENTRY']._serialized_end=27345 + _globals['_TESTALLTYPES_MAPUINT32DOUBLEWRAPPERENTRY']._serialized_start=27347 + _globals['_TESTALLTYPES_MAPUINT32DOUBLEWRAPPERENTRY']._serialized_end=27438 + _globals['_TESTALLTYPES_MAPUINT32FLOATWRAPPERENTRY']._serialized_start=27440 + _globals['_TESTALLTYPES_MAPUINT32FLOATWRAPPERENTRY']._serialized_end=27529 + _globals['_TESTALLTYPES_MAPUINT32UINT64WRAPPERENTRY']._serialized_start=27531 + _globals['_TESTALLTYPES_MAPUINT32UINT64WRAPPERENTRY']._serialized_end=27622 + _globals['_TESTALLTYPES_MAPUINT32UINT32WRAPPERENTRY']._serialized_start=27624 + _globals['_TESTALLTYPES_MAPUINT32UINT32WRAPPERENTRY']._serialized_end=27715 + _globals['_TESTALLTYPES_MAPUINT32STRINGWRAPPERENTRY']._serialized_start=27717 + _globals['_TESTALLTYPES_MAPUINT32STRINGWRAPPERENTRY']._serialized_end=27808 + _globals['_TESTALLTYPES_MAPUINT32BOOLWRAPPERENTRY']._serialized_start=27810 + _globals['_TESTALLTYPES_MAPUINT32BOOLWRAPPERENTRY']._serialized_end=27897 + _globals['_TESTALLTYPES_MAPUINT32BYTESWRAPPERENTRY']._serialized_start=27899 + _globals['_TESTALLTYPES_MAPUINT32BYTESWRAPPERENTRY']._serialized_end=27988 + _globals['_TESTALLTYPES_MAPUINT64BOOLENTRY']._serialized_start=27990 + _globals['_TESTALLTYPES_MAPUINT64BOOLENTRY']._serialized_end=28042 + _globals['_TESTALLTYPES_MAPUINT64STRINGENTRY']._serialized_start=28044 + _globals['_TESTALLTYPES_MAPUINT64STRINGENTRY']._serialized_end=28098 + _globals['_TESTALLTYPES_MAPUINT64BYTESENTRY']._serialized_start=28100 + _globals['_TESTALLTYPES_MAPUINT64BYTESENTRY']._serialized_end=28153 + _globals['_TESTALLTYPES_MAPUINT64INT32ENTRY']._serialized_start=28155 + _globals['_TESTALLTYPES_MAPUINT64INT32ENTRY']._serialized_end=28208 + _globals['_TESTALLTYPES_MAPUINT64INT64ENTRY']._serialized_start=28210 + _globals['_TESTALLTYPES_MAPUINT64INT64ENTRY']._serialized_end=28263 + _globals['_TESTALLTYPES_MAPUINT64UINT32ENTRY']._serialized_start=28265 + _globals['_TESTALLTYPES_MAPUINT64UINT32ENTRY']._serialized_end=28319 + _globals['_TESTALLTYPES_MAPUINT64UINT64ENTRY']._serialized_start=28321 + _globals['_TESTALLTYPES_MAPUINT64UINT64ENTRY']._serialized_end=28375 + _globals['_TESTALLTYPES_MAPUINT64FLOATENTRY']._serialized_start=28377 + _globals['_TESTALLTYPES_MAPUINT64FLOATENTRY']._serialized_end=28430 + _globals['_TESTALLTYPES_MAPUINT64DOUBLEENTRY']._serialized_start=28432 + _globals['_TESTALLTYPES_MAPUINT64DOUBLEENTRY']._serialized_end=28486 + _globals['_TESTALLTYPES_MAPUINT64ENUMENTRY']._serialized_start=28488 + _globals['_TESTALLTYPES_MAPUINT64ENUMENTRY']._serialized_end=28594 + _globals['_TESTALLTYPES_MAPUINT64MESSAGEENTRY']._serialized_start=28596 + _globals['_TESTALLTYPES_MAPUINT64MESSAGEENTRY']._serialized_end=28708 + _globals['_TESTALLTYPES_MAPUINT64DURATIONENTRY']._serialized_start=28710 + _globals['_TESTALLTYPES_MAPUINT64DURATIONENTRY']._serialized_end=28793 + _globals['_TESTALLTYPES_MAPUINT64TIMESTAMPENTRY']._serialized_start=28795 + _globals['_TESTALLTYPES_MAPUINT64TIMESTAMPENTRY']._serialized_end=28880 + _globals['_TESTALLTYPES_MAPUINT64NULLVALUEENTRY']._serialized_start=28882 + _globals['_TESTALLTYPES_MAPUINT64NULLVALUEENTRY']._serialized_end=28967 + _globals['_TESTALLTYPES_MAPUINT64ANYENTRY']._serialized_start=28969 + _globals['_TESTALLTYPES_MAPUINT64ANYENTRY']._serialized_end=29042 + _globals['_TESTALLTYPES_MAPUINT64STRUCTENTRY']._serialized_start=29044 + _globals['_TESTALLTYPES_MAPUINT64STRUCTENTRY']._serialized_end=29123 + _globals['_TESTALLTYPES_MAPUINT64VALUEENTRY']._serialized_start=29125 + _globals['_TESTALLTYPES_MAPUINT64VALUEENTRY']._serialized_end=29202 + _globals['_TESTALLTYPES_MAPUINT64LISTVALUEENTRY']._serialized_start=29204 + _globals['_TESTALLTYPES_MAPUINT64LISTVALUEENTRY']._serialized_end=29289 + _globals['_TESTALLTYPES_MAPUINT64INT64WRAPPERENTRY']._serialized_start=29291 + _globals['_TESTALLTYPES_MAPUINT64INT64WRAPPERENTRY']._serialized_end=29380 + _globals['_TESTALLTYPES_MAPUINT64INT32WRAPPERENTRY']._serialized_start=29382 + _globals['_TESTALLTYPES_MAPUINT64INT32WRAPPERENTRY']._serialized_end=29471 + _globals['_TESTALLTYPES_MAPUINT64DOUBLEWRAPPERENTRY']._serialized_start=29473 + _globals['_TESTALLTYPES_MAPUINT64DOUBLEWRAPPERENTRY']._serialized_end=29564 + _globals['_TESTALLTYPES_MAPUINT64FLOATWRAPPERENTRY']._serialized_start=29566 + _globals['_TESTALLTYPES_MAPUINT64FLOATWRAPPERENTRY']._serialized_end=29655 + _globals['_TESTALLTYPES_MAPUINT64UINT64WRAPPERENTRY']._serialized_start=29657 + _globals['_TESTALLTYPES_MAPUINT64UINT64WRAPPERENTRY']._serialized_end=29748 + _globals['_TESTALLTYPES_MAPUINT64UINT32WRAPPERENTRY']._serialized_start=29750 + _globals['_TESTALLTYPES_MAPUINT64UINT32WRAPPERENTRY']._serialized_end=29841 + _globals['_TESTALLTYPES_MAPUINT64STRINGWRAPPERENTRY']._serialized_start=29843 + _globals['_TESTALLTYPES_MAPUINT64STRINGWRAPPERENTRY']._serialized_end=29934 + _globals['_TESTALLTYPES_MAPUINT64BOOLWRAPPERENTRY']._serialized_start=29936 + _globals['_TESTALLTYPES_MAPUINT64BOOLWRAPPERENTRY']._serialized_end=30023 + _globals['_TESTALLTYPES_MAPUINT64BYTESWRAPPERENTRY']._serialized_start=30025 + _globals['_TESTALLTYPES_MAPUINT64BYTESWRAPPERENTRY']._serialized_end=30114 + _globals['_TESTALLTYPES_MAPSTRINGBOOLENTRY']._serialized_start=30116 + _globals['_TESTALLTYPES_MAPSTRINGBOOLENTRY']._serialized_end=30168 + _globals['_TESTALLTYPES_MAPSTRINGSTRINGENTRY']._serialized_start=30170 + _globals['_TESTALLTYPES_MAPSTRINGSTRINGENTRY']._serialized_end=30224 + _globals['_TESTALLTYPES_MAPSTRINGBYTESENTRY']._serialized_start=30226 + _globals['_TESTALLTYPES_MAPSTRINGBYTESENTRY']._serialized_end=30279 + _globals['_TESTALLTYPES_MAPSTRINGINT32ENTRY']._serialized_start=30281 + _globals['_TESTALLTYPES_MAPSTRINGINT32ENTRY']._serialized_end=30334 + _globals['_TESTALLTYPES_MAPSTRINGINT64ENTRY']._serialized_start=30336 + _globals['_TESTALLTYPES_MAPSTRINGINT64ENTRY']._serialized_end=30389 + _globals['_TESTALLTYPES_MAPSTRINGUINT32ENTRY']._serialized_start=30391 + _globals['_TESTALLTYPES_MAPSTRINGUINT32ENTRY']._serialized_end=30445 + _globals['_TESTALLTYPES_MAPSTRINGUINT64ENTRY']._serialized_start=30447 + _globals['_TESTALLTYPES_MAPSTRINGUINT64ENTRY']._serialized_end=30501 + _globals['_TESTALLTYPES_MAPSTRINGFLOATENTRY']._serialized_start=30503 + _globals['_TESTALLTYPES_MAPSTRINGFLOATENTRY']._serialized_end=30556 + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEENTRY']._serialized_start=30558 + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEENTRY']._serialized_end=30612 + _globals['_TESTALLTYPES_MAPSTRINGENUMENTRY']._serialized_start=30614 + _globals['_TESTALLTYPES_MAPSTRINGENUMENTRY']._serialized_end=30720 + _globals['_TESTALLTYPES_MAPSTRINGMESSAGEENTRY']._serialized_start=30722 + _globals['_TESTALLTYPES_MAPSTRINGMESSAGEENTRY']._serialized_end=30834 + _globals['_TESTALLTYPES_MAPSTRINGDURATIONENTRY']._serialized_start=30836 + _globals['_TESTALLTYPES_MAPSTRINGDURATIONENTRY']._serialized_end=30919 + _globals['_TESTALLTYPES_MAPSTRINGTIMESTAMPENTRY']._serialized_start=30921 + _globals['_TESTALLTYPES_MAPSTRINGTIMESTAMPENTRY']._serialized_end=31006 + _globals['_TESTALLTYPES_MAPSTRINGNULLVALUEENTRY']._serialized_start=31008 + _globals['_TESTALLTYPES_MAPSTRINGNULLVALUEENTRY']._serialized_end=31093 + _globals['_TESTALLTYPES_MAPSTRINGANYENTRY']._serialized_start=31095 + _globals['_TESTALLTYPES_MAPSTRINGANYENTRY']._serialized_end=31168 + _globals['_TESTALLTYPES_MAPSTRINGSTRUCTENTRY']._serialized_start=31170 + _globals['_TESTALLTYPES_MAPSTRINGSTRUCTENTRY']._serialized_end=31249 + _globals['_TESTALLTYPES_MAPSTRINGVALUEENTRY']._serialized_start=31251 + _globals['_TESTALLTYPES_MAPSTRINGVALUEENTRY']._serialized_end=31328 + _globals['_TESTALLTYPES_MAPSTRINGLISTVALUEENTRY']._serialized_start=31330 + _globals['_TESTALLTYPES_MAPSTRINGLISTVALUEENTRY']._serialized_end=31415 + _globals['_TESTALLTYPES_MAPSTRINGINT64WRAPPERENTRY']._serialized_start=31417 + _globals['_TESTALLTYPES_MAPSTRINGINT64WRAPPERENTRY']._serialized_end=31506 + _globals['_TESTALLTYPES_MAPSTRINGINT32WRAPPERENTRY']._serialized_start=31508 + _globals['_TESTALLTYPES_MAPSTRINGINT32WRAPPERENTRY']._serialized_end=31597 + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEWRAPPERENTRY']._serialized_start=31599 + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEWRAPPERENTRY']._serialized_end=31690 + _globals['_TESTALLTYPES_MAPSTRINGFLOATWRAPPERENTRY']._serialized_start=31692 + _globals['_TESTALLTYPES_MAPSTRINGFLOATWRAPPERENTRY']._serialized_end=31781 + _globals['_TESTALLTYPES_MAPSTRINGUINT64WRAPPERENTRY']._serialized_start=31783 + _globals['_TESTALLTYPES_MAPSTRINGUINT64WRAPPERENTRY']._serialized_end=31874 + _globals['_TESTALLTYPES_MAPSTRINGUINT32WRAPPERENTRY']._serialized_start=31876 + _globals['_TESTALLTYPES_MAPSTRINGUINT32WRAPPERENTRY']._serialized_end=31967 + _globals['_TESTALLTYPES_MAPSTRINGSTRINGWRAPPERENTRY']._serialized_start=31969 + _globals['_TESTALLTYPES_MAPSTRINGSTRINGWRAPPERENTRY']._serialized_end=32060 + _globals['_TESTALLTYPES_MAPSTRINGBOOLWRAPPERENTRY']._serialized_start=32062 + _globals['_TESTALLTYPES_MAPSTRINGBOOLWRAPPERENTRY']._serialized_end=32149 + _globals['_TESTALLTYPES_MAPSTRINGBYTESWRAPPERENTRY']._serialized_start=32151 + _globals['_TESTALLTYPES_MAPSTRINGBYTESWRAPPERENTRY']._serialized_end=32240 + _globals['_TESTALLTYPES_NESTEDGROUP']._serialized_start=32242 + _globals['_TESTALLTYPES_NESTEDGROUP']._serialized_end=32297 + _globals['_TESTALLTYPES_NESTEDENUM']._serialized_start=32299 + _globals['_TESTALLTYPES_NESTEDENUM']._serialized_end=32338 + _globals['_NESTEDTESTALLTYPES']._serialized_start=32375 + _globals['_NESTEDTESTALLTYPES']._serialized_end=32519 + _globals['_TESTREQUIRED']._serialized_start=32521 + _globals['_TESTREQUIRED']._serialized_end=32559 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/conformance/proto3/__init__.py b/py_xds_protos/cel/expr/conformance/proto3/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/py_xds_protos/cel/expr/conformance/proto3/test_all_types_pb2.py b/py_xds_protos/cel/expr/conformance/proto3/test_all_types_pb2.py new file mode 100644 index 0000000000000..2f783b73f28d0 --- /dev/null +++ b/py_xds_protos/cel/expr/conformance/proto3/test_all_types_pb2.py @@ -0,0 +1,708 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/conformance/proto3/test_all_types.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/conformance/proto3/test_all_types.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n0cel/expr/conformance/proto3/test_all_types.proto\x12\x1b\x63\x65l.expr.conformance.proto3\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x82\xfa\x01\n\x0cTestAllTypes\x12\x14\n\x0csingle_int32\x18\x01 \x01(\x05\x12\x14\n\x0csingle_int64\x18\x02 \x01(\x03\x12\x15\n\rsingle_uint32\x18\x03 \x01(\r\x12\x15\n\rsingle_uint64\x18\x04 \x01(\x04\x12\x15\n\rsingle_sint32\x18\x05 \x01(\x11\x12\x15\n\rsingle_sint64\x18\x06 \x01(\x12\x12\x16\n\x0esingle_fixed32\x18\x07 \x01(\x07\x12\x16\n\x0esingle_fixed64\x18\x08 \x01(\x06\x12\x17\n\x0fsingle_sfixed32\x18\t \x01(\x0f\x12\x17\n\x0fsingle_sfixed64\x18\n \x01(\x10\x12\x14\n\x0csingle_float\x18\x0b \x01(\x02\x12\x15\n\rsingle_double\x18\x0c \x01(\x01\x12\x13\n\x0bsingle_bool\x18\r \x01(\x08\x12\x15\n\rsingle_string\x18\x0e \x01(\t\x12\x14\n\x0csingle_bytes\x18\x0f \x01(\x0c\x12\x1a\n\roptional_bool\x18\x10 \x01(\x08H\x02\x88\x01\x01\x12\x1c\n\x0foptional_string\x18\x11 \x01(\tH\x03\x88\x01\x01\x12\n\n\x02in\x18\x12 \x01(\x08\x12(\n\nsingle_any\x18\x64 \x01(\x0b\x32\x14.google.protobuf.Any\x12\x32\n\x0fsingle_duration\x18\x65 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x10single_timestamp\x18\x66 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\rsingle_struct\x18g \x01(\x0b\x32\x17.google.protobuf.Struct\x12,\n\x0csingle_value\x18h \x01(\x0b\x32\x16.google.protobuf.Value\x12\x39\n\x14single_int64_wrapper\x18i \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x39\n\x14single_int32_wrapper\x18j \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12;\n\x15single_double_wrapper\x18k \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x39\n\x14single_float_wrapper\x18l \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12;\n\x15single_uint64_wrapper\x18m \x01(\x0b\x32\x1c.google.protobuf.UInt64Value\x12;\n\x15single_uint32_wrapper\x18n \x01(\x0b\x32\x1c.google.protobuf.UInt32Value\x12;\n\x15single_string_wrapper\x18o \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x13single_bool_wrapper\x18p \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x14single_bytes_wrapper\x18q \x01(\x0b\x32\x1b.google.protobuf.BytesValue\x12.\n\nlist_value\x18r \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12.\n\nnull_value\x18s \x01(\x0e\x32\x1a.google.protobuf.NullValue\x12<\n\x13optional_null_value\x18t \x01(\x0e\x32\x1a.google.protobuf.NullValueH\x04\x88\x01\x01\x12.\n\nfield_mask\x18u \x01(\x0b\x32\x1a.google.protobuf.FieldMask\x12%\n\x05\x65mpty\x18v \x01(\x0b\x32\x16.google.protobuf.Empty\x12X\n\x15single_nested_message\x18\x15 \x01(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessageH\x00\x12R\n\x12single_nested_enum\x18\x16 \x01(\x0e\x32\x34.cel.expr.conformance.proto3.TestAllTypes.NestedEnumH\x00\x12S\n\x12standalone_message\x18\x17 \x01(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessage\x12M\n\x0fstandalone_enum\x18\x18 \x01(\x0e\x32\x34.cel.expr.conformance.proto3.TestAllTypes.NestedEnum\x12\x16\n\x0erepeated_int32\x18\x1f \x03(\x05\x12\x16\n\x0erepeated_int64\x18 \x03(\x03\x12\x17\n\x0frepeated_uint32\x18! \x03(\r\x12\x17\n\x0frepeated_uint64\x18\" \x03(\x04\x12\x17\n\x0frepeated_sint32\x18# \x03(\x11\x12\x17\n\x0frepeated_sint64\x18$ \x03(\x12\x12\x18\n\x10repeated_fixed32\x18% \x03(\x07\x12\x18\n\x10repeated_fixed64\x18& \x03(\x06\x12\x19\n\x11repeated_sfixed32\x18\' \x03(\x0f\x12\x19\n\x11repeated_sfixed64\x18( \x03(\x10\x12\x16\n\x0erepeated_float\x18) \x03(\x02\x12\x17\n\x0frepeated_double\x18* \x03(\x01\x12\x15\n\rrepeated_bool\x18+ \x03(\x08\x12\x17\n\x0frepeated_string\x18, \x03(\t\x12\x16\n\x0erepeated_bytes\x18- \x03(\x0c\x12X\n\x17repeated_nested_message\x18\x33 \x03(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessage\x12R\n\x14repeated_nested_enum\x18\x34 \x03(\x0e\x32\x34.cel.expr.conformance.proto3.TestAllTypes.NestedEnum\x12!\n\x15repeated_string_piece\x18\x35 \x03(\tB\x02\x08\x02\x12\x19\n\rrepeated_cord\x18\x36 \x03(\tB\x02\x08\x01\x12V\n\x15repeated_lazy_message\x18\x37 \x03(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessage\x12*\n\x0crepeated_any\x18x \x03(\x0b\x32\x14.google.protobuf.Any\x12\x34\n\x11repeated_duration\x18y \x03(\x0b\x32\x19.google.protobuf.Duration\x12\x36\n\x12repeated_timestamp\x18z \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0frepeated_struct\x18{ \x03(\x0b\x32\x17.google.protobuf.Struct\x12.\n\x0erepeated_value\x18| \x03(\x0b\x32\x16.google.protobuf.Value\x12;\n\x16repeated_int64_wrapper\x18} \x03(\x0b\x32\x1b.google.protobuf.Int64Value\x12;\n\x16repeated_int32_wrapper\x18~ \x03(\x0b\x32\x1b.google.protobuf.Int32Value\x12=\n\x17repeated_double_wrapper\x18\x7f \x03(\x0b\x32\x1c.google.protobuf.DoubleValue\x12<\n\x16repeated_float_wrapper\x18\x80\x01 \x03(\x0b\x32\x1b.google.protobuf.FloatValue\x12>\n\x17repeated_uint64_wrapper\x18\x81\x01 \x03(\x0b\x32\x1c.google.protobuf.UInt64Value\x12>\n\x17repeated_uint32_wrapper\x18\x82\x01 \x03(\x0b\x32\x1c.google.protobuf.UInt32Value\x12>\n\x17repeated_string_wrapper\x18\x83\x01 \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x15repeated_bool_wrapper\x18\x84\x01 \x03(\x0b\x32\x1a.google.protobuf.BoolValue\x12<\n\x16repeated_bytes_wrapper\x18\x85\x01 \x03(\x0b\x32\x1b.google.protobuf.BytesValue\x12\x38\n\x13repeated_list_value\x18\x86\x01 \x03(\x0b\x32\x1a.google.protobuf.ListValue\x12\x38\n\x13repeated_null_value\x18\x87\x01 \x03(\x0e\x32\x1a.google.protobuf.NullValue\x12`\n\x15map_int64_nested_type\x18> \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapInt64NestedTypeEntry\x12Q\n\rmap_bool_bool\x18? \x03(\x0b\x32:.cel.expr.conformance.proto3.TestAllTypes.MapBoolBoolEntry\x12U\n\x0fmap_bool_string\x18@ \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapBoolStringEntry\x12S\n\x0emap_bool_bytes\x18\x41 \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapBoolBytesEntry\x12S\n\x0emap_bool_int32\x18\x42 \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapBoolInt32Entry\x12S\n\x0emap_bool_int64\x18\x43 \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapBoolInt64Entry\x12U\n\x0fmap_bool_uint32\x18\x44 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapBoolUint32Entry\x12U\n\x0fmap_bool_uint64\x18\x45 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapBoolUint64Entry\x12S\n\x0emap_bool_float\x18\x46 \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapBoolFloatEntry\x12U\n\x0fmap_bool_double\x18G \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapBoolDoubleEntry\x12Q\n\rmap_bool_enum\x18H \x03(\x0b\x32:.cel.expr.conformance.proto3.TestAllTypes.MapBoolEnumEntry\x12W\n\x10map_bool_message\x18I \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapBoolMessageEntry\x12Z\n\x11map_bool_duration\x18\xe4\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapBoolDurationEntry\x12\\\n\x12map_bool_timestamp\x18\xe5\x01 \x03(\x0b\x32?.cel.expr.conformance.proto3.TestAllTypes.MapBoolTimestampEntry\x12]\n\x13map_bool_null_value\x18\xe6\x01 \x03(\x0b\x32?.cel.expr.conformance.proto3.TestAllTypes.MapBoolNullValueEntry\x12P\n\x0cmap_bool_any\x18\xf6\x01 \x03(\x0b\x32\x39.cel.expr.conformance.proto3.TestAllTypes.MapBoolAnyEntry\x12V\n\x0fmap_bool_struct\x18\xf7\x01 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapBoolStructEntry\x12T\n\x0emap_bool_value\x18\xf8\x01 \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapBoolValueEntry\x12]\n\x13map_bool_list_value\x18\xf9\x01 \x03(\x0b\x32?.cel.expr.conformance.proto3.TestAllTypes.MapBoolListValueEntry\x12\x63\n\x16map_bool_int64_wrapper\x18\xfa\x01 \x03(\x0b\x32\x42.cel.expr.conformance.proto3.TestAllTypes.MapBoolInt64WrapperEntry\x12\x63\n\x16map_bool_int32_wrapper\x18\xfb\x01 \x03(\x0b\x32\x42.cel.expr.conformance.proto3.TestAllTypes.MapBoolInt32WrapperEntry\x12\x65\n\x17map_bool_double_wrapper\x18\xfc\x01 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapBoolDoubleWrapperEntry\x12\x63\n\x16map_bool_float_wrapper\x18\xfd\x01 \x03(\x0b\x32\x42.cel.expr.conformance.proto3.TestAllTypes.MapBoolFloatWrapperEntry\x12\x65\n\x17map_bool_uint64_wrapper\x18\xfe\x01 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapBoolUint64WrapperEntry\x12\x65\n\x17map_bool_uint32_wrapper\x18\xff\x01 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapBoolUint32WrapperEntry\x12\x65\n\x17map_bool_string_wrapper\x18\x80\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapBoolStringWrapperEntry\x12\x61\n\x15map_bool_bool_wrapper\x18\x81\x02 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapBoolBoolWrapperEntry\x12\x63\n\x16map_bool_bytes_wrapper\x18\x82\x02 \x03(\x0b\x32\x42.cel.expr.conformance.proto3.TestAllTypes.MapBoolBytesWrapperEntry\x12S\n\x0emap_int32_bool\x18J \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapInt32BoolEntry\x12W\n\x10map_int32_string\x18K \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt32StringEntry\x12U\n\x0fmap_int32_bytes\x18L \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt32BytesEntry\x12U\n\x0fmap_int32_int32\x18M \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt32Int32Entry\x12U\n\x0fmap_int32_int64\x18N \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt32Int64Entry\x12W\n\x10map_int32_uint32\x18O \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint32Entry\x12W\n\x10map_int32_uint64\x18P \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint64Entry\x12U\n\x0fmap_int32_float\x18Q \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt32FloatEntry\x12W\n\x10map_int32_double\x18R \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt32DoubleEntry\x12S\n\x0emap_int32_enum\x18S \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapInt32EnumEntry\x12Y\n\x11map_int32_message\x18T \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapInt32MessageEntry\x12\\\n\x12map_int32_duration\x18\xe7\x01 \x03(\x0b\x32?.cel.expr.conformance.proto3.TestAllTypes.MapInt32DurationEntry\x12^\n\x13map_int32_timestamp\x18\xe8\x01 \x03(\x0b\x32@.cel.expr.conformance.proto3.TestAllTypes.MapInt32TimestampEntry\x12_\n\x14map_int32_null_value\x18\xe9\x01 \x03(\x0b\x32@.cel.expr.conformance.proto3.TestAllTypes.MapInt32NullValueEntry\x12R\n\rmap_int32_any\x18\x83\x02 \x03(\x0b\x32:.cel.expr.conformance.proto3.TestAllTypes.MapInt32AnyEntry\x12X\n\x10map_int32_struct\x18\x84\x02 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt32StructEntry\x12V\n\x0fmap_int32_value\x18\x85\x02 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt32ValueEntry\x12_\n\x14map_int32_list_value\x18\x86\x02 \x03(\x0b\x32@.cel.expr.conformance.proto3.TestAllTypes.MapInt32ListValueEntry\x12\x65\n\x17map_int32_int64_wrapper\x18\x87\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapInt32Int64WrapperEntry\x12\x65\n\x17map_int32_int32_wrapper\x18\x88\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapInt32Int32WrapperEntry\x12g\n\x18map_int32_double_wrapper\x18\x89\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapInt32DoubleWrapperEntry\x12\x65\n\x17map_int32_float_wrapper\x18\x8a\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapInt32FloatWrapperEntry\x12g\n\x18map_int32_uint64_wrapper\x18\x8b\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint64WrapperEntry\x12g\n\x18map_int32_uint32_wrapper\x18\x8c\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint32WrapperEntry\x12g\n\x18map_int32_string_wrapper\x18\x8d\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapInt32StringWrapperEntry\x12\x63\n\x16map_int32_bool_wrapper\x18\x8e\x02 \x03(\x0b\x32\x42.cel.expr.conformance.proto3.TestAllTypes.MapInt32BoolWrapperEntry\x12\x65\n\x17map_int32_bytes_wrapper\x18\x8f\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapInt32BytesWrapperEntry\x12S\n\x0emap_int64_bool\x18U \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapInt64BoolEntry\x12W\n\x10map_int64_string\x18V \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt64StringEntry\x12U\n\x0fmap_int64_bytes\x18W \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt64BytesEntry\x12U\n\x0fmap_int64_int32\x18X \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt64Int32Entry\x12U\n\x0fmap_int64_int64\x18Y \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt64Int64Entry\x12W\n\x10map_int64_uint32\x18Z \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint32Entry\x12W\n\x10map_int64_uint64\x18[ \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint64Entry\x12U\n\x0fmap_int64_float\x18\\ \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt64FloatEntry\x12W\n\x10map_int64_double\x18] \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt64DoubleEntry\x12S\n\x0emap_int64_enum\x18^ \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapInt64EnumEntry\x12Y\n\x11map_int64_message\x18_ \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapInt64MessageEntry\x12\\\n\x12map_int64_duration\x18\xea\x01 \x03(\x0b\x32?.cel.expr.conformance.proto3.TestAllTypes.MapInt64DurationEntry\x12^\n\x13map_int64_timestamp\x18\xeb\x01 \x03(\x0b\x32@.cel.expr.conformance.proto3.TestAllTypes.MapInt64TimestampEntry\x12_\n\x14map_int64_null_value\x18\xec\x01 \x03(\x0b\x32@.cel.expr.conformance.proto3.TestAllTypes.MapInt64NullValueEntry\x12R\n\rmap_int64_any\x18\x90\x02 \x03(\x0b\x32:.cel.expr.conformance.proto3.TestAllTypes.MapInt64AnyEntry\x12X\n\x10map_int64_struct\x18\x91\x02 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapInt64StructEntry\x12V\n\x0fmap_int64_value\x18\x92\x02 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapInt64ValueEntry\x12_\n\x14map_int64_list_value\x18\x93\x02 \x03(\x0b\x32@.cel.expr.conformance.proto3.TestAllTypes.MapInt64ListValueEntry\x12\x65\n\x17map_int64_int64_wrapper\x18\x94\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapInt64Int64WrapperEntry\x12\x65\n\x17map_int64_int32_wrapper\x18\x95\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapInt64Int32WrapperEntry\x12g\n\x18map_int64_double_wrapper\x18\x96\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapInt64DoubleWrapperEntry\x12\x65\n\x17map_int64_float_wrapper\x18\x97\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapInt64FloatWrapperEntry\x12g\n\x18map_int64_uint64_wrapper\x18\x98\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint64WrapperEntry\x12g\n\x18map_int64_uint32_wrapper\x18\x99\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint32WrapperEntry\x12g\n\x18map_int64_string_wrapper\x18\x9a\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapInt64StringWrapperEntry\x12\x63\n\x16map_int64_bool_wrapper\x18\x9b\x02 \x03(\x0b\x32\x42.cel.expr.conformance.proto3.TestAllTypes.MapInt64BoolWrapperEntry\x12\x65\n\x17map_int64_bytes_wrapper\x18\x9c\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapInt64BytesWrapperEntry\x12U\n\x0fmap_uint32_bool\x18` \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapUint32BoolEntry\x12Y\n\x11map_uint32_string\x18\x61 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint32StringEntry\x12W\n\x10map_uint32_bytes\x18\x62 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint32BytesEntry\x12W\n\x10map_uint32_int32\x18\x63 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint32Int32Entry\x12X\n\x10map_uint32_int64\x18\xc8\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint32Int64Entry\x12Z\n\x11map_uint32_uint32\x18\xc9\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint32Entry\x12Z\n\x11map_uint32_uint64\x18\xca\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint64Entry\x12X\n\x10map_uint32_float\x18\xcb\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint32FloatEntry\x12Z\n\x11map_uint32_double\x18\xcc\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint32DoubleEntry\x12V\n\x0fmap_uint32_enum\x18\xcd\x01 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapUint32EnumEntry\x12\\\n\x12map_uint32_message\x18\xce\x01 \x03(\x0b\x32?.cel.expr.conformance.proto3.TestAllTypes.MapUint32MessageEntry\x12^\n\x13map_uint32_duration\x18\xed\x01 \x03(\x0b\x32@.cel.expr.conformance.proto3.TestAllTypes.MapUint32DurationEntry\x12`\n\x14map_uint32_timestamp\x18\xee\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapUint32TimestampEntry\x12\x61\n\x15map_uint32_null_value\x18\xef\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapUint32NullValueEntry\x12T\n\x0emap_uint32_any\x18\x9d\x02 \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapUint32AnyEntry\x12Z\n\x11map_uint32_struct\x18\x9e\x02 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint32StructEntry\x12X\n\x10map_uint32_value\x18\x9f\x02 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint32ValueEntry\x12\x61\n\x15map_uint32_list_value\x18\xa0\x02 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapUint32ListValueEntry\x12g\n\x18map_uint32_int64_wrapper\x18\xa1\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapUint32Int64WrapperEntry\x12g\n\x18map_uint32_int32_wrapper\x18\xa2\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapUint32Int32WrapperEntry\x12i\n\x19map_uint32_double_wrapper\x18\xa3\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapUint32DoubleWrapperEntry\x12g\n\x18map_uint32_float_wrapper\x18\xa4\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapUint32FloatWrapperEntry\x12i\n\x19map_uint32_uint64_wrapper\x18\xa5\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint64WrapperEntry\x12i\n\x19map_uint32_uint32_wrapper\x18\xa6\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint32WrapperEntry\x12i\n\x19map_uint32_string_wrapper\x18\xa7\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapUint32StringWrapperEntry\x12\x65\n\x17map_uint32_bool_wrapper\x18\xa8\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapUint32BoolWrapperEntry\x12g\n\x18map_uint32_bytes_wrapper\x18\xa9\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapUint32BytesWrapperEntry\x12V\n\x0fmap_uint64_bool\x18\xcf\x01 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapUint64BoolEntry\x12Z\n\x11map_uint64_string\x18\xd0\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint64StringEntry\x12X\n\x10map_uint64_bytes\x18\xd1\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint64BytesEntry\x12X\n\x10map_uint64_int32\x18\xd2\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint64Int32Entry\x12X\n\x10map_uint64_int64\x18\xd3\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint64Int64Entry\x12Z\n\x11map_uint64_uint32\x18\xd4\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint32Entry\x12Z\n\x11map_uint64_uint64\x18\xd5\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint64Entry\x12X\n\x10map_uint64_float\x18\xd6\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint64FloatEntry\x12Z\n\x11map_uint64_double\x18\xd7\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint64DoubleEntry\x12V\n\x0fmap_uint64_enum\x18\xd8\x01 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapUint64EnumEntry\x12\\\n\x12map_uint64_message\x18\xd9\x01 \x03(\x0b\x32?.cel.expr.conformance.proto3.TestAllTypes.MapUint64MessageEntry\x12^\n\x13map_uint64_duration\x18\xf0\x01 \x03(\x0b\x32@.cel.expr.conformance.proto3.TestAllTypes.MapUint64DurationEntry\x12`\n\x14map_uint64_timestamp\x18\xf1\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapUint64TimestampEntry\x12\x61\n\x15map_uint64_null_value\x18\xf2\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapUint64NullValueEntry\x12T\n\x0emap_uint64_any\x18\xaa\x02 \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapUint64AnyEntry\x12Z\n\x11map_uint64_struct\x18\xab\x02 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapUint64StructEntry\x12X\n\x10map_uint64_value\x18\xac\x02 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapUint64ValueEntry\x12\x61\n\x15map_uint64_list_value\x18\xad\x02 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapUint64ListValueEntry\x12g\n\x18map_uint64_int64_wrapper\x18\xae\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapUint64Int64WrapperEntry\x12g\n\x18map_uint64_int32_wrapper\x18\xaf\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapUint64Int32WrapperEntry\x12i\n\x19map_uint64_double_wrapper\x18\xb0\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapUint64DoubleWrapperEntry\x12g\n\x18map_uint64_float_wrapper\x18\xb1\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapUint64FloatWrapperEntry\x12i\n\x19map_uint64_uint64_wrapper\x18\xb2\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint64WrapperEntry\x12i\n\x19map_uint64_uint32_wrapper\x18\xb3\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint32WrapperEntry\x12i\n\x19map_uint64_string_wrapper\x18\xb4\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapUint64StringWrapperEntry\x12\x65\n\x17map_uint64_bool_wrapper\x18\xb5\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapUint64BoolWrapperEntry\x12g\n\x18map_uint64_bytes_wrapper\x18\xb6\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapUint64BytesWrapperEntry\x12V\n\x0fmap_string_bool\x18\xda\x01 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapStringBoolEntry\x12Y\n\x11map_string_string\x18= \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapStringStringEntry\x12X\n\x10map_string_bytes\x18\xdb\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapStringBytesEntry\x12X\n\x10map_string_int32\x18\xdc\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapStringInt32Entry\x12X\n\x10map_string_int64\x18\xdd\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapStringInt64Entry\x12Z\n\x11map_string_uint32\x18\xde\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapStringUint32Entry\x12Z\n\x11map_string_uint64\x18\xdf\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapStringUint64Entry\x12X\n\x10map_string_float\x18\xe0\x01 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapStringFloatEntry\x12Z\n\x11map_string_double\x18\xe1\x01 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapStringDoubleEntry\x12V\n\x0fmap_string_enum\x18\xe2\x01 \x03(\x0b\x32<.cel.expr.conformance.proto3.TestAllTypes.MapStringEnumEntry\x12\\\n\x12map_string_message\x18\xe3\x01 \x03(\x0b\x32?.cel.expr.conformance.proto3.TestAllTypes.MapStringMessageEntry\x12^\n\x13map_string_duration\x18\xf3\x01 \x03(\x0b\x32@.cel.expr.conformance.proto3.TestAllTypes.MapStringDurationEntry\x12`\n\x14map_string_timestamp\x18\xf4\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapStringTimestampEntry\x12\x61\n\x15map_string_null_value\x18\xf5\x01 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapStringNullValueEntry\x12T\n\x0emap_string_any\x18\xb7\x02 \x03(\x0b\x32;.cel.expr.conformance.proto3.TestAllTypes.MapStringAnyEntry\x12Z\n\x11map_string_struct\x18\xb8\x02 \x03(\x0b\x32>.cel.expr.conformance.proto3.TestAllTypes.MapStringStructEntry\x12X\n\x10map_string_value\x18\xb9\x02 \x03(\x0b\x32=.cel.expr.conformance.proto3.TestAllTypes.MapStringValueEntry\x12\x61\n\x15map_string_list_value\x18\xba\x02 \x03(\x0b\x32\x41.cel.expr.conformance.proto3.TestAllTypes.MapStringListValueEntry\x12g\n\x18map_string_int64_wrapper\x18\xbb\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapStringInt64WrapperEntry\x12g\n\x18map_string_int32_wrapper\x18\xbc\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapStringInt32WrapperEntry\x12i\n\x19map_string_double_wrapper\x18\xbd\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapStringDoubleWrapperEntry\x12g\n\x18map_string_float_wrapper\x18\xbe\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapStringFloatWrapperEntry\x12i\n\x19map_string_uint64_wrapper\x18\xbf\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapStringUint64WrapperEntry\x12i\n\x19map_string_uint32_wrapper\x18\xc0\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapStringUint32WrapperEntry\x12i\n\x19map_string_string_wrapper\x18\xc1\x02 \x03(\x0b\x32\x45.cel.expr.conformance.proto3.TestAllTypes.MapStringStringWrapperEntry\x12\x65\n\x17map_string_bool_wrapper\x18\xc2\x02 \x03(\x0b\x32\x43.cel.expr.conformance.proto3.TestAllTypes.MapStringBoolWrapperEntry\x12g\n\x18map_string_bytes_wrapper\x18\xc3\x02 \x03(\x0b\x32\x44.cel.expr.conformance.proto3.TestAllTypes.MapStringBytesWrapperEntry\x12\x46\n\noneof_type\x18\x90\x03 \x01(\x0b\x32/.cel.expr.conformance.proto3.NestedTestAllTypesH\x01\x12M\n\toneof_msg\x18\x91\x03 \x01(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessageH\x01\x12\x15\n\noneof_bool\x18\x92\x03 \x01(\x08H\x01\x1a\x1b\n\rNestedMessage\x12\n\n\x02\x62\x62\x18\x01 \x01(\x05\x1aj\n\x17MapInt64NestedTypeEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12>\n\x05value\x18\x02 \x01(\x0b\x32/.cel.expr.conformance.proto3.NestedTestAllTypes:\x02\x38\x01\x1a\x32\n\x10MapBoolBoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x34\n\x12MapBoolStringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x33\n\x11MapBoolBytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x33\n\x11MapBoolInt32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x33\n\x11MapBoolInt64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x34\n\x12MapBoolUint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x34\n\x12MapBoolUint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x33\n\x11MapBoolFloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x34\n\x12MapBoolDoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1ah\n\x10MapBoolEnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto3.TestAllTypes.NestedEnum:\x02\x38\x01\x1an\n\x13MapBoolMessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessage:\x02\x38\x01\x1aQ\n\x14MapBoolDurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aS\n\x15MapBoolTimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aS\n\x15MapBoolNullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aG\n\x0fMapBoolAnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aM\n\x12MapBoolStructEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aK\n\x11MapBoolValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aS\n\x15MapBoolListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aW\n\x18MapBoolInt64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aW\n\x18MapBoolInt32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1aY\n\x19MapBoolDoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aW\n\x18MapBoolFloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1aY\n\x19MapBoolUint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1aY\n\x19MapBoolUint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1aY\n\x19MapBoolStringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aU\n\x17MapBoolBoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aW\n\x18MapBoolBytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x08\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x33\n\x11MapInt32BoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x35\n\x13MapInt32StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x34\n\x12MapInt32BytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x34\n\x12MapInt32Int32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x34\n\x12MapInt32Int64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x35\n\x13MapInt32Uint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x35\n\x13MapInt32Uint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x34\n\x12MapInt32FloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x35\n\x13MapInt32DoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1ai\n\x11MapInt32EnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto3.TestAllTypes.NestedEnum:\x02\x38\x01\x1ao\n\x14MapInt32MessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessage:\x02\x38\x01\x1aR\n\x15MapInt32DurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aT\n\x16MapInt32TimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aT\n\x16MapInt32NullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aH\n\x10MapInt32AnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aN\n\x13MapInt32StructEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aL\n\x12MapInt32ValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aT\n\x16MapInt32ListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aX\n\x19MapInt32Int64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aX\n\x19MapInt32Int32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1aZ\n\x1aMapInt32DoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aX\n\x19MapInt32FloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1aZ\n\x1aMapInt32Uint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1aZ\n\x1aMapInt32Uint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1aZ\n\x1aMapInt32StringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aV\n\x18MapInt32BoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aX\n\x19MapInt32BytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x33\n\x11MapInt64BoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x35\n\x13MapInt64StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x34\n\x12MapInt64BytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x34\n\x12MapInt64Int32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x34\n\x12MapInt64Int64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x35\n\x13MapInt64Uint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x35\n\x13MapInt64Uint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x34\n\x12MapInt64FloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x35\n\x13MapInt64DoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1ai\n\x11MapInt64EnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto3.TestAllTypes.NestedEnum:\x02\x38\x01\x1ao\n\x14MapInt64MessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessage:\x02\x38\x01\x1aR\n\x15MapInt64DurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aT\n\x16MapInt64TimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aT\n\x16MapInt64NullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aH\n\x10MapInt64AnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aN\n\x13MapInt64StructEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aL\n\x12MapInt64ValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aT\n\x16MapInt64ListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aX\n\x19MapInt64Int64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aX\n\x19MapInt64Int32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1aZ\n\x1aMapInt64DoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aX\n\x19MapInt64FloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1aZ\n\x1aMapInt64Uint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1aZ\n\x1aMapInt64Uint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1aZ\n\x1aMapInt64StringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aV\n\x18MapInt64BoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aX\n\x19MapInt64BytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x34\n\x12MapUint32BoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x36\n\x14MapUint32StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x35\n\x13MapUint32BytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x35\n\x13MapUint32Int32Entry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x35\n\x13MapUint32Int64Entry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x36\n\x14MapUint32Uint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x36\n\x14MapUint32Uint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x35\n\x13MapUint32FloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x36\n\x14MapUint32DoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1aj\n\x12MapUint32EnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto3.TestAllTypes.NestedEnum:\x02\x38\x01\x1ap\n\x15MapUint32MessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessage:\x02\x38\x01\x1aS\n\x16MapUint32DurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aU\n\x17MapUint32TimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aU\n\x17MapUint32NullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aI\n\x11MapUint32AnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aO\n\x14MapUint32StructEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aM\n\x13MapUint32ValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aU\n\x17MapUint32ListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aY\n\x1aMapUint32Int64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aY\n\x1aMapUint32Int32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1a[\n\x1bMapUint32DoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aY\n\x1aMapUint32FloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1a[\n\x1bMapUint32Uint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1a[\n\x1bMapUint32Uint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1a[\n\x1bMapUint32StringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aW\n\x19MapUint32BoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aY\n\x1aMapUint32BytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x34\n\x12MapUint64BoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x36\n\x14MapUint64StringEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x35\n\x13MapUint64BytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x35\n\x13MapUint64Int32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x35\n\x13MapUint64Int64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x36\n\x14MapUint64Uint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x36\n\x14MapUint64Uint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x35\n\x13MapUint64FloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x36\n\x14MapUint64DoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1aj\n\x12MapUint64EnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto3.TestAllTypes.NestedEnum:\x02\x38\x01\x1ap\n\x15MapUint64MessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessage:\x02\x38\x01\x1aS\n\x16MapUint64DurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aU\n\x17MapUint64TimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aU\n\x17MapUint64NullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aI\n\x11MapUint64AnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aO\n\x14MapUint64StructEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aM\n\x13MapUint64ValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aU\n\x17MapUint64ListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aY\n\x1aMapUint64Int64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aY\n\x1aMapUint64Int32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1a[\n\x1bMapUint64DoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aY\n\x1aMapUint64FloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1a[\n\x1bMapUint64Uint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1a[\n\x1bMapUint64Uint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1a[\n\x1bMapUint64StringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aW\n\x19MapUint64BoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aY\n\x1aMapUint64BytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\x1a\x34\n\x12MapStringBoolEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\x1a\x36\n\x14MapStringStringEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x35\n\x13MapStringBytesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\x1a\x35\n\x13MapStringInt32Entry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x35\n\x13MapStringInt64Entry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x36\n\x14MapStringUint32Entry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x36\n\x14MapStringUint64Entry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x35\n\x13MapStringFloatEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\x1a\x36\n\x14MapStringDoubleEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01:\x02\x38\x01\x1aj\n\x12MapStringEnumEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x43\n\x05value\x18\x02 \x01(\x0e\x32\x34.cel.expr.conformance.proto3.TestAllTypes.NestedEnum:\x02\x38\x01\x1ap\n\x15MapStringMessageEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.cel.expr.conformance.proto3.TestAllTypes.NestedMessage:\x02\x38\x01\x1aS\n\x16MapStringDurationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration:\x02\x38\x01\x1aU\n\x17MapStringTimestampEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp:\x02\x38\x01\x1aU\n\x17MapStringNullValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0e\x32\x1a.google.protobuf.NullValue:\x02\x38\x01\x1aI\n\x11MapStringAnyEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1aO\n\x14MapStringStructEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct:\x02\x38\x01\x1aM\n\x13MapStringValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\x1aU\n\x17MapStringListValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.ListValue:\x02\x38\x01\x1aY\n\x1aMapStringInt64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value:\x02\x38\x01\x1aY\n\x1aMapStringInt32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32Value:\x02\x38\x01\x1a[\n\x1bMapStringDoubleWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue:\x02\x38\x01\x1aY\n\x1aMapStringFloatWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.FloatValue:\x02\x38\x01\x1a[\n\x1bMapStringUint64WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt64Value:\x02\x38\x01\x1a[\n\x1bMapStringUint32WrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32Value:\x02\x38\x01\x1a[\n\x1bMapStringStringWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue:\x02\x38\x01\x1aW\n\x19MapStringBoolWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue:\x02\x38\x01\x1aY\n\x1aMapStringBytesWrapperEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.BytesValue:\x02\x38\x01\"\'\n\nNestedEnum\x12\x07\n\x03\x46OO\x10\x00\x12\x07\n\x03\x42\x41R\x10\x01\x12\x07\n\x03\x42\x41Z\x10\x02\x42\r\n\x0bnested_typeB\x06\n\x04kindB\x10\n\x0e_optional_boolB\x12\n\x10_optional_stringB\x16\n\x14_optional_null_value\"\x90\x01\n\x12NestedTestAllTypes\x12>\n\x05\x63hild\x18\x01 \x01(\x0b\x32/.cel.expr.conformance.proto3.NestedTestAllTypes\x12:\n\x07payload\x18\x02 \x01(\x0b\x32).cel.expr.conformance.proto3.TestAllTypes*\'\n\nGlobalEnum\x12\x07\n\x03GOO\x10\x00\x12\x07\n\x03GAR\x10\x01\x12\x07\n\x03GAZ\x10\x02\x42Z\n\x1f\x64\x65v.cel.expr.conformance.proto3B\x11TestAllTypesProtoP\x01Z\x1f\x63\x65l.dev/expr/conformance/proto3\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.conformance.proto3.test_all_types_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\037dev.cel.expr.conformance.proto3B\021TestAllTypesProtoP\001Z\037cel.dev/expr/conformance/proto3\370\001\001' + _globals['_TESTALLTYPES_MAPINT64NESTEDTYPEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64NESTEDTYPEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLBOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLBOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLSTRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLSTRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLBYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLBYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLUINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLUINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLUINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLUINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLFLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLFLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLDOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLDOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLMESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLMESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLDURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLDURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLTIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLTIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLNULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLNULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLSTRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLSTRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLLISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLLISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLDOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLDOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLFLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLFLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLUINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLUINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLUINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLUINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLSTRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLSTRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLBOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLBOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPBOOLBYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPBOOLBYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32BOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32BOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32STRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32STRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32BYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32BYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32INT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32INT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32INT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32INT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32UINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32UINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32UINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32UINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32FLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32FLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32DOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32DOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32ENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32ENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32MESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32MESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32DURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32DURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32TIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32TIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32NULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32NULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32ANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32ANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32STRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32STRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32VALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32VALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32LISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32LISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32INT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32INT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32INT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32INT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32DOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32DOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32FLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32FLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32UINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32UINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32UINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32UINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32STRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32STRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32BOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32BOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT32BYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT32BYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64BOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64BOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64STRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64STRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64BYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64BYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64INT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64INT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64INT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64INT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64UINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64UINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64UINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64UINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64FLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64FLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64DOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64DOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64ENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64ENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64MESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64MESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64DURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64DURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64TIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64TIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64NULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64NULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64ANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64ANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64STRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64STRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64VALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64VALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64LISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64LISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64INT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64INT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64INT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64INT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64DOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64DOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64FLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64FLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64UINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64UINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64UINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64UINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64STRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64STRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64BOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64BOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPINT64BYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPINT64BYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32BOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32BOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32STRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32STRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32BYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32BYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32INT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32INT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32INT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32INT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32UINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32UINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32UINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32UINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32FLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32FLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32DOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32DOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32ENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32ENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32MESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32MESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32DURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32DURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32TIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32TIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32NULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32NULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32ANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32ANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32STRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32STRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32VALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32VALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32LISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32LISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32INT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32INT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32INT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32INT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32DOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32DOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32FLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32FLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32UINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32UINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32UINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32UINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32STRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32STRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32BOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32BOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT32BYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT32BYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64BOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64BOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64STRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64STRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64BYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64BYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64INT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64INT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64INT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64INT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64UINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64UINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64UINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64UINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64FLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64FLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64DOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64DOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64ENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64ENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64MESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64MESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64DURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64DURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64TIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64TIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64NULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64NULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64ANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64ANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64STRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64STRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64VALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64VALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64LISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64LISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64INT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64INT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64INT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64INT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64DOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64DOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64FLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64FLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64UINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64UINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64UINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64UINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64STRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64STRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64BOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64BOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPUINT64BYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPUINT64BYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGBOOLENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGBOOLENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGSTRINGENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGSTRINGENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGBYTESENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGBYTESENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGUINT32ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGUINT32ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGUINT64ENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGUINT64ENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGFLOATENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGFLOATENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGENUMENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGENUMENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGMESSAGEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGMESSAGEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGDURATIONENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGDURATIONENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGTIMESTAMPENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGTIMESTAMPENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGNULLVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGNULLVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGANYENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGANYENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGSTRUCTENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGSTRUCTENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGLISTVALUEENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGLISTVALUEENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGFLOATWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGFLOATWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGUINT64WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGUINT64WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGUINT32WRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGUINT32WRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGSTRINGWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGSTRINGWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGBOOLWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGBOOLWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES_MAPSTRINGBYTESWRAPPERENTRY']._loaded_options = None + _globals['_TESTALLTYPES_MAPSTRINGBYTESWRAPPERENTRY']._serialized_options = b'8\001' + _globals['_TESTALLTYPES'].fields_by_name['repeated_string_piece']._loaded_options = None + _globals['_TESTALLTYPES'].fields_by_name['repeated_string_piece']._serialized_options = b'\010\002' + _globals['_TESTALLTYPES'].fields_by_name['repeated_cord']._loaded_options = None + _globals['_TESTALLTYPES'].fields_by_name['repeated_cord']._serialized_options = b'\010\001' + _globals['_GLOBALENUM']._serialized_start=32451 + _globals['_GLOBALENUM']._serialized_end=32490 + _globals['_TESTALLTYPES']._serialized_start=300 + _globals['_TESTALLTYPES']._serialized_end=32302 + _globals['_TESTALLTYPES_NESTEDMESSAGE']._serialized_start=19393 + _globals['_TESTALLTYPES_NESTEDMESSAGE']._serialized_end=19420 + _globals['_TESTALLTYPES_MAPINT64NESTEDTYPEENTRY']._serialized_start=19422 + _globals['_TESTALLTYPES_MAPINT64NESTEDTYPEENTRY']._serialized_end=19528 + _globals['_TESTALLTYPES_MAPBOOLBOOLENTRY']._serialized_start=19530 + _globals['_TESTALLTYPES_MAPBOOLBOOLENTRY']._serialized_end=19580 + _globals['_TESTALLTYPES_MAPBOOLSTRINGENTRY']._serialized_start=19582 + _globals['_TESTALLTYPES_MAPBOOLSTRINGENTRY']._serialized_end=19634 + _globals['_TESTALLTYPES_MAPBOOLBYTESENTRY']._serialized_start=19636 + _globals['_TESTALLTYPES_MAPBOOLBYTESENTRY']._serialized_end=19687 + _globals['_TESTALLTYPES_MAPBOOLINT32ENTRY']._serialized_start=19689 + _globals['_TESTALLTYPES_MAPBOOLINT32ENTRY']._serialized_end=19740 + _globals['_TESTALLTYPES_MAPBOOLINT64ENTRY']._serialized_start=19742 + _globals['_TESTALLTYPES_MAPBOOLINT64ENTRY']._serialized_end=19793 + _globals['_TESTALLTYPES_MAPBOOLUINT32ENTRY']._serialized_start=19795 + _globals['_TESTALLTYPES_MAPBOOLUINT32ENTRY']._serialized_end=19847 + _globals['_TESTALLTYPES_MAPBOOLUINT64ENTRY']._serialized_start=19849 + _globals['_TESTALLTYPES_MAPBOOLUINT64ENTRY']._serialized_end=19901 + _globals['_TESTALLTYPES_MAPBOOLFLOATENTRY']._serialized_start=19903 + _globals['_TESTALLTYPES_MAPBOOLFLOATENTRY']._serialized_end=19954 + _globals['_TESTALLTYPES_MAPBOOLDOUBLEENTRY']._serialized_start=19956 + _globals['_TESTALLTYPES_MAPBOOLDOUBLEENTRY']._serialized_end=20008 + _globals['_TESTALLTYPES_MAPBOOLENUMENTRY']._serialized_start=20010 + _globals['_TESTALLTYPES_MAPBOOLENUMENTRY']._serialized_end=20114 + _globals['_TESTALLTYPES_MAPBOOLMESSAGEENTRY']._serialized_start=20116 + _globals['_TESTALLTYPES_MAPBOOLMESSAGEENTRY']._serialized_end=20226 + _globals['_TESTALLTYPES_MAPBOOLDURATIONENTRY']._serialized_start=20228 + _globals['_TESTALLTYPES_MAPBOOLDURATIONENTRY']._serialized_end=20309 + _globals['_TESTALLTYPES_MAPBOOLTIMESTAMPENTRY']._serialized_start=20311 + _globals['_TESTALLTYPES_MAPBOOLTIMESTAMPENTRY']._serialized_end=20394 + _globals['_TESTALLTYPES_MAPBOOLNULLVALUEENTRY']._serialized_start=20396 + _globals['_TESTALLTYPES_MAPBOOLNULLVALUEENTRY']._serialized_end=20479 + _globals['_TESTALLTYPES_MAPBOOLANYENTRY']._serialized_start=20481 + _globals['_TESTALLTYPES_MAPBOOLANYENTRY']._serialized_end=20552 + _globals['_TESTALLTYPES_MAPBOOLSTRUCTENTRY']._serialized_start=20554 + _globals['_TESTALLTYPES_MAPBOOLSTRUCTENTRY']._serialized_end=20631 + _globals['_TESTALLTYPES_MAPBOOLVALUEENTRY']._serialized_start=20633 + _globals['_TESTALLTYPES_MAPBOOLVALUEENTRY']._serialized_end=20708 + _globals['_TESTALLTYPES_MAPBOOLLISTVALUEENTRY']._serialized_start=20710 + _globals['_TESTALLTYPES_MAPBOOLLISTVALUEENTRY']._serialized_end=20793 + _globals['_TESTALLTYPES_MAPBOOLINT64WRAPPERENTRY']._serialized_start=20795 + _globals['_TESTALLTYPES_MAPBOOLINT64WRAPPERENTRY']._serialized_end=20882 + _globals['_TESTALLTYPES_MAPBOOLINT32WRAPPERENTRY']._serialized_start=20884 + _globals['_TESTALLTYPES_MAPBOOLINT32WRAPPERENTRY']._serialized_end=20971 + _globals['_TESTALLTYPES_MAPBOOLDOUBLEWRAPPERENTRY']._serialized_start=20973 + _globals['_TESTALLTYPES_MAPBOOLDOUBLEWRAPPERENTRY']._serialized_end=21062 + _globals['_TESTALLTYPES_MAPBOOLFLOATWRAPPERENTRY']._serialized_start=21064 + _globals['_TESTALLTYPES_MAPBOOLFLOATWRAPPERENTRY']._serialized_end=21151 + _globals['_TESTALLTYPES_MAPBOOLUINT64WRAPPERENTRY']._serialized_start=21153 + _globals['_TESTALLTYPES_MAPBOOLUINT64WRAPPERENTRY']._serialized_end=21242 + _globals['_TESTALLTYPES_MAPBOOLUINT32WRAPPERENTRY']._serialized_start=21244 + _globals['_TESTALLTYPES_MAPBOOLUINT32WRAPPERENTRY']._serialized_end=21333 + _globals['_TESTALLTYPES_MAPBOOLSTRINGWRAPPERENTRY']._serialized_start=21335 + _globals['_TESTALLTYPES_MAPBOOLSTRINGWRAPPERENTRY']._serialized_end=21424 + _globals['_TESTALLTYPES_MAPBOOLBOOLWRAPPERENTRY']._serialized_start=21426 + _globals['_TESTALLTYPES_MAPBOOLBOOLWRAPPERENTRY']._serialized_end=21511 + _globals['_TESTALLTYPES_MAPBOOLBYTESWRAPPERENTRY']._serialized_start=21513 + _globals['_TESTALLTYPES_MAPBOOLBYTESWRAPPERENTRY']._serialized_end=21600 + _globals['_TESTALLTYPES_MAPINT32BOOLENTRY']._serialized_start=21602 + _globals['_TESTALLTYPES_MAPINT32BOOLENTRY']._serialized_end=21653 + _globals['_TESTALLTYPES_MAPINT32STRINGENTRY']._serialized_start=21655 + _globals['_TESTALLTYPES_MAPINT32STRINGENTRY']._serialized_end=21708 + _globals['_TESTALLTYPES_MAPINT32BYTESENTRY']._serialized_start=21710 + _globals['_TESTALLTYPES_MAPINT32BYTESENTRY']._serialized_end=21762 + _globals['_TESTALLTYPES_MAPINT32INT32ENTRY']._serialized_start=21764 + _globals['_TESTALLTYPES_MAPINT32INT32ENTRY']._serialized_end=21816 + _globals['_TESTALLTYPES_MAPINT32INT64ENTRY']._serialized_start=21818 + _globals['_TESTALLTYPES_MAPINT32INT64ENTRY']._serialized_end=21870 + _globals['_TESTALLTYPES_MAPINT32UINT32ENTRY']._serialized_start=21872 + _globals['_TESTALLTYPES_MAPINT32UINT32ENTRY']._serialized_end=21925 + _globals['_TESTALLTYPES_MAPINT32UINT64ENTRY']._serialized_start=21927 + _globals['_TESTALLTYPES_MAPINT32UINT64ENTRY']._serialized_end=21980 + _globals['_TESTALLTYPES_MAPINT32FLOATENTRY']._serialized_start=21982 + _globals['_TESTALLTYPES_MAPINT32FLOATENTRY']._serialized_end=22034 + _globals['_TESTALLTYPES_MAPINT32DOUBLEENTRY']._serialized_start=22036 + _globals['_TESTALLTYPES_MAPINT32DOUBLEENTRY']._serialized_end=22089 + _globals['_TESTALLTYPES_MAPINT32ENUMENTRY']._serialized_start=22091 + _globals['_TESTALLTYPES_MAPINT32ENUMENTRY']._serialized_end=22196 + _globals['_TESTALLTYPES_MAPINT32MESSAGEENTRY']._serialized_start=22198 + _globals['_TESTALLTYPES_MAPINT32MESSAGEENTRY']._serialized_end=22309 + _globals['_TESTALLTYPES_MAPINT32DURATIONENTRY']._serialized_start=22311 + _globals['_TESTALLTYPES_MAPINT32DURATIONENTRY']._serialized_end=22393 + _globals['_TESTALLTYPES_MAPINT32TIMESTAMPENTRY']._serialized_start=22395 + _globals['_TESTALLTYPES_MAPINT32TIMESTAMPENTRY']._serialized_end=22479 + _globals['_TESTALLTYPES_MAPINT32NULLVALUEENTRY']._serialized_start=22481 + _globals['_TESTALLTYPES_MAPINT32NULLVALUEENTRY']._serialized_end=22565 + _globals['_TESTALLTYPES_MAPINT32ANYENTRY']._serialized_start=22567 + _globals['_TESTALLTYPES_MAPINT32ANYENTRY']._serialized_end=22639 + _globals['_TESTALLTYPES_MAPINT32STRUCTENTRY']._serialized_start=22641 + _globals['_TESTALLTYPES_MAPINT32STRUCTENTRY']._serialized_end=22719 + _globals['_TESTALLTYPES_MAPINT32VALUEENTRY']._serialized_start=22721 + _globals['_TESTALLTYPES_MAPINT32VALUEENTRY']._serialized_end=22797 + _globals['_TESTALLTYPES_MAPINT32LISTVALUEENTRY']._serialized_start=22799 + _globals['_TESTALLTYPES_MAPINT32LISTVALUEENTRY']._serialized_end=22883 + _globals['_TESTALLTYPES_MAPINT32INT64WRAPPERENTRY']._serialized_start=22885 + _globals['_TESTALLTYPES_MAPINT32INT64WRAPPERENTRY']._serialized_end=22973 + _globals['_TESTALLTYPES_MAPINT32INT32WRAPPERENTRY']._serialized_start=22975 + _globals['_TESTALLTYPES_MAPINT32INT32WRAPPERENTRY']._serialized_end=23063 + _globals['_TESTALLTYPES_MAPINT32DOUBLEWRAPPERENTRY']._serialized_start=23065 + _globals['_TESTALLTYPES_MAPINT32DOUBLEWRAPPERENTRY']._serialized_end=23155 + _globals['_TESTALLTYPES_MAPINT32FLOATWRAPPERENTRY']._serialized_start=23157 + _globals['_TESTALLTYPES_MAPINT32FLOATWRAPPERENTRY']._serialized_end=23245 + _globals['_TESTALLTYPES_MAPINT32UINT64WRAPPERENTRY']._serialized_start=23247 + _globals['_TESTALLTYPES_MAPINT32UINT64WRAPPERENTRY']._serialized_end=23337 + _globals['_TESTALLTYPES_MAPINT32UINT32WRAPPERENTRY']._serialized_start=23339 + _globals['_TESTALLTYPES_MAPINT32UINT32WRAPPERENTRY']._serialized_end=23429 + _globals['_TESTALLTYPES_MAPINT32STRINGWRAPPERENTRY']._serialized_start=23431 + _globals['_TESTALLTYPES_MAPINT32STRINGWRAPPERENTRY']._serialized_end=23521 + _globals['_TESTALLTYPES_MAPINT32BOOLWRAPPERENTRY']._serialized_start=23523 + _globals['_TESTALLTYPES_MAPINT32BOOLWRAPPERENTRY']._serialized_end=23609 + _globals['_TESTALLTYPES_MAPINT32BYTESWRAPPERENTRY']._serialized_start=23611 + _globals['_TESTALLTYPES_MAPINT32BYTESWRAPPERENTRY']._serialized_end=23699 + _globals['_TESTALLTYPES_MAPINT64BOOLENTRY']._serialized_start=23701 + _globals['_TESTALLTYPES_MAPINT64BOOLENTRY']._serialized_end=23752 + _globals['_TESTALLTYPES_MAPINT64STRINGENTRY']._serialized_start=23754 + _globals['_TESTALLTYPES_MAPINT64STRINGENTRY']._serialized_end=23807 + _globals['_TESTALLTYPES_MAPINT64BYTESENTRY']._serialized_start=23809 + _globals['_TESTALLTYPES_MAPINT64BYTESENTRY']._serialized_end=23861 + _globals['_TESTALLTYPES_MAPINT64INT32ENTRY']._serialized_start=23863 + _globals['_TESTALLTYPES_MAPINT64INT32ENTRY']._serialized_end=23915 + _globals['_TESTALLTYPES_MAPINT64INT64ENTRY']._serialized_start=23917 + _globals['_TESTALLTYPES_MAPINT64INT64ENTRY']._serialized_end=23969 + _globals['_TESTALLTYPES_MAPINT64UINT32ENTRY']._serialized_start=23971 + _globals['_TESTALLTYPES_MAPINT64UINT32ENTRY']._serialized_end=24024 + _globals['_TESTALLTYPES_MAPINT64UINT64ENTRY']._serialized_start=24026 + _globals['_TESTALLTYPES_MAPINT64UINT64ENTRY']._serialized_end=24079 + _globals['_TESTALLTYPES_MAPINT64FLOATENTRY']._serialized_start=24081 + _globals['_TESTALLTYPES_MAPINT64FLOATENTRY']._serialized_end=24133 + _globals['_TESTALLTYPES_MAPINT64DOUBLEENTRY']._serialized_start=24135 + _globals['_TESTALLTYPES_MAPINT64DOUBLEENTRY']._serialized_end=24188 + _globals['_TESTALLTYPES_MAPINT64ENUMENTRY']._serialized_start=24190 + _globals['_TESTALLTYPES_MAPINT64ENUMENTRY']._serialized_end=24295 + _globals['_TESTALLTYPES_MAPINT64MESSAGEENTRY']._serialized_start=24297 + _globals['_TESTALLTYPES_MAPINT64MESSAGEENTRY']._serialized_end=24408 + _globals['_TESTALLTYPES_MAPINT64DURATIONENTRY']._serialized_start=24410 + _globals['_TESTALLTYPES_MAPINT64DURATIONENTRY']._serialized_end=24492 + _globals['_TESTALLTYPES_MAPINT64TIMESTAMPENTRY']._serialized_start=24494 + _globals['_TESTALLTYPES_MAPINT64TIMESTAMPENTRY']._serialized_end=24578 + _globals['_TESTALLTYPES_MAPINT64NULLVALUEENTRY']._serialized_start=24580 + _globals['_TESTALLTYPES_MAPINT64NULLVALUEENTRY']._serialized_end=24664 + _globals['_TESTALLTYPES_MAPINT64ANYENTRY']._serialized_start=24666 + _globals['_TESTALLTYPES_MAPINT64ANYENTRY']._serialized_end=24738 + _globals['_TESTALLTYPES_MAPINT64STRUCTENTRY']._serialized_start=24740 + _globals['_TESTALLTYPES_MAPINT64STRUCTENTRY']._serialized_end=24818 + _globals['_TESTALLTYPES_MAPINT64VALUEENTRY']._serialized_start=24820 + _globals['_TESTALLTYPES_MAPINT64VALUEENTRY']._serialized_end=24896 + _globals['_TESTALLTYPES_MAPINT64LISTVALUEENTRY']._serialized_start=24898 + _globals['_TESTALLTYPES_MAPINT64LISTVALUEENTRY']._serialized_end=24982 + _globals['_TESTALLTYPES_MAPINT64INT64WRAPPERENTRY']._serialized_start=24984 + _globals['_TESTALLTYPES_MAPINT64INT64WRAPPERENTRY']._serialized_end=25072 + _globals['_TESTALLTYPES_MAPINT64INT32WRAPPERENTRY']._serialized_start=25074 + _globals['_TESTALLTYPES_MAPINT64INT32WRAPPERENTRY']._serialized_end=25162 + _globals['_TESTALLTYPES_MAPINT64DOUBLEWRAPPERENTRY']._serialized_start=25164 + _globals['_TESTALLTYPES_MAPINT64DOUBLEWRAPPERENTRY']._serialized_end=25254 + _globals['_TESTALLTYPES_MAPINT64FLOATWRAPPERENTRY']._serialized_start=25256 + _globals['_TESTALLTYPES_MAPINT64FLOATWRAPPERENTRY']._serialized_end=25344 + _globals['_TESTALLTYPES_MAPINT64UINT64WRAPPERENTRY']._serialized_start=25346 + _globals['_TESTALLTYPES_MAPINT64UINT64WRAPPERENTRY']._serialized_end=25436 + _globals['_TESTALLTYPES_MAPINT64UINT32WRAPPERENTRY']._serialized_start=25438 + _globals['_TESTALLTYPES_MAPINT64UINT32WRAPPERENTRY']._serialized_end=25528 + _globals['_TESTALLTYPES_MAPINT64STRINGWRAPPERENTRY']._serialized_start=25530 + _globals['_TESTALLTYPES_MAPINT64STRINGWRAPPERENTRY']._serialized_end=25620 + _globals['_TESTALLTYPES_MAPINT64BOOLWRAPPERENTRY']._serialized_start=25622 + _globals['_TESTALLTYPES_MAPINT64BOOLWRAPPERENTRY']._serialized_end=25708 + _globals['_TESTALLTYPES_MAPINT64BYTESWRAPPERENTRY']._serialized_start=25710 + _globals['_TESTALLTYPES_MAPINT64BYTESWRAPPERENTRY']._serialized_end=25798 + _globals['_TESTALLTYPES_MAPUINT32BOOLENTRY']._serialized_start=25800 + _globals['_TESTALLTYPES_MAPUINT32BOOLENTRY']._serialized_end=25852 + _globals['_TESTALLTYPES_MAPUINT32STRINGENTRY']._serialized_start=25854 + _globals['_TESTALLTYPES_MAPUINT32STRINGENTRY']._serialized_end=25908 + _globals['_TESTALLTYPES_MAPUINT32BYTESENTRY']._serialized_start=25910 + _globals['_TESTALLTYPES_MAPUINT32BYTESENTRY']._serialized_end=25963 + _globals['_TESTALLTYPES_MAPUINT32INT32ENTRY']._serialized_start=25965 + _globals['_TESTALLTYPES_MAPUINT32INT32ENTRY']._serialized_end=26018 + _globals['_TESTALLTYPES_MAPUINT32INT64ENTRY']._serialized_start=26020 + _globals['_TESTALLTYPES_MAPUINT32INT64ENTRY']._serialized_end=26073 + _globals['_TESTALLTYPES_MAPUINT32UINT32ENTRY']._serialized_start=26075 + _globals['_TESTALLTYPES_MAPUINT32UINT32ENTRY']._serialized_end=26129 + _globals['_TESTALLTYPES_MAPUINT32UINT64ENTRY']._serialized_start=26131 + _globals['_TESTALLTYPES_MAPUINT32UINT64ENTRY']._serialized_end=26185 + _globals['_TESTALLTYPES_MAPUINT32FLOATENTRY']._serialized_start=26187 + _globals['_TESTALLTYPES_MAPUINT32FLOATENTRY']._serialized_end=26240 + _globals['_TESTALLTYPES_MAPUINT32DOUBLEENTRY']._serialized_start=26242 + _globals['_TESTALLTYPES_MAPUINT32DOUBLEENTRY']._serialized_end=26296 + _globals['_TESTALLTYPES_MAPUINT32ENUMENTRY']._serialized_start=26298 + _globals['_TESTALLTYPES_MAPUINT32ENUMENTRY']._serialized_end=26404 + _globals['_TESTALLTYPES_MAPUINT32MESSAGEENTRY']._serialized_start=26406 + _globals['_TESTALLTYPES_MAPUINT32MESSAGEENTRY']._serialized_end=26518 + _globals['_TESTALLTYPES_MAPUINT32DURATIONENTRY']._serialized_start=26520 + _globals['_TESTALLTYPES_MAPUINT32DURATIONENTRY']._serialized_end=26603 + _globals['_TESTALLTYPES_MAPUINT32TIMESTAMPENTRY']._serialized_start=26605 + _globals['_TESTALLTYPES_MAPUINT32TIMESTAMPENTRY']._serialized_end=26690 + _globals['_TESTALLTYPES_MAPUINT32NULLVALUEENTRY']._serialized_start=26692 + _globals['_TESTALLTYPES_MAPUINT32NULLVALUEENTRY']._serialized_end=26777 + _globals['_TESTALLTYPES_MAPUINT32ANYENTRY']._serialized_start=26779 + _globals['_TESTALLTYPES_MAPUINT32ANYENTRY']._serialized_end=26852 + _globals['_TESTALLTYPES_MAPUINT32STRUCTENTRY']._serialized_start=26854 + _globals['_TESTALLTYPES_MAPUINT32STRUCTENTRY']._serialized_end=26933 + _globals['_TESTALLTYPES_MAPUINT32VALUEENTRY']._serialized_start=26935 + _globals['_TESTALLTYPES_MAPUINT32VALUEENTRY']._serialized_end=27012 + _globals['_TESTALLTYPES_MAPUINT32LISTVALUEENTRY']._serialized_start=27014 + _globals['_TESTALLTYPES_MAPUINT32LISTVALUEENTRY']._serialized_end=27099 + _globals['_TESTALLTYPES_MAPUINT32INT64WRAPPERENTRY']._serialized_start=27101 + _globals['_TESTALLTYPES_MAPUINT32INT64WRAPPERENTRY']._serialized_end=27190 + _globals['_TESTALLTYPES_MAPUINT32INT32WRAPPERENTRY']._serialized_start=27192 + _globals['_TESTALLTYPES_MAPUINT32INT32WRAPPERENTRY']._serialized_end=27281 + _globals['_TESTALLTYPES_MAPUINT32DOUBLEWRAPPERENTRY']._serialized_start=27283 + _globals['_TESTALLTYPES_MAPUINT32DOUBLEWRAPPERENTRY']._serialized_end=27374 + _globals['_TESTALLTYPES_MAPUINT32FLOATWRAPPERENTRY']._serialized_start=27376 + _globals['_TESTALLTYPES_MAPUINT32FLOATWRAPPERENTRY']._serialized_end=27465 + _globals['_TESTALLTYPES_MAPUINT32UINT64WRAPPERENTRY']._serialized_start=27467 + _globals['_TESTALLTYPES_MAPUINT32UINT64WRAPPERENTRY']._serialized_end=27558 + _globals['_TESTALLTYPES_MAPUINT32UINT32WRAPPERENTRY']._serialized_start=27560 + _globals['_TESTALLTYPES_MAPUINT32UINT32WRAPPERENTRY']._serialized_end=27651 + _globals['_TESTALLTYPES_MAPUINT32STRINGWRAPPERENTRY']._serialized_start=27653 + _globals['_TESTALLTYPES_MAPUINT32STRINGWRAPPERENTRY']._serialized_end=27744 + _globals['_TESTALLTYPES_MAPUINT32BOOLWRAPPERENTRY']._serialized_start=27746 + _globals['_TESTALLTYPES_MAPUINT32BOOLWRAPPERENTRY']._serialized_end=27833 + _globals['_TESTALLTYPES_MAPUINT32BYTESWRAPPERENTRY']._serialized_start=27835 + _globals['_TESTALLTYPES_MAPUINT32BYTESWRAPPERENTRY']._serialized_end=27924 + _globals['_TESTALLTYPES_MAPUINT64BOOLENTRY']._serialized_start=27926 + _globals['_TESTALLTYPES_MAPUINT64BOOLENTRY']._serialized_end=27978 + _globals['_TESTALLTYPES_MAPUINT64STRINGENTRY']._serialized_start=27980 + _globals['_TESTALLTYPES_MAPUINT64STRINGENTRY']._serialized_end=28034 + _globals['_TESTALLTYPES_MAPUINT64BYTESENTRY']._serialized_start=28036 + _globals['_TESTALLTYPES_MAPUINT64BYTESENTRY']._serialized_end=28089 + _globals['_TESTALLTYPES_MAPUINT64INT32ENTRY']._serialized_start=28091 + _globals['_TESTALLTYPES_MAPUINT64INT32ENTRY']._serialized_end=28144 + _globals['_TESTALLTYPES_MAPUINT64INT64ENTRY']._serialized_start=28146 + _globals['_TESTALLTYPES_MAPUINT64INT64ENTRY']._serialized_end=28199 + _globals['_TESTALLTYPES_MAPUINT64UINT32ENTRY']._serialized_start=28201 + _globals['_TESTALLTYPES_MAPUINT64UINT32ENTRY']._serialized_end=28255 + _globals['_TESTALLTYPES_MAPUINT64UINT64ENTRY']._serialized_start=28257 + _globals['_TESTALLTYPES_MAPUINT64UINT64ENTRY']._serialized_end=28311 + _globals['_TESTALLTYPES_MAPUINT64FLOATENTRY']._serialized_start=28313 + _globals['_TESTALLTYPES_MAPUINT64FLOATENTRY']._serialized_end=28366 + _globals['_TESTALLTYPES_MAPUINT64DOUBLEENTRY']._serialized_start=28368 + _globals['_TESTALLTYPES_MAPUINT64DOUBLEENTRY']._serialized_end=28422 + _globals['_TESTALLTYPES_MAPUINT64ENUMENTRY']._serialized_start=28424 + _globals['_TESTALLTYPES_MAPUINT64ENUMENTRY']._serialized_end=28530 + _globals['_TESTALLTYPES_MAPUINT64MESSAGEENTRY']._serialized_start=28532 + _globals['_TESTALLTYPES_MAPUINT64MESSAGEENTRY']._serialized_end=28644 + _globals['_TESTALLTYPES_MAPUINT64DURATIONENTRY']._serialized_start=28646 + _globals['_TESTALLTYPES_MAPUINT64DURATIONENTRY']._serialized_end=28729 + _globals['_TESTALLTYPES_MAPUINT64TIMESTAMPENTRY']._serialized_start=28731 + _globals['_TESTALLTYPES_MAPUINT64TIMESTAMPENTRY']._serialized_end=28816 + _globals['_TESTALLTYPES_MAPUINT64NULLVALUEENTRY']._serialized_start=28818 + _globals['_TESTALLTYPES_MAPUINT64NULLVALUEENTRY']._serialized_end=28903 + _globals['_TESTALLTYPES_MAPUINT64ANYENTRY']._serialized_start=28905 + _globals['_TESTALLTYPES_MAPUINT64ANYENTRY']._serialized_end=28978 + _globals['_TESTALLTYPES_MAPUINT64STRUCTENTRY']._serialized_start=28980 + _globals['_TESTALLTYPES_MAPUINT64STRUCTENTRY']._serialized_end=29059 + _globals['_TESTALLTYPES_MAPUINT64VALUEENTRY']._serialized_start=29061 + _globals['_TESTALLTYPES_MAPUINT64VALUEENTRY']._serialized_end=29138 + _globals['_TESTALLTYPES_MAPUINT64LISTVALUEENTRY']._serialized_start=29140 + _globals['_TESTALLTYPES_MAPUINT64LISTVALUEENTRY']._serialized_end=29225 + _globals['_TESTALLTYPES_MAPUINT64INT64WRAPPERENTRY']._serialized_start=29227 + _globals['_TESTALLTYPES_MAPUINT64INT64WRAPPERENTRY']._serialized_end=29316 + _globals['_TESTALLTYPES_MAPUINT64INT32WRAPPERENTRY']._serialized_start=29318 + _globals['_TESTALLTYPES_MAPUINT64INT32WRAPPERENTRY']._serialized_end=29407 + _globals['_TESTALLTYPES_MAPUINT64DOUBLEWRAPPERENTRY']._serialized_start=29409 + _globals['_TESTALLTYPES_MAPUINT64DOUBLEWRAPPERENTRY']._serialized_end=29500 + _globals['_TESTALLTYPES_MAPUINT64FLOATWRAPPERENTRY']._serialized_start=29502 + _globals['_TESTALLTYPES_MAPUINT64FLOATWRAPPERENTRY']._serialized_end=29591 + _globals['_TESTALLTYPES_MAPUINT64UINT64WRAPPERENTRY']._serialized_start=29593 + _globals['_TESTALLTYPES_MAPUINT64UINT64WRAPPERENTRY']._serialized_end=29684 + _globals['_TESTALLTYPES_MAPUINT64UINT32WRAPPERENTRY']._serialized_start=29686 + _globals['_TESTALLTYPES_MAPUINT64UINT32WRAPPERENTRY']._serialized_end=29777 + _globals['_TESTALLTYPES_MAPUINT64STRINGWRAPPERENTRY']._serialized_start=29779 + _globals['_TESTALLTYPES_MAPUINT64STRINGWRAPPERENTRY']._serialized_end=29870 + _globals['_TESTALLTYPES_MAPUINT64BOOLWRAPPERENTRY']._serialized_start=29872 + _globals['_TESTALLTYPES_MAPUINT64BOOLWRAPPERENTRY']._serialized_end=29959 + _globals['_TESTALLTYPES_MAPUINT64BYTESWRAPPERENTRY']._serialized_start=29961 + _globals['_TESTALLTYPES_MAPUINT64BYTESWRAPPERENTRY']._serialized_end=30050 + _globals['_TESTALLTYPES_MAPSTRINGBOOLENTRY']._serialized_start=30052 + _globals['_TESTALLTYPES_MAPSTRINGBOOLENTRY']._serialized_end=30104 + _globals['_TESTALLTYPES_MAPSTRINGSTRINGENTRY']._serialized_start=30106 + _globals['_TESTALLTYPES_MAPSTRINGSTRINGENTRY']._serialized_end=30160 + _globals['_TESTALLTYPES_MAPSTRINGBYTESENTRY']._serialized_start=30162 + _globals['_TESTALLTYPES_MAPSTRINGBYTESENTRY']._serialized_end=30215 + _globals['_TESTALLTYPES_MAPSTRINGINT32ENTRY']._serialized_start=30217 + _globals['_TESTALLTYPES_MAPSTRINGINT32ENTRY']._serialized_end=30270 + _globals['_TESTALLTYPES_MAPSTRINGINT64ENTRY']._serialized_start=30272 + _globals['_TESTALLTYPES_MAPSTRINGINT64ENTRY']._serialized_end=30325 + _globals['_TESTALLTYPES_MAPSTRINGUINT32ENTRY']._serialized_start=30327 + _globals['_TESTALLTYPES_MAPSTRINGUINT32ENTRY']._serialized_end=30381 + _globals['_TESTALLTYPES_MAPSTRINGUINT64ENTRY']._serialized_start=30383 + _globals['_TESTALLTYPES_MAPSTRINGUINT64ENTRY']._serialized_end=30437 + _globals['_TESTALLTYPES_MAPSTRINGFLOATENTRY']._serialized_start=30439 + _globals['_TESTALLTYPES_MAPSTRINGFLOATENTRY']._serialized_end=30492 + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEENTRY']._serialized_start=30494 + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEENTRY']._serialized_end=30548 + _globals['_TESTALLTYPES_MAPSTRINGENUMENTRY']._serialized_start=30550 + _globals['_TESTALLTYPES_MAPSTRINGENUMENTRY']._serialized_end=30656 + _globals['_TESTALLTYPES_MAPSTRINGMESSAGEENTRY']._serialized_start=30658 + _globals['_TESTALLTYPES_MAPSTRINGMESSAGEENTRY']._serialized_end=30770 + _globals['_TESTALLTYPES_MAPSTRINGDURATIONENTRY']._serialized_start=30772 + _globals['_TESTALLTYPES_MAPSTRINGDURATIONENTRY']._serialized_end=30855 + _globals['_TESTALLTYPES_MAPSTRINGTIMESTAMPENTRY']._serialized_start=30857 + _globals['_TESTALLTYPES_MAPSTRINGTIMESTAMPENTRY']._serialized_end=30942 + _globals['_TESTALLTYPES_MAPSTRINGNULLVALUEENTRY']._serialized_start=30944 + _globals['_TESTALLTYPES_MAPSTRINGNULLVALUEENTRY']._serialized_end=31029 + _globals['_TESTALLTYPES_MAPSTRINGANYENTRY']._serialized_start=31031 + _globals['_TESTALLTYPES_MAPSTRINGANYENTRY']._serialized_end=31104 + _globals['_TESTALLTYPES_MAPSTRINGSTRUCTENTRY']._serialized_start=31106 + _globals['_TESTALLTYPES_MAPSTRINGSTRUCTENTRY']._serialized_end=31185 + _globals['_TESTALLTYPES_MAPSTRINGVALUEENTRY']._serialized_start=31187 + _globals['_TESTALLTYPES_MAPSTRINGVALUEENTRY']._serialized_end=31264 + _globals['_TESTALLTYPES_MAPSTRINGLISTVALUEENTRY']._serialized_start=31266 + _globals['_TESTALLTYPES_MAPSTRINGLISTVALUEENTRY']._serialized_end=31351 + _globals['_TESTALLTYPES_MAPSTRINGINT64WRAPPERENTRY']._serialized_start=31353 + _globals['_TESTALLTYPES_MAPSTRINGINT64WRAPPERENTRY']._serialized_end=31442 + _globals['_TESTALLTYPES_MAPSTRINGINT32WRAPPERENTRY']._serialized_start=31444 + _globals['_TESTALLTYPES_MAPSTRINGINT32WRAPPERENTRY']._serialized_end=31533 + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEWRAPPERENTRY']._serialized_start=31535 + _globals['_TESTALLTYPES_MAPSTRINGDOUBLEWRAPPERENTRY']._serialized_end=31626 + _globals['_TESTALLTYPES_MAPSTRINGFLOATWRAPPERENTRY']._serialized_start=31628 + _globals['_TESTALLTYPES_MAPSTRINGFLOATWRAPPERENTRY']._serialized_end=31717 + _globals['_TESTALLTYPES_MAPSTRINGUINT64WRAPPERENTRY']._serialized_start=31719 + _globals['_TESTALLTYPES_MAPSTRINGUINT64WRAPPERENTRY']._serialized_end=31810 + _globals['_TESTALLTYPES_MAPSTRINGUINT32WRAPPERENTRY']._serialized_start=31812 + _globals['_TESTALLTYPES_MAPSTRINGUINT32WRAPPERENTRY']._serialized_end=31903 + _globals['_TESTALLTYPES_MAPSTRINGSTRINGWRAPPERENTRY']._serialized_start=31905 + _globals['_TESTALLTYPES_MAPSTRINGSTRINGWRAPPERENTRY']._serialized_end=31996 + _globals['_TESTALLTYPES_MAPSTRINGBOOLWRAPPERENTRY']._serialized_start=31998 + _globals['_TESTALLTYPES_MAPSTRINGBOOLWRAPPERENTRY']._serialized_end=32085 + _globals['_TESTALLTYPES_MAPSTRINGBYTESWRAPPERENTRY']._serialized_start=32087 + _globals['_TESTALLTYPES_MAPSTRINGBYTESWRAPPERENTRY']._serialized_end=32176 + _globals['_TESTALLTYPES_NESTEDENUM']._serialized_start=32178 + _globals['_TESTALLTYPES_NESTEDENUM']._serialized_end=32217 + _globals['_NESTEDTESTALLTYPES']._serialized_start=32305 + _globals['_NESTEDTESTALLTYPES']._serialized_end=32449 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/conformance/test/__init__.py b/py_xds_protos/cel/expr/conformance/test/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/py_xds_protos/cel/expr/conformance/test/simple_pb2.py b/py_xds_protos/cel/expr/conformance/test/simple_pb2.py new file mode 100644 index 0000000000000..d4682c8d5dd85 --- /dev/null +++ b/py_xds_protos/cel/expr/conformance/test/simple_pb2.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/conformance/test/simple.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/conformance/test/simple.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from cel.expr import checked_pb2 as cel_dot_expr_dot_checked__pb2 +from cel.expr import eval_pb2 as cel_dot_expr_dot_eval__pb2 +from cel.expr import value_pb2 as cel_dot_expr_dot_value__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&cel/expr/conformance/test/simple.proto\x12\x19\x63\x65l.expr.conformance.test\x1a\x16\x63\x65l/expr/checked.proto\x1a\x13\x63\x65l/expr/eval.proto\x1a\x14\x63\x65l/expr/value.proto\"r\n\x0eSimpleTestFile\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12=\n\x07section\x18\x03 \x03(\x0b\x32,.cel.expr.conformance.test.SimpleTestSection\"k\n\x11SimpleTestSection\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x33\n\x04test\x18\x03 \x03(\x0b\x32%.cel.expr.conformance.test.SimpleTest\"\xa6\x05\n\nSimpleTest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0c\n\x04\x65xpr\x18\x03 \x01(\t\x12\x16\n\x0e\x64isable_macros\x18\x04 \x01(\x08\x12\x15\n\rdisable_check\x18\x05 \x01(\x08\x12\x12\n\ncheck_only\x18\x0f \x01(\x08\x12 \n\x08type_env\x18\x06 \x03(\x0b\x32\x0e.cel.expr.Decl\x12\x11\n\tcontainer\x18\r \x01(\t\x12\x0e\n\x06locale\x18\x0e \x01(\t\x12\x45\n\x08\x62indings\x18\x07 \x03(\x0b\x32\x33.cel.expr.conformance.test.SimpleTest.BindingsEntry\x12 \n\x05value\x18\x08 \x01(\x0b\x32\x0f.cel.expr.ValueH\x00\x12>\n\x0ctyped_result\x18\x10 \x01(\x0b\x32&.cel.expr.conformance.test.TypedResultH\x00\x12(\n\neval_error\x18\t \x01(\x0b\x32\x12.cel.expr.ErrorSetH\x00\x12\x45\n\x0f\x61ny_eval_errors\x18\n \x01(\x0b\x32*.cel.expr.conformance.test.ErrorSetMatcherH\x00\x12\'\n\x07unknown\x18\x0b \x01(\x0b\x32\x14.cel.expr.UnknownSetH\x00\x12\x44\n\x0c\x61ny_unknowns\x18\x0c \x01(\x0b\x32,.cel.expr.conformance.test.UnknownSetMatcherH\x00\x1a\x44\n\rBindingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.cel.expr.ExprValue:\x02\x38\x01\x42\x10\n\x0eresult_matcher\"T\n\x0bTypedResult\x12\x1f\n\x06result\x18\x01 \x01(\x0b\x32\x0f.cel.expr.Value\x12$\n\x0c\x64\x65\x64uced_type\x18\x02 \x01(\x0b\x32\x0e.cel.expr.Type\"5\n\x0f\x45rrorSetMatcher\x12\"\n\x06\x65rrors\x18\x01 \x03(\x0b\x32\x12.cel.expr.ErrorSet\";\n\x11UnknownSetMatcher\x12&\n\x08unknowns\x18\x01 \x03(\x0b\x32\x14.cel.expr.UnknownSetBP\n\x1d\x64\x65v.cel.expr.conformance.testB\x0bSimpleProtoP\x01Z\x1d\x63\x65l.dev/expr/conformance/test\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.conformance.test.simple_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\035dev.cel.expr.conformance.testB\013SimpleProtoP\001Z\035cel.dev/expr/conformance/test\370\001\001' + _globals['_SIMPLETEST_BINDINGSENTRY']._loaded_options = None + _globals['_SIMPLETEST_BINDINGSENTRY']._serialized_options = b'8\001' + _globals['_SIMPLETESTFILE']._serialized_start=136 + _globals['_SIMPLETESTFILE']._serialized_end=250 + _globals['_SIMPLETESTSECTION']._serialized_start=252 + _globals['_SIMPLETESTSECTION']._serialized_end=359 + _globals['_SIMPLETEST']._serialized_start=362 + _globals['_SIMPLETEST']._serialized_end=1040 + _globals['_SIMPLETEST_BINDINGSENTRY']._serialized_start=954 + _globals['_SIMPLETEST_BINDINGSENTRY']._serialized_end=1022 + _globals['_TYPEDRESULT']._serialized_start=1042 + _globals['_TYPEDRESULT']._serialized_end=1126 + _globals['_ERRORSETMATCHER']._serialized_start=1128 + _globals['_ERRORSETMATCHER']._serialized_end=1181 + _globals['_UNKNOWNSETMATCHER']._serialized_start=1183 + _globals['_UNKNOWNSETMATCHER']._serialized_end=1242 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/conformance/test/suite_pb2.py b/py_xds_protos/cel/expr/conformance/test/suite_pb2.py new file mode 100644 index 0000000000000..616ca3d73e6f8 --- /dev/null +++ b/py_xds_protos/cel/expr/conformance/test/suite_pb2.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/conformance/test/suite.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/conformance/test/suite.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from cel.expr import checked_pb2 as cel_dot_expr_dot_checked__pb2 +from cel.expr import eval_pb2 as cel_dot_expr_dot_eval__pb2 +from cel.expr import value_pb2 as cel_dot_expr_dot_value__pb2 +from cel.expr.conformance import env_config_pb2 as cel_dot_expr_dot_conformance_dot_env__config__pb2 +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%cel/expr/conformance/test/suite.proto\x12\x19\x63\x65l.expr.conformance.test\x1a\x16\x63\x65l/expr/checked.proto\x1a\x13\x63\x65l/expr/eval.proto\x1a\x14\x63\x65l/expr/value.proto\x1a%cel/expr/conformance/env_config.proto\x1a\x19google/protobuf/any.proto\"h\n\tTestSuite\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x38\n\x08sections\x18\x03 \x03(\x0b\x32&.cel.expr.conformance.test.TestSection\"d\n\x0bTestSection\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x32\n\x05tests\x18\x03 \x03(\x0b\x32#.cel.expr.conformance.test.TestCase\"\xb3\x03\n\x08TestCase\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0c\n\x04\x65xpr\x18\x03 \x01(\t\x12.\n\x03\x65nv\x18\x04 \x01(\x0b\x32!.cel.expr.conformance.Environment\x12=\n\x05input\x18\x05 \x03(\x0b\x32..cel.expr.conformance.test.TestCase.InputEntry\x12>\n\rinput_context\x18\x06 \x01(\x0b\x32\'.cel.expr.conformance.test.InputContext\x12\x35\n\x06output\x18\x07 \x01(\x0b\x32%.cel.expr.conformance.test.TestOutput\x12$\n\x0c\x64\x65\x64uced_type\x18\x08 \x01(\x0b\x32\x0e.cel.expr.Type\x12\x15\n\rdisable_check\x18\t \x01(\x08\x1aS\n\nInputEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.cel.expr.conformance.test.InputValue:\x02\x38\x01\"m\n\x0cInputContext\x12/\n\x0f\x63ontext_message\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x12\x16\n\x0c\x63ontext_expr\x18\x02 \x01(\tH\x00\x42\x14\n\x12input_context_kind\"F\n\nInputValue\x12 \n\x05value\x18\x01 \x01(\x0b\x32\x0f.cel.expr.ValueH\x00\x12\x0e\n\x04\x65xpr\x18\x02 \x01(\tH\x00\x42\x06\n\x04kind\"\xae\x01\n\nTestOutput\x12\'\n\x0cresult_value\x18\x08 \x01(\x0b\x32\x0f.cel.expr.ValueH\x00\x12\x15\n\x0bresult_expr\x18\t \x01(\tH\x00\x12(\n\neval_error\x18\n \x01(\x0b\x32\x12.cel.expr.ErrorSetH\x00\x12\'\n\x07unknown\x18\x0b \x01(\x0b\x32\x14.cel.expr.UnknownSetH\x00\x42\r\n\x0bresult_kindBO\n\x1d\x64\x65v.cel.expr.conformance.testB\nSuiteProtoP\x01Z\x1d\x63\x65l.dev/expr/conformance/test\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.conformance.test.suite_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\035dev.cel.expr.conformance.testB\nSuiteProtoP\001Z\035cel.dev/expr/conformance/test\370\001\001' + _globals['_TESTCASE_INPUTENTRY']._loaded_options = None + _globals['_TESTCASE_INPUTENTRY']._serialized_options = b'8\001' + _globals['_TESTSUITE']._serialized_start=201 + _globals['_TESTSUITE']._serialized_end=305 + _globals['_TESTSECTION']._serialized_start=307 + _globals['_TESTSECTION']._serialized_end=407 + _globals['_TESTCASE']._serialized_start=410 + _globals['_TESTCASE']._serialized_end=845 + _globals['_TESTCASE_INPUTENTRY']._serialized_start=762 + _globals['_TESTCASE_INPUTENTRY']._serialized_end=845 + _globals['_INPUTCONTEXT']._serialized_start=847 + _globals['_INPUTCONTEXT']._serialized_end=956 + _globals['_INPUTVALUE']._serialized_start=958 + _globals['_INPUTVALUE']._serialized_end=1028 + _globals['_TESTOUTPUT']._serialized_start=1031 + _globals['_TESTOUTPUT']._serialized_end=1205 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/eval_pb2.py b/py_xds_protos/cel/expr/eval_pb2.py new file mode 100644 index 0000000000000..d5363673eb83d --- /dev/null +++ b/py_xds_protos/cel/expr/eval_pb2.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/eval.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/eval.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 +from cel.expr import value_pb2 as cel_dot_expr_dot_value__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x63\x65l/expr/eval.proto\x12\x08\x63\x65l.expr\x1a\x19google/protobuf/any.proto\x1a\x14\x63\x65l/expr/value.proto\"\x84\x01\n\tEvalState\x12#\n\x06values\x18\x01 \x03(\x0b\x32\x13.cel.expr.ExprValue\x12+\n\x07results\x18\x03 \x03(\x0b\x32\x1a.cel.expr.EvalState.Result\x1a%\n\x06Result\x12\x0c\n\x04\x65xpr\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x03\"\x83\x01\n\tExprValue\x12 \n\x05value\x18\x01 \x01(\x0b\x32\x0f.cel.expr.ValueH\x00\x12#\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x12.cel.expr.ErrorSetH\x00\x12\'\n\x07unknown\x18\x03 \x01(\x0b\x32\x14.cel.expr.UnknownSetH\x00\x42\x06\n\x04kind\",\n\x08\x45rrorSet\x12 \n\x06\x65rrors\x18\x01 \x03(\x0b\x32\x10.cel.expr.Status\"N\n\x06Status\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12%\n\x07\x64\x65tails\x18\x03 \x03(\x0b\x32\x14.google.protobuf.Any\"\x1b\n\nUnknownSet\x12\r\n\x05\x65xprs\x18\x01 \x03(\x03\x42,\n\x0c\x64\x65v.cel.exprB\tEvalProtoP\x01Z\x0c\x63\x65l.dev/expr\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.eval_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\014dev.cel.exprB\tEvalProtoP\001Z\014cel.dev/expr\370\001\001' + _globals['_EVALSTATE']._serialized_start=83 + _globals['_EVALSTATE']._serialized_end=215 + _globals['_EVALSTATE_RESULT']._serialized_start=178 + _globals['_EVALSTATE_RESULT']._serialized_end=215 + _globals['_EXPRVALUE']._serialized_start=218 + _globals['_EXPRVALUE']._serialized_end=349 + _globals['_ERRORSET']._serialized_start=351 + _globals['_ERRORSET']._serialized_end=395 + _globals['_STATUS']._serialized_start=397 + _globals['_STATUS']._serialized_end=475 + _globals['_UNKNOWNSET']._serialized_start=477 + _globals['_UNKNOWNSET']._serialized_end=504 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/explain_pb2.py b/py_xds_protos/cel/expr/explain_pb2.py new file mode 100644 index 0000000000000..df6bb56f989e2 --- /dev/null +++ b/py_xds_protos/cel/expr/explain_pb2.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/explain.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/explain.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from cel.expr import value_pb2 as cel_dot_expr_dot_value__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x63\x65l/expr/explain.proto\x12\x08\x63\x65l.expr\x1a\x14\x63\x65l/expr/value.proto\"\x8b\x01\n\x07\x45xplain\x12\x1f\n\x06values\x18\x01 \x03(\x0b\x32\x0f.cel.expr.Value\x12.\n\nexpr_steps\x18\x02 \x03(\x0b\x32\x1a.cel.expr.Explain.ExprStep\x1a+\n\x08\x45xprStep\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x13\n\x0bvalue_index\x18\x02 \x01(\x05:\x02\x18\x01\x42/\n\x0c\x64\x65v.cel.exprB\x0c\x45xplainProtoP\x01Z\x0c\x63\x65l.dev/expr\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.explain_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\014dev.cel.exprB\014ExplainProtoP\001Z\014cel.dev/expr\370\001\001' + _globals['_EXPLAIN']._loaded_options = None + _globals['_EXPLAIN']._serialized_options = b'\030\001' + _globals['_EXPLAIN']._serialized_start=59 + _globals['_EXPLAIN']._serialized_end=198 + _globals['_EXPLAIN_EXPRSTEP']._serialized_start=151 + _globals['_EXPLAIN_EXPRSTEP']._serialized_end=194 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/syntax_pb2.py b/py_xds_protos/cel/expr/syntax_pb2.py new file mode 100644 index 0000000000000..825976c1eb8e8 --- /dev/null +++ b/py_xds_protos/cel/expr/syntax_pb2.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/syntax.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/syntax.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x63\x65l/expr/syntax.proto\x12\x08\x63\x65l.expr\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"U\n\nParsedExpr\x12\x1c\n\x04\x65xpr\x18\x02 \x01(\x0b\x32\x0e.cel.expr.Expr\x12)\n\x0bsource_info\x18\x03 \x01(\x0b\x32\x14.cel.expr.SourceInfo\"\xda\x08\n\x04\x45xpr\x12\n\n\x02id\x18\x02 \x01(\x03\x12(\n\nconst_expr\x18\x03 \x01(\x0b\x32\x12.cel.expr.ConstantH\x00\x12*\n\nident_expr\x18\x04 \x01(\x0b\x32\x14.cel.expr.Expr.IdentH\x00\x12,\n\x0bselect_expr\x18\x05 \x01(\x0b\x32\x15.cel.expr.Expr.SelectH\x00\x12(\n\tcall_expr\x18\x06 \x01(\x0b\x32\x13.cel.expr.Expr.CallH\x00\x12.\n\tlist_expr\x18\x07 \x01(\x0b\x32\x19.cel.expr.Expr.CreateListH\x00\x12\x32\n\x0bstruct_expr\x18\x08 \x01(\x0b\x32\x1b.cel.expr.Expr.CreateStructH\x00\x12:\n\x12\x63omprehension_expr\x18\t \x01(\x0b\x32\x1c.cel.expr.Expr.ComprehensionH\x00\x1a\x15\n\x05Ident\x12\x0c\n\x04name\x18\x01 \x01(\t\x1aK\n\x06Select\x12\x1f\n\x07operand\x18\x01 \x01(\x0b\x32\x0e.cel.expr.Expr\x12\r\n\x05\x66ield\x18\x02 \x01(\t\x12\x11\n\ttest_only\x18\x03 \x01(\x08\x1aV\n\x04\x43\x61ll\x12\x1e\n\x06target\x18\x01 \x01(\x0b\x32\x0e.cel.expr.Expr\x12\x10\n\x08\x66unction\x18\x02 \x01(\t\x12\x1c\n\x04\x61rgs\x18\x03 \x03(\x0b\x32\x0e.cel.expr.Expr\x1aH\n\nCreateList\x12 \n\x08\x65lements\x18\x01 \x03(\x0b\x32\x0e.cel.expr.Expr\x12\x18\n\x10optional_indices\x18\x02 \x03(\x05\x1a\xe9\x01\n\x0c\x43reateStruct\x12\x14\n\x0cmessage_name\x18\x01 \x01(\t\x12\x32\n\x07\x65ntries\x18\x02 \x03(\x0b\x32!.cel.expr.Expr.CreateStruct.Entry\x1a\x8e\x01\n\x05\x45ntry\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x13\n\tfield_key\x18\x02 \x01(\tH\x00\x12!\n\x07map_key\x18\x03 \x01(\x0b\x32\x0e.cel.expr.ExprH\x00\x12\x1d\n\x05value\x18\x04 \x01(\x0b\x32\x0e.cel.expr.Expr\x12\x16\n\x0eoptional_entry\x18\x05 \x01(\x08\x42\n\n\x08key_kind\x1a\xf8\x01\n\rComprehension\x12\x10\n\x08iter_var\x18\x01 \x01(\t\x12\x11\n\titer_var2\x18\x08 \x01(\t\x12\"\n\niter_range\x18\x02 \x01(\x0b\x32\x0e.cel.expr.Expr\x12\x10\n\x08\x61\x63\x63u_var\x18\x03 \x01(\t\x12!\n\taccu_init\x18\x04 \x01(\x0b\x32\x0e.cel.expr.Expr\x12&\n\x0eloop_condition\x18\x05 \x01(\x0b\x32\x0e.cel.expr.Expr\x12!\n\tloop_step\x18\x06 \x01(\x0b\x32\x0e.cel.expr.Expr\x12\x1e\n\x06result\x18\x07 \x01(\x0b\x32\x0e.cel.expr.ExprB\x0b\n\texpr_kind\"\xcd\x02\n\x08\x43onstant\x12\x30\n\nnull_value\x18\x01 \x01(\x0e\x32\x1a.google.protobuf.NullValueH\x00\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x15\n\x0bint64_value\x18\x03 \x01(\x03H\x00\x12\x16\n\x0cuint64_value\x18\x04 \x01(\x04H\x00\x12\x16\n\x0c\x64ouble_value\x18\x05 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x06 \x01(\tH\x00\x12\x15\n\x0b\x62ytes_value\x18\x07 \x01(\x0cH\x00\x12\x37\n\x0e\x64uration_value\x18\x08 \x01(\x0b\x32\x19.google.protobuf.DurationB\x02\x18\x01H\x00\x12\x39\n\x0ftimestamp_value\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x02\x18\x01H\x00\x42\x0f\n\rconstant_kind\"\x9c\x05\n\nSourceInfo\x12\x16\n\x0esyntax_version\x18\x01 \x01(\t\x12\x10\n\x08location\x18\x02 \x01(\t\x12\x14\n\x0cline_offsets\x18\x03 \x03(\x05\x12\x36\n\tpositions\x18\x04 \x03(\x0b\x32#.cel.expr.SourceInfo.PositionsEntry\x12\x39\n\x0bmacro_calls\x18\x05 \x03(\x0b\x32$.cel.expr.SourceInfo.MacroCallsEntry\x12\x32\n\nextensions\x18\x06 \x03(\x0b\x32\x1e.cel.expr.SourceInfo.Extension\x1a\x30\n\x0ePositionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x41\n\x0fMacroCallsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.cel.expr.Expr:\x02\x38\x01\x1a\xb1\x02\n\tExtension\x12\n\n\x02id\x18\x01 \x01(\t\x12\x45\n\x13\x61\x66\x66\x65\x63ted_components\x18\x02 \x03(\x0e\x32(.cel.expr.SourceInfo.Extension.Component\x12\x37\n\x07version\x18\x03 \x01(\x0b\x32&.cel.expr.SourceInfo.Extension.Version\x1a\'\n\x07Version\x12\r\n\x05major\x18\x01 \x01(\x03\x12\r\n\x05minor\x18\x02 \x01(\x03\"o\n\tComponent\x12\x19\n\x15\x43OMPONENT_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPONENT_PARSER\x10\x01\x12\x1a\n\x16\x43OMPONENT_TYPE_CHECKER\x10\x02\x12\x15\n\x11\x43OMPONENT_RUNTIME\x10\x03\x42.\n\x0c\x64\x65v.cel.exprB\x0bSyntaxProtoP\x01Z\x0c\x63\x65l.dev/expr\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.syntax_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\014dev.cel.exprB\013SyntaxProtoP\001Z\014cel.dev/expr\370\001\001' + _globals['_CONSTANT'].fields_by_name['duration_value']._loaded_options = None + _globals['_CONSTANT'].fields_by_name['duration_value']._serialized_options = b'\030\001' + _globals['_CONSTANT'].fields_by_name['timestamp_value']._loaded_options = None + _globals['_CONSTANT'].fields_by_name['timestamp_value']._serialized_options = b'\030\001' + _globals['_SOURCEINFO_POSITIONSENTRY']._loaded_options = None + _globals['_SOURCEINFO_POSITIONSENTRY']._serialized_options = b'8\001' + _globals['_SOURCEINFO_MACROCALLSENTRY']._loaded_options = None + _globals['_SOURCEINFO_MACROCALLSENTRY']._serialized_options = b'8\001' + _globals['_PARSEDEXPR']._serialized_start=130 + _globals['_PARSEDEXPR']._serialized_end=215 + _globals['_EXPR']._serialized_start=218 + _globals['_EXPR']._serialized_end=1332 + _globals['_EXPR_IDENT']._serialized_start=572 + _globals['_EXPR_IDENT']._serialized_end=593 + _globals['_EXPR_SELECT']._serialized_start=595 + _globals['_EXPR_SELECT']._serialized_end=670 + _globals['_EXPR_CALL']._serialized_start=672 + _globals['_EXPR_CALL']._serialized_end=758 + _globals['_EXPR_CREATELIST']._serialized_start=760 + _globals['_EXPR_CREATELIST']._serialized_end=832 + _globals['_EXPR_CREATESTRUCT']._serialized_start=835 + _globals['_EXPR_CREATESTRUCT']._serialized_end=1068 + _globals['_EXPR_CREATESTRUCT_ENTRY']._serialized_start=926 + _globals['_EXPR_CREATESTRUCT_ENTRY']._serialized_end=1068 + _globals['_EXPR_COMPREHENSION']._serialized_start=1071 + _globals['_EXPR_COMPREHENSION']._serialized_end=1319 + _globals['_CONSTANT']._serialized_start=1335 + _globals['_CONSTANT']._serialized_end=1668 + _globals['_SOURCEINFO']._serialized_start=1671 + _globals['_SOURCEINFO']._serialized_end=2339 + _globals['_SOURCEINFO_POSITIONSENTRY']._serialized_start=1916 + _globals['_SOURCEINFO_POSITIONSENTRY']._serialized_end=1964 + _globals['_SOURCEINFO_MACROCALLSENTRY']._serialized_start=1966 + _globals['_SOURCEINFO_MACROCALLSENTRY']._serialized_end=2031 + _globals['_SOURCEINFO_EXTENSION']._serialized_start=2034 + _globals['_SOURCEINFO_EXTENSION']._serialized_end=2339 + _globals['_SOURCEINFO_EXTENSION_VERSION']._serialized_start=2187 + _globals['_SOURCEINFO_EXTENSION_VERSION']._serialized_end=2226 + _globals['_SOURCEINFO_EXTENSION_COMPONENT']._serialized_start=2228 + _globals['_SOURCEINFO_EXTENSION_COMPONENT']._serialized_end=2339 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/cel/expr/value_pb2.py b/py_xds_protos/cel/expr/value_pb2.py new file mode 100644 index 0000000000000..103a29c8a87e5 --- /dev/null +++ b/py_xds_protos/cel/expr/value_pb2.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: cel/expr/value.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'cel/expr/value.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x63\x65l/expr/value.proto\x12\x08\x63\x65l.expr\x1a\x19google/protobuf/any.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x90\x03\n\x05Value\x12\x30\n\nnull_value\x18\x01 \x01(\x0e\x32\x1a.google.protobuf.NullValueH\x00\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x15\n\x0bint64_value\x18\x03 \x01(\x03H\x00\x12\x16\n\x0cuint64_value\x18\x04 \x01(\x04H\x00\x12\x16\n\x0c\x64ouble_value\x18\x05 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x06 \x01(\tH\x00\x12\x15\n\x0b\x62ytes_value\x18\x07 \x01(\x0cH\x00\x12)\n\nenum_value\x18\t \x01(\x0b\x32\x13.cel.expr.EnumValueH\x00\x12,\n\x0cobject_value\x18\n \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x12\'\n\tmap_value\x18\x0b \x01(\x0b\x32\x12.cel.expr.MapValueH\x00\x12)\n\nlist_value\x18\x0c \x01(\x0b\x32\x13.cel.expr.ListValueH\x00\x12\x14\n\ntype_value\x18\x0f \x01(\tH\x00\x42\x06\n\x04kind\"(\n\tEnumValue\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05\",\n\tListValue\x12\x1f\n\x06values\x18\x01 \x03(\x0b\x32\x0f.cel.expr.Value\"|\n\x08MapValue\x12)\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x18.cel.expr.MapValue.Entry\x1a\x45\n\x05\x45ntry\x12\x1c\n\x03key\x18\x01 \x01(\x0b\x32\x0f.cel.expr.Value\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.cel.expr.ValueB-\n\x0c\x64\x65v.cel.exprB\nValueProtoP\x01Z\x0c\x63\x65l.dev/expr\xf8\x01\x01\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'cel.expr.value_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\014dev.cel.exprB\nValueProtoP\001Z\014cel.dev/expr\370\001\001' + _globals['_VALUE']._serialized_start=92 + _globals['_VALUE']._serialized_end=492 + _globals['_ENUMVALUE']._serialized_start=494 + _globals['_ENUMVALUE']._serialized_end=534 + _globals['_LISTVALUE']._serialized_start=536 + _globals['_LISTVALUE']._serialized_end=580 + _globals['_MAPVALUE']._serialized_start=582 + _globals['_MAPVALUE']._serialized_end=706 + _globals['_MAPVALUE_ENTRY']._serialized_start=637 + _globals['_MAPVALUE_ENTRY']._serialized_end=706 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/generated_file_import_test.py b/py_xds_protos/generated_file_import_test.py index a539969ec3cf9..e2a39362685e7 100644 --- a/py_xds_protos/generated_file_import_test.py +++ b/py_xds_protos/generated_file_import_test.py @@ -1,6 +1,18 @@ from bazel.cc_proto_descriptor_library.testdata import test1_pb2 from bazel.cc_proto_descriptor_library.testdata import test_extension_pb2 from bazel.cc_proto_descriptor_library.testdata import test_pb2 +from cel.expr import checked_pb2 +from cel.expr import eval_pb2 +from cel.expr import explain_pb2 +from cel.expr import syntax_pb2 +from cel.expr import value_pb2 +from cel.expr.conformance import conformance_service_pb2 +from cel.expr.conformance import env_config_pb2 +from cel.expr.conformance.proto2 import test_all_types_extensions_pb2 +from cel.expr.conformance.proto2 import test_all_types_pb2 +from cel.expr.conformance.proto3 import test_all_types_pb2 +from cel.expr.conformance.test import simple_pb2 +from cel.expr.conformance.test import suite_pb2 from contrib.envoy.extensions.compression.qatzip.compressor.v3alpha import qatzip_pb2 from contrib.envoy.extensions.compression.qatzstd.compressor.v3alpha import qatzstd_pb2 from contrib.envoy.extensions.config.v3alpha import kv_store_xds_delegate_config_pb2 diff --git a/py_xds_protos/test/v1/simple_pb2.py b/py_xds_protos/test/v1/simple_pb2.py new file mode 100644 index 0000000000000..2f3e94b1de55a --- /dev/null +++ b/py_xds_protos/test/v1/simple_pb2.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: test/v1/simple.proto +# Protobuf Python Version: 6.31.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 31, + 1, + '', + 'test/v1/simple.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.api.expr.v1alpha1 import checked_pb2 as google_dot_api_dot_expr_dot_v1alpha1_dot_checked__pb2 +from google.api.expr.v1alpha1 import eval_pb2 as google_dot_api_dot_expr_dot_v1alpha1_dot_eval__pb2 +from google.api.expr.v1alpha1 import value_pb2 as google_dot_api_dot_expr_dot_v1alpha1_dot_value__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14test/v1/simple.proto\x12\x17google.api.expr.test.v1\x1a&google/api/expr/v1alpha1/checked.proto\x1a#google/api/expr/v1alpha1/eval.proto\x1a$google/api/expr/v1alpha1/value.proto\"p\n\x0eSimpleTestFile\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12;\n\x07section\x18\x03 \x03(\x0b\x32*.google.api.expr.test.v1.SimpleTestSection\"i\n\x11SimpleTestSection\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x31\n\x04test\x18\x03 \x03(\x0b\x32#.google.api.expr.test.v1.SimpleTest\"\xe4\x05\n\nSimpleTest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0c\n\x04\x65xpr\x18\x03 \x01(\t\x12\x16\n\x0e\x64isable_macros\x18\x04 \x01(\x08\x12\x15\n\rdisable_check\x18\x05 \x01(\x08\x12\x12\n\ncheck_only\x18\x0f \x01(\x08\x12\x30\n\x08type_env\x18\x06 \x03(\x0b\x32\x1e.google.api.expr.v1alpha1.Decl\x12\x11\n\tcontainer\x18\r \x01(\t\x12\x43\n\x08\x62indings\x18\x07 \x03(\x0b\x32\x31.google.api.expr.test.v1.SimpleTest.BindingsEntry\x12\x30\n\x05value\x18\x08 \x01(\x0b\x32\x1f.google.api.expr.v1alpha1.ValueH\x00\x12<\n\x0ctyped_result\x18\x10 \x01(\x0b\x32$.google.api.expr.test.v1.TypedResultH\x00\x12\x38\n\neval_error\x18\t \x01(\x0b\x32\".google.api.expr.v1alpha1.ErrorSetH\x00\x12\x43\n\x0f\x61ny_eval_errors\x18\n \x01(\x0b\x32(.google.api.expr.test.v1.ErrorSetMatcherH\x00\x12\x37\n\x07unknown\x18\x0b \x01(\x0b\x32$.google.api.expr.v1alpha1.UnknownSetH\x00\x12\x42\n\x0c\x61ny_unknowns\x18\x0c \x01(\x0b\x32*.google.api.expr.test.v1.UnknownSetMatcherH\x00\x1aT\n\rBindingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.google.api.expr.v1alpha1.ExprValue:\x02\x38\x01\x42\x10\n\x0eresult_matcherJ\x04\x08\x0e\x10\x0f\"t\n\x0bTypedResult\x12/\n\x06result\x18\x01 \x01(\x0b\x32\x1f.google.api.expr.v1alpha1.Value\x12\x34\n\x0c\x64\x65\x64uced_type\x18\x02 \x01(\x0b\x32\x1e.google.api.expr.v1alpha1.Type\"E\n\x0f\x45rrorSetMatcher\x12\x32\n\x06\x65rrors\x18\x01 \x03(\x0b\x32\".google.api.expr.v1alpha1.ErrorSet\"K\n\x11UnknownSetMatcher\x12\x36\n\x08unknowns\x18\x01 \x03(\x0b\x32$.google.api.expr.v1alpha1.UnknownSetBG\n\x1b\x63om.google.api.expr.test.v1B\x0bSimpleProtoZ\x1b\x63\x65l.dev/expr/test/v1/testpbb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'test.v1.simple_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\033com.google.api.expr.test.v1B\013SimpleProtoZ\033cel.dev/expr/test/v1/testpb' + _globals['_SIMPLETEST_BINDINGSENTRY']._loaded_options = None + _globals['_SIMPLETEST_BINDINGSENTRY']._serialized_options = b'8\001' + _globals['_SIMPLETESTFILE']._serialized_start=164 + _globals['_SIMPLETESTFILE']._serialized_end=276 + _globals['_SIMPLETESTSECTION']._serialized_start=278 + _globals['_SIMPLETESTSECTION']._serialized_end=383 + _globals['_SIMPLETEST']._serialized_start=386 + _globals['_SIMPLETEST']._serialized_end=1126 + _globals['_SIMPLETEST_BINDINGSENTRY']._serialized_start=1018 + _globals['_SIMPLETEST_BINDINGSENTRY']._serialized_end=1102 + _globals['_TYPEDRESULT']._serialized_start=1128 + _globals['_TYPEDRESULT']._serialized_end=1244 + _globals['_ERRORSETMATCHER']._serialized_start=1246 + _globals['_ERRORSETMATCHER']._serialized_end=1315 + _globals['_UNKNOWNSETMATCHER']._serialized_start=1317 + _globals['_UNKNOWNSETMATCHER']._serialized_end=1392 +# @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/udpa/annotations/migrate_pb2.py b/py_xds_protos/udpa/annotations/migrate_pb2.py index 3b6f71cc36e79..3172a6e6dee46 100644 --- a/py_xds_protos/udpa/annotations/migrate_pb2.py +++ b/py_xds_protos/udpa/annotations/migrate_pb2.py @@ -25,14 +25,14 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eudpa/annotations/migrate.proto\x12\x10udpa.annotations\x1a google/protobuf/descriptor.proto\"#\n\x11MigrateAnnotation\x12\x0e\n\x06rename\x18\x01 \x01(\t\"A\n\x16\x46ieldMigrateAnnotation\x12\x0e\n\x06rename\x18\x01 \x01(\t\x12\x17\n\x0foneof_promotion\x18\x02 \x01(\t\"0\n\x15\x46ileMigrateAnnotation\x12\x17\n\x0fmove_to_package\x18\x02 \x01(\t:`\n\x0fmessage_migrate\x12\x1f.google.protobuf.MessageOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32#.udpa.annotations.MigrateAnnotation:a\n\rfield_migrate\x12\x1d.google.protobuf.FieldOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32(.udpa.annotations.FieldMigrateAnnotation:Z\n\x0c\x65num_migrate\x12\x1c.google.protobuf.EnumOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32#.udpa.annotations.MigrateAnnotation:e\n\x12\x65num_value_migrate\x12!.google.protobuf.EnumValueOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32#.udpa.annotations.MigrateAnnotation:^\n\x0c\x66ile_migrate\x12\x1c.google.protobuf.FileOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32\'.udpa.annotations.FileMigrateAnnotationB$Z\"github.com/cncf/xds/go/annotationsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eudpa/annotations/migrate.proto\x12\x10udpa.annotations\x1a google/protobuf/descriptor.proto\"#\n\x11MigrateAnnotation\x12\x0e\n\x06rename\x18\x01 \x01(\t\"A\n\x16\x46ieldMigrateAnnotation\x12\x0e\n\x06rename\x18\x01 \x01(\t\x12\x17\n\x0foneof_promotion\x18\x02 \x01(\t\"0\n\x15\x46ileMigrateAnnotation\x12\x17\n\x0fmove_to_package\x18\x02 \x01(\t:`\n\x0fmessage_migrate\x12\x1f.google.protobuf.MessageOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32#.udpa.annotations.MigrateAnnotation:a\n\rfield_migrate\x12\x1d.google.protobuf.FieldOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32(.udpa.annotations.FieldMigrateAnnotation:Z\n\x0c\x65num_migrate\x12\x1c.google.protobuf.EnumOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32#.udpa.annotations.MigrateAnnotation:e\n\x12\x65num_value_migrate\x12!.google.protobuf.EnumValueOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32#.udpa.annotations.MigrateAnnotation:^\n\x0c\x66ile_migrate\x12\x1c.google.protobuf.FileOptions\x18\x8e\xe3\xffQ \x01(\x0b\x32\'.udpa.annotations.FileMigrateAnnotationB)Z\'github.com/cncf/xds/go/udpa/annotationsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'udpa.annotations.migrate_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\"github.com/cncf/xds/go/annotations' + _globals['DESCRIPTOR']._serialized_options = b'Z\'github.com/cncf/xds/go/udpa/annotations' _globals['_MIGRATEANNOTATION']._serialized_start=86 _globals['_MIGRATEANNOTATION']._serialized_end=121 _globals['_FIELDMIGRATEANNOTATION']._serialized_start=123 diff --git a/py_xds_protos/udpa/annotations/security_pb2.py b/py_xds_protos/udpa/annotations/security_pb2.py index 11c7c5db6ac06..cc750883fc069 100644 --- a/py_xds_protos/udpa/annotations/security_pb2.py +++ b/py_xds_protos/udpa/annotations/security_pb2.py @@ -26,14 +26,14 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fudpa/annotations/security.proto\x12\x10udpa.annotations\x1a\x1dudpa/annotations/status.proto\x1a google/protobuf/descriptor.proto\"o\n\x17\x46ieldSecurityAnnotation\x12*\n\"configure_for_untrusted_downstream\x18\x01 \x01(\x08\x12(\n configure_for_untrusted_upstream\x18\x02 \x01(\x08:]\n\x08security\x12\x1d.google.protobuf.FieldOptions\x18\xb1\xf2\xa6\x05 \x01(\x0b\x32).udpa.annotations.FieldSecurityAnnotationB,Z\"github.com/cncf/xds/go/annotations\xba\x80\xc8\xd1\x06\x02\x08\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fudpa/annotations/security.proto\x12\x10udpa.annotations\x1a\x1dudpa/annotations/status.proto\x1a google/protobuf/descriptor.proto\"o\n\x17\x46ieldSecurityAnnotation\x12*\n\"configure_for_untrusted_downstream\x18\x01 \x01(\x08\x12(\n configure_for_untrusted_upstream\x18\x02 \x01(\x08:]\n\x08security\x12\x1d.google.protobuf.FieldOptions\x18\xb1\xf2\xa6\x05 \x01(\x0b\x32).udpa.annotations.FieldSecurityAnnotationB1Z\'github.com/cncf/xds/go/udpa/annotations\xba\x80\xc8\xd1\x06\x02\x08\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'udpa.annotations.security_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\"github.com/cncf/xds/go/annotations\272\200\310\321\006\002\010\001' + _globals['DESCRIPTOR']._serialized_options = b'Z\'github.com/cncf/xds/go/udpa/annotations\272\200\310\321\006\002\010\001' _globals['_FIELDSECURITYANNOTATION']._serialized_start=118 _globals['_FIELDSECURITYANNOTATION']._serialized_end=229 # @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/udpa/annotations/sensitive_pb2.py b/py_xds_protos/udpa/annotations/sensitive_pb2.py index 37944a917b656..78c69aad94a4a 100644 --- a/py_xds_protos/udpa/annotations/sensitive_pb2.py +++ b/py_xds_protos/udpa/annotations/sensitive_pb2.py @@ -25,12 +25,12 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n udpa/annotations/sensitive.proto\x12\x10udpa.annotations\x1a google/protobuf/descriptor.proto:3\n\tsensitive\x12\x1d.google.protobuf.FieldOptions\x18\xf7\xb6\xc1$ \x01(\x08\x42$Z\"github.com/cncf/xds/go/annotationsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n udpa/annotations/sensitive.proto\x12\x10udpa.annotations\x1a google/protobuf/descriptor.proto:3\n\tsensitive\x12\x1d.google.protobuf.FieldOptions\x18\xf7\xb6\xc1$ \x01(\x08\x42)Z\'github.com/cncf/xds/go/udpa/annotationsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'udpa.annotations.sensitive_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\"github.com/cncf/xds/go/annotations' + _globals['DESCRIPTOR']._serialized_options = b'Z\'github.com/cncf/xds/go/udpa/annotations' # @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/udpa/annotations/status_pb2.py b/py_xds_protos/udpa/annotations/status_pb2.py index 7ae4ef8df8e03..3e79983d9ee5d 100644 --- a/py_xds_protos/udpa/annotations/status_pb2.py +++ b/py_xds_protos/udpa/annotations/status_pb2.py @@ -25,14 +25,14 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dudpa/annotations/status.proto\x12\x10udpa.annotations\x1a google/protobuf/descriptor.proto\"t\n\x10StatusAnnotation\x12\x18\n\x10work_in_progress\x18\x01 \x01(\x08\x12\x46\n\x16package_version_status\x18\x02 \x01(\x0e\x32&.udpa.annotations.PackageVersionStatus*]\n\x14PackageVersionStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x46ROZEN\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12 \n\x1cNEXT_MAJOR_VERSION_CANDIDATE\x10\x03:X\n\x0b\x66ile_status\x12\x1c.google.protobuf.FileOptions\x18\x87\x80\x99j \x01(\x0b\x32\".udpa.annotations.StatusAnnotationB$Z\"github.com/cncf/xds/go/annotationsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dudpa/annotations/status.proto\x12\x10udpa.annotations\x1a google/protobuf/descriptor.proto\"t\n\x10StatusAnnotation\x12\x18\n\x10work_in_progress\x18\x01 \x01(\x08\x12\x46\n\x16package_version_status\x18\x02 \x01(\x0e\x32&.udpa.annotations.PackageVersionStatus*]\n\x14PackageVersionStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x46ROZEN\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12 \n\x1cNEXT_MAJOR_VERSION_CANDIDATE\x10\x03:X\n\x0b\x66ile_status\x12\x1c.google.protobuf.FileOptions\x18\x87\x80\x99j \x01(\x0b\x32\".udpa.annotations.StatusAnnotationB)Z\'github.com/cncf/xds/go/udpa/annotationsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'udpa.annotations.status_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\"github.com/cncf/xds/go/annotations' + _globals['DESCRIPTOR']._serialized_options = b'Z\'github.com/cncf/xds/go/udpa/annotations' _globals['_PACKAGEVERSIONSTATUS']._serialized_start=203 _globals['_PACKAGEVERSIONSTATUS']._serialized_end=296 _globals['_STATUSANNOTATION']._serialized_start=85 diff --git a/py_xds_protos/udpa/annotations/versioning_pb2.py b/py_xds_protos/udpa/annotations/versioning_pb2.py index beee30d66ac98..4e1fe763238d4 100644 --- a/py_xds_protos/udpa/annotations/versioning_pb2.py +++ b/py_xds_protos/udpa/annotations/versioning_pb2.py @@ -25,14 +25,14 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!udpa/annotations/versioning.proto\x12\x10udpa.annotations\x1a google/protobuf/descriptor.proto\"5\n\x14VersioningAnnotation\x12\x1d\n\x15previous_message_type\x18\x01 \x01(\t:^\n\nversioning\x12\x1f.google.protobuf.MessageOptions\x18\xd3\x88\xe1\x03 \x01(\x0b\x32&.udpa.annotations.VersioningAnnotationB$Z\"github.com/cncf/xds/go/annotationsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!udpa/annotations/versioning.proto\x12\x10udpa.annotations\x1a google/protobuf/descriptor.proto\"5\n\x14VersioningAnnotation\x12\x1d\n\x15previous_message_type\x18\x01 \x01(\t:^\n\nversioning\x12\x1f.google.protobuf.MessageOptions\x18\xd3\x88\xe1\x03 \x01(\x0b\x32&.udpa.annotations.VersioningAnnotationB)Z\'github.com/cncf/xds/go/udpa/annotationsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'udpa.annotations.versioning_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\"github.com/cncf/xds/go/annotations' + _globals['DESCRIPTOR']._serialized_options = b'Z\'github.com/cncf/xds/go/udpa/annotations' _globals['_VERSIONINGANNOTATION']._serialized_start=89 _globals['_VERSIONINGANNOTATION']._serialized_end=142 # @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/xds/type/matcher/v3/cel_pb2.py b/py_xds_protos/xds/type/matcher/v3/cel_pb2.py index ea897eb24de3c..e62c6107f969d 100644 --- a/py_xds_protos/xds/type/matcher/v3/cel_pb2.py +++ b/py_xds_protos/xds/type/matcher/v3/cel_pb2.py @@ -22,21 +22,20 @@ _sym_db = _symbol_database.Default() -from xds.annotations.v3 import status_pb2 as xds_dot_annotations_dot_v3_dot_status__pb2 from xds.type.v3 import cel_pb2 as xds_dot_type_dot_v3_dot_cel__pb2 from validate import validate_pb2 as validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dxds/type/matcher/v3/cel.proto\x12\x13xds.type.matcher.v3\x1a\x1fxds/annotations/v3/status.proto\x1a\x15xds/type/v3/cel.proto\x1a\x17validate/validate.proto\"[\n\nCelMatcher\x12\x38\n\nexpr_match\x18\x01 \x01(\x0b\x32\x1a.xds.type.v3.CelExpressionB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\n\x1e\x63om.github.xds.type.matcher.v3B\x08\x43\x65lProtoP\x01Z*github.com/cncf/xds/go/xds/type/matcher/v3\xd2\xc6\xa4\xe1\x06\x02\x08\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dxds/type/matcher/v3/cel.proto\x12\x13xds.type.matcher.v3\x1a\x15xds/type/v3/cel.proto\x1a\x17validate/validate.proto\"[\n\nCelMatcher\x12\x38\n\nexpr_match\x18\x01 \x01(\x0b\x32\x1a.xds.type.v3.CelExpressionB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\tBX\n\x1e\x63om.github.xds.type.matcher.v3B\x08\x43\x65lProtoP\x01Z*github.com/cncf/xds/go/xds/type/matcher/v3b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'xds.type.matcher.v3.cel_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\036com.github.xds.type.matcher.v3B\010CelProtoP\001Z*github.com/cncf/xds/go/xds/type/matcher/v3\322\306\244\341\006\002\010\001' + _globals['DESCRIPTOR']._serialized_options = b'\n\036com.github.xds.type.matcher.v3B\010CelProtoP\001Z*github.com/cncf/xds/go/xds/type/matcher/v3' _globals['_CELMATCHER'].fields_by_name['expr_match']._loaded_options = None _globals['_CELMATCHER'].fields_by_name['expr_match']._serialized_options = b'\372B\005\212\001\002\020\001' - _globals['_CELMATCHER']._serialized_start=135 - _globals['_CELMATCHER']._serialized_end=226 + _globals['_CELMATCHER']._serialized_start=102 + _globals['_CELMATCHER']._serialized_end=193 # @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/xds/type/matcher/v3/http_inputs_pb2.py b/py_xds_protos/xds/type/matcher/v3/http_inputs_pb2.py index 478816e6c73ce..a123a0be39755 100644 --- a/py_xds_protos/xds/type/matcher/v3/http_inputs_pb2.py +++ b/py_xds_protos/xds/type/matcher/v3/http_inputs_pb2.py @@ -22,17 +22,16 @@ _sym_db = _symbol_database.Default() -from xds.annotations.v3 import status_pb2 as xds_dot_annotations_dot_v3_dot_status__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%xds/type/matcher/v3/http_inputs.proto\x12\x13xds.type.matcher.v3\x1a\x1fxds/annotations/v3/status.proto\"\x1d\n\x1bHttpAttributesCelMatchInputBg\n\x1e\x63om.github.xds.type.matcher.v3B\x0fHttpInputsProtoP\x01Z*github.com/cncf/xds/go/xds/type/matcher/v3\xd2\xc6\xa4\xe1\x06\x02\x08\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%xds/type/matcher/v3/http_inputs.proto\x12\x13xds.type.matcher.v3\"\x1d\n\x1bHttpAttributesCelMatchInputB_\n\x1e\x63om.github.xds.type.matcher.v3B\x0fHttpInputsProtoP\x01Z*github.com/cncf/xds/go/xds/type/matcher/v3b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'xds.type.matcher.v3.http_inputs_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\036com.github.xds.type.matcher.v3B\017HttpInputsProtoP\001Z*github.com/cncf/xds/go/xds/type/matcher/v3\322\306\244\341\006\002\010\001' - _globals['_HTTPATTRIBUTESCELMATCHINPUT']._serialized_start=95 - _globals['_HTTPATTRIBUTESCELMATCHINPUT']._serialized_end=124 + _globals['DESCRIPTOR']._serialized_options = b'\n\036com.github.xds.type.matcher.v3B\017HttpInputsProtoP\001Z*github.com/cncf/xds/go/xds/type/matcher/v3' + _globals['_HTTPATTRIBUTESCELMATCHINPUT']._serialized_start=62 + _globals['_HTTPATTRIBUTESCELMATCHINPUT']._serialized_end=91 # @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/xds/type/matcher/v3/matcher_pb2.py b/py_xds_protos/xds/type/matcher/v3/matcher_pb2.py index 776ea26d93641..1000f763c8a00 100644 --- a/py_xds_protos/xds/type/matcher/v3/matcher_pb2.py +++ b/py_xds_protos/xds/type/matcher/v3/matcher_pb2.py @@ -22,13 +22,12 @@ _sym_db = _symbol_database.Default() -from xds.annotations.v3 import status_pb2 as xds_dot_annotations_dot_v3_dot_status__pb2 from xds.core.v3 import extension_pb2 as xds_dot_core_dot_v3_dot_extension__pb2 from xds.type.matcher.v3 import string_pb2 as xds_dot_type_dot_matcher_dot_v3_dot_string__pb2 from validate import validate_pb2 as validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!xds/type/matcher/v3/matcher.proto\x12\x13xds.type.matcher.v3\x1a\x1fxds/annotations/v3/status.proto\x1a\x1bxds/core/v3/extension.proto\x1a xds/type/matcher/v3/string.proto\x1a\x17validate/validate.proto\"\x89\x0e\n\x07Matcher\x12@\n\x0cmatcher_list\x18\x01 \x01(\x0b\x32(.xds.type.matcher.v3.Matcher.MatcherListH\x00\x12@\n\x0cmatcher_tree\x18\x02 \x01(\x0b\x32(.xds.type.matcher.v3.Matcher.MatcherTreeH\x00\x12\x39\n\x0bon_no_match\x18\x03 \x01(\x0b\x32$.xds.type.matcher.v3.Matcher.OnMatch\x1a\x80\x01\n\x07OnMatch\x12/\n\x07matcher\x18\x01 \x01(\x0b\x32\x1c.xds.type.matcher.v3.MatcherH\x00\x12\x33\n\x06\x61\x63tion\x18\x02 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigH\x00\x42\x0f\n\x08on_match\x12\x03\xf8\x42\x01\x1a\xb9\x07\n\x0bMatcherList\x12Q\n\x08matchers\x18\x01 \x03(\x0b\x32\x35.xds.type.matcher.v3.Matcher.MatcherList.FieldMatcherB\x08\xfa\x42\x05\x92\x01\x02\x08\x01\x1a\xb2\x05\n\tPredicate\x12^\n\x10single_predicate\x18\x01 \x01(\x0b\x32\x42.xds.type.matcher.v3.Matcher.MatcherList.Predicate.SinglePredicateH\x00\x12V\n\nor_matcher\x18\x02 \x01(\x0b\x32@.xds.type.matcher.v3.Matcher.MatcherList.Predicate.PredicateListH\x00\x12W\n\x0b\x61nd_matcher\x18\x03 \x01(\x0b\x32@.xds.type.matcher.v3.Matcher.MatcherList.Predicate.PredicateListH\x00\x12I\n\x0bnot_matcher\x18\x04 \x01(\x0b\x32\x32.xds.type.matcher.v3.Matcher.MatcherList.PredicateH\x00\x1a\xd3\x01\n\x0fSinglePredicate\x12:\n\x05input\x18\x01 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x39\n\x0bvalue_match\x18\x02 \x01(\x0b\x32\".xds.type.matcher.v3.StringMatcherH\x00\x12\x39\n\x0c\x63ustom_match\x18\x03 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigH\x00\x42\x0e\n\x07matcher\x12\x03\xf8\x42\x01\x1a`\n\rPredicateList\x12O\n\tpredicate\x18\x01 \x03(\x0b\x32\x32.xds.type.matcher.v3.Matcher.MatcherList.PredicateB\x08\xfa\x42\x05\x92\x01\x02\x08\x02\x42\x11\n\nmatch_type\x12\x03\xf8\x42\x01\x1a\xa1\x01\n\x0c\x46ieldMatcher\x12O\n\tpredicate\x18\x01 \x01(\x0b\x32\x32.xds.type.matcher.v3.Matcher.MatcherList.PredicateB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12@\n\x08on_match\x18\x02 \x01(\x0b\x32$.xds.type.matcher.v3.Matcher.OnMatchB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x1a\xe5\x03\n\x0bMatcherTree\x12:\n\x05input\x18\x01 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12L\n\x0f\x65xact_match_map\x18\x02 \x01(\x0b\x32\x31.xds.type.matcher.v3.Matcher.MatcherTree.MatchMapH\x00\x12M\n\x10prefix_match_map\x18\x03 \x01(\x0b\x32\x31.xds.type.matcher.v3.Matcher.MatcherTree.MatchMapH\x00\x12\x39\n\x0c\x63ustom_match\x18\x04 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigH\x00\x1a\xaf\x01\n\x08MatchMap\x12Q\n\x03map\x18\x01 \x03(\x0b\x32:.xds.type.matcher.v3.Matcher.MatcherTree.MatchMap.MapEntryB\x08\xfa\x42\x05\x9a\x01\x02\x08\x01\x1aP\n\x08MapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.xds.type.matcher.v3.Matcher.OnMatch:\x02\x38\x01\x42\x10\n\ttree_type\x12\x03\xf8\x42\x01:\x08\xd2\xc6\xa4\xe1\x06\x02\x08\x01\x42\x0e\n\x0cmatcher_typeB\\\n\x1e\x63om.github.xds.type.matcher.v3B\x0cMatcherProtoP\x01Z*github.com/cncf/xds/go/xds/type/matcher/v3b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!xds/type/matcher/v3/matcher.proto\x12\x13xds.type.matcher.v3\x1a\x1bxds/core/v3/extension.proto\x1a xds/type/matcher/v3/string.proto\x1a\x17validate/validate.proto\"\x96\x0e\n\x07Matcher\x12@\n\x0cmatcher_list\x18\x01 \x01(\x0b\x32(.xds.type.matcher.v3.Matcher.MatcherListH\x00\x12@\n\x0cmatcher_tree\x18\x02 \x01(\x0b\x32(.xds.type.matcher.v3.Matcher.MatcherTreeH\x00\x12\x39\n\x0bon_no_match\x18\x03 \x01(\x0b\x32$.xds.type.matcher.v3.Matcher.OnMatch\x1a\x97\x01\n\x07OnMatch\x12/\n\x07matcher\x18\x01 \x01(\x0b\x32\x1c.xds.type.matcher.v3.MatcherH\x00\x12\x33\n\x06\x61\x63tion\x18\x02 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigH\x00\x12\x15\n\rkeep_matching\x18\x03 \x01(\x08\x42\x0f\n\x08on_match\x12\x03\xf8\x42\x01\x1a\xb9\x07\n\x0bMatcherList\x12Q\n\x08matchers\x18\x01 \x03(\x0b\x32\x35.xds.type.matcher.v3.Matcher.MatcherList.FieldMatcherB\x08\xfa\x42\x05\x92\x01\x02\x08\x01\x1a\xb2\x05\n\tPredicate\x12^\n\x10single_predicate\x18\x01 \x01(\x0b\x32\x42.xds.type.matcher.v3.Matcher.MatcherList.Predicate.SinglePredicateH\x00\x12V\n\nor_matcher\x18\x02 \x01(\x0b\x32@.xds.type.matcher.v3.Matcher.MatcherList.Predicate.PredicateListH\x00\x12W\n\x0b\x61nd_matcher\x18\x03 \x01(\x0b\x32@.xds.type.matcher.v3.Matcher.MatcherList.Predicate.PredicateListH\x00\x12I\n\x0bnot_matcher\x18\x04 \x01(\x0b\x32\x32.xds.type.matcher.v3.Matcher.MatcherList.PredicateH\x00\x1a\xd3\x01\n\x0fSinglePredicate\x12:\n\x05input\x18\x01 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x39\n\x0bvalue_match\x18\x02 \x01(\x0b\x32\".xds.type.matcher.v3.StringMatcherH\x00\x12\x39\n\x0c\x63ustom_match\x18\x03 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigH\x00\x42\x0e\n\x07matcher\x12\x03\xf8\x42\x01\x1a`\n\rPredicateList\x12O\n\tpredicate\x18\x01 \x03(\x0b\x32\x32.xds.type.matcher.v3.Matcher.MatcherList.PredicateB\x08\xfa\x42\x05\x92\x01\x02\x08\x02\x42\x11\n\nmatch_type\x12\x03\xf8\x42\x01\x1a\xa1\x01\n\x0c\x46ieldMatcher\x12O\n\tpredicate\x18\x01 \x01(\x0b\x32\x32.xds.type.matcher.v3.Matcher.MatcherList.PredicateB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12@\n\x08on_match\x18\x02 \x01(\x0b\x32$.xds.type.matcher.v3.Matcher.OnMatchB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x1a\xe5\x03\n\x0bMatcherTree\x12:\n\x05input\x18\x01 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12L\n\x0f\x65xact_match_map\x18\x02 \x01(\x0b\x32\x31.xds.type.matcher.v3.Matcher.MatcherTree.MatchMapH\x00\x12M\n\x10prefix_match_map\x18\x03 \x01(\x0b\x32\x31.xds.type.matcher.v3.Matcher.MatcherTree.MatchMapH\x00\x12\x39\n\x0c\x63ustom_match\x18\x04 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigH\x00\x1a\xaf\x01\n\x08MatchMap\x12Q\n\x03map\x18\x01 \x03(\x0b\x32:.xds.type.matcher.v3.Matcher.MatcherTree.MatchMap.MapEntryB\x08\xfa\x42\x05\x9a\x01\x02\x08\x01\x1aP\n\x08MapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.xds.type.matcher.v3.Matcher.OnMatch:\x02\x38\x01\x42\x10\n\ttree_type\x12\x03\xf8\x42\x01\x42\x0e\n\x0cmatcher_typeB\\\n\x1e\x63om.github.xds.type.matcher.v3B\x0cMatcherProtoP\x01Z*github.com/cncf/xds/go/xds/type/matcher/v3b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -60,26 +59,24 @@ _globals['_MATCHER_MATCHERTREE'].oneofs_by_name['tree_type']._serialized_options = b'\370B\001' _globals['_MATCHER_MATCHERTREE'].fields_by_name['input']._loaded_options = None _globals['_MATCHER_MATCHERTREE'].fields_by_name['input']._serialized_options = b'\372B\005\212\001\002\020\001' - _globals['_MATCHER']._loaded_options = None - _globals['_MATCHER']._serialized_options = b'\322\306\244\341\006\002\010\001' - _globals['_MATCHER']._serialized_start=180 - _globals['_MATCHER']._serialized_end=1981 - _globals['_MATCHER_ONMATCH']._serialized_start=383 - _globals['_MATCHER_ONMATCH']._serialized_end=511 - _globals['_MATCHER_MATCHERLIST']._serialized_start=514 - _globals['_MATCHER_MATCHERLIST']._serialized_end=1467 - _globals['_MATCHER_MATCHERLIST_PREDICATE']._serialized_start=613 - _globals['_MATCHER_MATCHERLIST_PREDICATE']._serialized_end=1303 - _globals['_MATCHER_MATCHERLIST_PREDICATE_SINGLEPREDICATE']._serialized_start=975 - _globals['_MATCHER_MATCHERLIST_PREDICATE_SINGLEPREDICATE']._serialized_end=1186 - _globals['_MATCHER_MATCHERLIST_PREDICATE_PREDICATELIST']._serialized_start=1188 - _globals['_MATCHER_MATCHERLIST_PREDICATE_PREDICATELIST']._serialized_end=1284 - _globals['_MATCHER_MATCHERLIST_FIELDMATCHER']._serialized_start=1306 - _globals['_MATCHER_MATCHERLIST_FIELDMATCHER']._serialized_end=1467 - _globals['_MATCHER_MATCHERTREE']._serialized_start=1470 - _globals['_MATCHER_MATCHERTREE']._serialized_end=1955 - _globals['_MATCHER_MATCHERTREE_MATCHMAP']._serialized_start=1762 - _globals['_MATCHER_MATCHERTREE_MATCHMAP']._serialized_end=1937 - _globals['_MATCHER_MATCHERTREE_MATCHMAP_MAPENTRY']._serialized_start=1857 - _globals['_MATCHER_MATCHERTREE_MATCHMAP_MAPENTRY']._serialized_end=1937 + _globals['_MATCHER']._serialized_start=147 + _globals['_MATCHER']._serialized_end=1961 + _globals['_MATCHER_ONMATCH']._serialized_start=350 + _globals['_MATCHER_ONMATCH']._serialized_end=501 + _globals['_MATCHER_MATCHERLIST']._serialized_start=504 + _globals['_MATCHER_MATCHERLIST']._serialized_end=1457 + _globals['_MATCHER_MATCHERLIST_PREDICATE']._serialized_start=603 + _globals['_MATCHER_MATCHERLIST_PREDICATE']._serialized_end=1293 + _globals['_MATCHER_MATCHERLIST_PREDICATE_SINGLEPREDICATE']._serialized_start=965 + _globals['_MATCHER_MATCHERLIST_PREDICATE_SINGLEPREDICATE']._serialized_end=1176 + _globals['_MATCHER_MATCHERLIST_PREDICATE_PREDICATELIST']._serialized_start=1178 + _globals['_MATCHER_MATCHERLIST_PREDICATE_PREDICATELIST']._serialized_end=1274 + _globals['_MATCHER_MATCHERLIST_FIELDMATCHER']._serialized_start=1296 + _globals['_MATCHER_MATCHERLIST_FIELDMATCHER']._serialized_end=1457 + _globals['_MATCHER_MATCHERTREE']._serialized_start=1460 + _globals['_MATCHER_MATCHERTREE']._serialized_end=1945 + _globals['_MATCHER_MATCHERTREE_MATCHMAP']._serialized_start=1752 + _globals['_MATCHER_MATCHERTREE_MATCHMAP']._serialized_end=1927 + _globals['_MATCHER_MATCHERTREE_MATCHMAP_MAPENTRY']._serialized_start=1847 + _globals['_MATCHER_MATCHERTREE_MATCHMAP_MAPENTRY']._serialized_end=1927 # @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/xds/type/matcher/v3/string_pb2.py b/py_xds_protos/xds/type/matcher/v3/string_pb2.py index 5908912da7117..35fab01bbc3e7 100644 --- a/py_xds_protos/xds/type/matcher/v3/string_pb2.py +++ b/py_xds_protos/xds/type/matcher/v3/string_pb2.py @@ -22,11 +22,12 @@ _sym_db = _symbol_database.Default() +from xds.core.v3 import extension_pb2 as xds_dot_core_dot_v3_dot_extension__pb2 from xds.type.matcher.v3 import regex_pb2 as xds_dot_type_dot_matcher_dot_v3_dot_regex__pb2 from validate import validate_pb2 as validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n xds/type/matcher/v3/string.proto\x12\x13xds.type.matcher.v3\x1a\x1fxds/type/matcher/v3/regex.proto\x1a\x17validate/validate.proto\"\xe1\x01\n\rStringMatcher\x12\x0f\n\x05\x65xact\x18\x01 \x01(\tH\x00\x12\x19\n\x06prefix\x18\x02 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01H\x00\x12\x19\n\x06suffix\x18\x03 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01H\x00\x12\x41\n\nsafe_regex\x18\x05 \x01(\x0b\x32!.xds.type.matcher.v3.RegexMatcherB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01H\x00\x12\x1b\n\x08\x63ontains\x18\x07 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01H\x00\x12\x13\n\x0bignore_case\x18\x06 \x01(\x08\x42\x14\n\rmatch_pattern\x12\x03\xf8\x42\x01\"S\n\x11ListStringMatcher\x12>\n\x08patterns\x18\x01 \x03(\x0b\x32\".xds.type.matcher.v3.StringMatcherB\x08\xfa\x42\x05\x92\x01\x02\x08\x01\x42[\n\x1e\x63om.github.xds.type.matcher.v3B\x0bStringProtoP\x01Z*github.com/cncf/xds/go/xds/type/matcher/v3b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n xds/type/matcher/v3/string.proto\x12\x13xds.type.matcher.v3\x1a\x1bxds/core/v3/extension.proto\x1a\x1fxds/type/matcher/v3/regex.proto\x1a\x17validate/validate.proto\"\x96\x02\n\rStringMatcher\x12\x0f\n\x05\x65xact\x18\x01 \x01(\tH\x00\x12\x19\n\x06prefix\x18\x02 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01H\x00\x12\x19\n\x06suffix\x18\x03 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01H\x00\x12\x41\n\nsafe_regex\x18\x05 \x01(\x0b\x32!.xds.type.matcher.v3.RegexMatcherB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01H\x00\x12\x1b\n\x08\x63ontains\x18\x07 \x01(\tB\x07\xfa\x42\x04r\x02\x10\x01H\x00\x12\x33\n\x06\x63ustom\x18\x08 \x01(\x0b\x32!.xds.core.v3.TypedExtensionConfigH\x00\x12\x13\n\x0bignore_case\x18\x06 \x01(\x08\x42\x14\n\rmatch_pattern\x12\x03\xf8\x42\x01\"S\n\x11ListStringMatcher\x12>\n\x08patterns\x18\x01 \x03(\x0b\x32\".xds.type.matcher.v3.StringMatcherB\x08\xfa\x42\x05\x92\x01\x02\x08\x01\x42[\n\x1e\x63om.github.xds.type.matcher.v3B\x0bStringProtoP\x01Z*github.com/cncf/xds/go/xds/type/matcher/v3b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -46,8 +47,8 @@ _globals['_STRINGMATCHER'].fields_by_name['contains']._serialized_options = b'\372B\004r\002\020\001' _globals['_LISTSTRINGMATCHER'].fields_by_name['patterns']._loaded_options = None _globals['_LISTSTRINGMATCHER'].fields_by_name['patterns']._serialized_options = b'\372B\005\222\001\002\010\001' - _globals['_STRINGMATCHER']._serialized_start=116 - _globals['_STRINGMATCHER']._serialized_end=341 - _globals['_LISTSTRINGMATCHER']._serialized_start=343 - _globals['_LISTSTRINGMATCHER']._serialized_end=426 + _globals['_STRINGMATCHER']._serialized_start=145 + _globals['_STRINGMATCHER']._serialized_end=423 + _globals['_LISTSTRINGMATCHER']._serialized_start=425 + _globals['_LISTSTRINGMATCHER']._serialized_end=508 # @@protoc_insertion_point(module_scope) diff --git a/py_xds_protos/xds/type/v3/cel_pb2.py b/py_xds_protos/xds/type/v3/cel_pb2.py index 082d1e5ec1013..b027ed1fee602 100644 --- a/py_xds_protos/xds/type/v3/cel_pb2.py +++ b/py_xds_protos/xds/type/v3/cel_pb2.py @@ -24,12 +24,14 @@ from google.api.expr.v1alpha1 import checked_pb2 as google_dot_api_dot_expr_dot_v1alpha1_dot_checked__pb2 from google.api.expr.v1alpha1 import syntax_pb2 as google_dot_api_dot_expr_dot_v1alpha1_dot_syntax__pb2 +from cel.expr import checked_pb2 as cel_dot_expr_dot_checked__pb2 +from cel.expr import syntax_pb2 as cel_dot_expr_dot_syntax__pb2 from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 from xds.annotations.v3 import status_pb2 as xds_dot_annotations_dot_v3_dot_status__pb2 from validate import validate_pb2 as validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15xds/type/v3/cel.proto\x12\x0bxds.type.v3\x1a&google/api/expr/v1alpha1/checked.proto\x1a%google/api/expr/v1alpha1/syntax.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1fxds/annotations/v3/status.proto\x1a\x17validate/validate.proto\"\xa2\x01\n\rCelExpression\x12;\n\x0bparsed_expr\x18\x01 \x01(\x0b\x32$.google.api.expr.v1alpha1.ParsedExprH\x00\x12=\n\x0c\x63hecked_expr\x18\x02 \x01(\x0b\x32%.google.api.expr.v1alpha1.CheckedExprH\x00\x42\x15\n\x0e\x65xpr_specifier\x12\x03\xf8\x42\x01\"\x83\x01\n\x10\x43\x65lExtractString\x12:\n\x0c\x65xpr_extract\x18\x01 \x01(\x0b\x32\x1a.xds.type.v3.CelExpressionB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x33\n\rdefault_value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueBP\n\x16\x63om.github.xds.type.v3B\x08\x43\x65lProtoP\x01Z\"github.com/cncf/xds/go/xds/type/v3\xd2\xc6\xa4\xe1\x06\x02\x08\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15xds/type/v3/cel.proto\x12\x0bxds.type.v3\x1a&google/api/expr/v1alpha1/checked.proto\x1a%google/api/expr/v1alpha1/syntax.proto\x1a\x16\x63\x65l/expr/checked.proto\x1a\x15\x63\x65l/expr/syntax.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1fxds/annotations/v3/status.proto\x1a\x17validate/validate.proto\"\x9e\x02\n\rCelExpression\x12?\n\x0bparsed_expr\x18\x01 \x01(\x0b\x32$.google.api.expr.v1alpha1.ParsedExprB\x02\x18\x01H\x00\x12\x41\n\x0c\x63hecked_expr\x18\x02 \x01(\x0b\x32%.google.api.expr.v1alpha1.CheckedExprB\x02\x18\x01H\x00\x12-\n\x0f\x63\x65l_expr_parsed\x18\x03 \x01(\x0b\x32\x14.cel.expr.ParsedExpr\x12/\n\x10\x63\x65l_expr_checked\x18\x04 \x01(\x0b\x32\x15.cel.expr.CheckedExpr\x12\x17\n\x0f\x63\x65l_expr_string\x18\x05 \x01(\tB\x10\n\x0e\x65xpr_specifier\"\x83\x01\n\x10\x43\x65lExtractString\x12:\n\x0c\x65xpr_extract\x18\x01 \x01(\x0b\x32\x1a.xds.type.v3.CelExpressionB\x08\xfa\x42\x05\x8a\x01\x02\x10\x01\x12\x33\n\rdefault_value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueBP\n\x16\x63om.github.xds.type.v3B\x08\x43\x65lProtoP\x01Z\"github.com/cncf/xds/go/xds/type/v3\xd2\xc6\xa4\xe1\x06\x02\x08\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -37,12 +39,14 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\n\026com.github.xds.type.v3B\010CelProtoP\001Z\"github.com/cncf/xds/go/xds/type/v3\322\306\244\341\006\002\010\001' - _globals['_CELEXPRESSION'].oneofs_by_name['expr_specifier']._loaded_options = None - _globals['_CELEXPRESSION'].oneofs_by_name['expr_specifier']._serialized_options = b'\370B\001' + _globals['_CELEXPRESSION'].fields_by_name['parsed_expr']._loaded_options = None + _globals['_CELEXPRESSION'].fields_by_name['parsed_expr']._serialized_options = b'\030\001' + _globals['_CELEXPRESSION'].fields_by_name['checked_expr']._loaded_options = None + _globals['_CELEXPRESSION'].fields_by_name['checked_expr']._serialized_options = b'\030\001' _globals['_CELEXTRACTSTRING'].fields_by_name['expr_extract']._loaded_options = None _globals['_CELEXTRACTSTRING'].fields_by_name['expr_extract']._serialized_options = b'\372B\005\212\001\002\020\001' - _globals['_CELEXPRESSION']._serialized_start=208 - _globals['_CELEXPRESSION']._serialized_end=370 - _globals['_CELEXTRACTSTRING']._serialized_start=373 - _globals['_CELEXTRACTSTRING']._serialized_end=504 + _globals['_CELEXPRESSION']._serialized_start=255 + _globals['_CELEXPRESSION']._serialized_end=541 + _globals['_CELEXTRACTSTRING']._serialized_start=544 + _globals['_CELEXTRACTSTRING']._serialized_end=675 # @@protoc_insertion_point(module_scope) diff --git a/src/core/ext/upb-gen/cel/expr/checked.upb.h b/src/core/ext/upb-gen/cel/expr/checked.upb.h new file mode 100644 index 0000000000000..eeecd952f16f2 --- /dev/null +++ b/src/core/ext/upb-gen/cel/expr/checked.upb.h @@ -0,0 +1,1875 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/checked.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + +#ifndef CEL_EXPR_CHECKED_PROTO_UPB_H__UPB_H_ +#define CEL_EXPR_CHECKED_PROTO_UPB_H__UPB_H_ + +#include "upb/generated_code_support.h" + +#include "cel/expr/checked.upb_minitable.h" + +#include "cel/expr/syntax.upb_minitable.h" +#include "google/protobuf/empty.upb_minitable.h" +#include "google/protobuf/struct.upb_minitable.h" + +// Must be last. +#include "upb/port/def.inc" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct cel_expr_CheckedExpr { upb_Message UPB_PRIVATE(base); } cel_expr_CheckedExpr; +typedef struct cel_expr_Type { upb_Message UPB_PRIVATE(base); } cel_expr_Type; +typedef struct cel_expr_Type_ListType { upb_Message UPB_PRIVATE(base); } cel_expr_Type_ListType; +typedef struct cel_expr_Type_MapType { upb_Message UPB_PRIVATE(base); } cel_expr_Type_MapType; +typedef struct cel_expr_Type_FunctionType { upb_Message UPB_PRIVATE(base); } cel_expr_Type_FunctionType; +typedef struct cel_expr_Type_AbstractType { upb_Message UPB_PRIVATE(base); } cel_expr_Type_AbstractType; +typedef struct cel_expr_Decl { upb_Message UPB_PRIVATE(base); } cel_expr_Decl; +typedef struct cel_expr_Decl_IdentDecl { upb_Message UPB_PRIVATE(base); } cel_expr_Decl_IdentDecl; +typedef struct cel_expr_Decl_FunctionDecl { upb_Message UPB_PRIVATE(base); } cel_expr_Decl_FunctionDecl; +typedef struct cel_expr_Decl_FunctionDecl_Overload { upb_Message UPB_PRIVATE(base); } cel_expr_Decl_FunctionDecl_Overload; +typedef struct cel_expr_Reference { upb_Message UPB_PRIVATE(base); } cel_expr_Reference; +struct cel_expr_Constant; +struct cel_expr_Expr; +struct cel_expr_SourceInfo; +struct google_protobuf_Empty; + +typedef enum { + cel_expr_Type_PRIMITIVE_TYPE_UNSPECIFIED = 0, + cel_expr_Type_BOOL = 1, + cel_expr_Type_INT64 = 2, + cel_expr_Type_UINT64 = 3, + cel_expr_Type_DOUBLE = 4, + cel_expr_Type_STRING = 5, + cel_expr_Type_BYTES = 6 +} cel_expr_Type_PrimitiveType; + +typedef enum { + cel_expr_Type_WELL_KNOWN_TYPE_UNSPECIFIED = 0, + cel_expr_Type_ANY = 1, + cel_expr_Type_TIMESTAMP = 2, + cel_expr_Type_DURATION = 3 +} cel_expr_Type_WellKnownType; + + + +/* cel.expr.CheckedExpr */ + +UPB_INLINE cel_expr_CheckedExpr* cel_expr_CheckedExpr_new(upb_Arena* arena) { + return (cel_expr_CheckedExpr*)_upb_Message_New(&cel__expr__CheckedExpr_msg_init, arena); +} +UPB_INLINE cel_expr_CheckedExpr* cel_expr_CheckedExpr_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_CheckedExpr* ret = cel_expr_CheckedExpr_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__CheckedExpr_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_CheckedExpr* cel_expr_CheckedExpr_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_CheckedExpr* ret = cel_expr_CheckedExpr_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__CheckedExpr_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_CheckedExpr_serialize(const cel_expr_CheckedExpr* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__CheckedExpr_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_CheckedExpr_serialize_ex(const cel_expr_CheckedExpr* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__CheckedExpr_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_CheckedExpr_clear_reference_map(cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE size_t cel_expr_CheckedExpr_reference_map_size(const cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + return map ? _upb_Map_Size(map) : 0; +} +UPB_INLINE bool cel_expr_CheckedExpr_reference_map_get(const cel_expr_CheckedExpr* msg, int64_t key, cel_expr_Reference** val) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__ReferenceMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Reference_msg_init); + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + return _upb_Map_Get(map, &key, sizeof(key), val, sizeof(*val)); +} +UPB_INLINE bool cel_expr_CheckedExpr_reference_map_next(const cel_expr_CheckedExpr* msg, int64_t* key, const cel_expr_Reference** val, + size_t* iter) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__ReferenceMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Reference_msg_init); + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + upb_MessageValue k; + upb_MessageValue v; + if (!upb_Map_Next(map, &k, &v, iter)) return false; + memcpy(key, &k, sizeof(*key)); + memcpy(val, &v, sizeof(*val)); + return true; +} +UPB_INLINE const upb_Map* _cel_expr_CheckedExpr_reference_map_upb_map(cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__ReferenceMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Reference_msg_init); + return upb_Message_GetMap(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_Map* _cel_expr_CheckedExpr_reference_map_mutable_upb_map(cel_expr_CheckedExpr* msg, upb_Arena* a) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__ReferenceMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Reference_msg_init); + return _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), &field, sizeof(int64_t), sizeof(cel_expr_Reference*), a); +} +UPB_INLINE void cel_expr_CheckedExpr_clear_type_map(cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE size_t cel_expr_CheckedExpr_type_map_size(const cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + return map ? _upb_Map_Size(map) : 0; +} +UPB_INLINE bool cel_expr_CheckedExpr_type_map_get(const cel_expr_CheckedExpr* msg, int64_t key, cel_expr_Type** val) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__TypeMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + return _upb_Map_Get(map, &key, sizeof(key), val, sizeof(*val)); +} +UPB_INLINE bool cel_expr_CheckedExpr_type_map_next(const cel_expr_CheckedExpr* msg, int64_t* key, const cel_expr_Type** val, + size_t* iter) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__TypeMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + upb_MessageValue k; + upb_MessageValue v; + if (!upb_Map_Next(map, &k, &v, iter)) return false; + memcpy(key, &k, sizeof(*key)); + memcpy(val, &v, sizeof(*val)); + return true; +} +UPB_INLINE const upb_Map* _cel_expr_CheckedExpr_type_map_upb_map(cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__TypeMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + return upb_Message_GetMap(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_Map* _cel_expr_CheckedExpr_type_map_mutable_upb_map(cel_expr_CheckedExpr* msg, upb_Arena* a) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__TypeMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + return _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), &field, sizeof(int64_t), sizeof(cel_expr_Type*), a); +} +UPB_INLINE void cel_expr_CheckedExpr_clear_expr(cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(20, 48), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct cel_expr_Expr* cel_expr_CheckedExpr_expr(const cel_expr_CheckedExpr* msg) { + const struct cel_expr_Expr* default_val = NULL; + const struct cel_expr_Expr* ret; + const upb_MiniTableField field = {4, UPB_SIZE(20, 48), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_CheckedExpr_has_expr(const cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(20, 48), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_CheckedExpr_clear_source_info(cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(24, 56), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct cel_expr_SourceInfo* cel_expr_CheckedExpr_source_info(const cel_expr_CheckedExpr* msg) { + const struct cel_expr_SourceInfo* default_val = NULL; + const struct cel_expr_SourceInfo* ret; + const upb_MiniTableField field = {5, UPB_SIZE(24, 56), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_CheckedExpr_has_source_info(const cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(24, 56), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_CheckedExpr_clear_expr_version(cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {6, UPB_SIZE(28, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_CheckedExpr_expr_version(const cel_expr_CheckedExpr* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {6, UPB_SIZE(28, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} + +UPB_INLINE void cel_expr_CheckedExpr_reference_map_clear(cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return; + _upb_Map_Clear(map); +} +UPB_INLINE bool cel_expr_CheckedExpr_reference_map_set(cel_expr_CheckedExpr* msg, int64_t key, cel_expr_Reference* val, upb_Arena* a) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__ReferenceMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Reference_msg_init); + upb_Map* map = _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), + &field, sizeof(key), sizeof(val), a); + return _upb_Map_Insert(map, &key, sizeof(key), &val, sizeof(val), a) != + kUpb_MapInsertStatus_OutOfMemory; +} +UPB_INLINE bool cel_expr_CheckedExpr_reference_map_delete(cel_expr_CheckedExpr* msg, int64_t key) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + return _upb_Map_Delete(map, &key, sizeof(key), NULL); +} +UPB_INLINE void cel_expr_CheckedExpr_type_map_clear(cel_expr_CheckedExpr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return; + _upb_Map_Clear(map); +} +UPB_INLINE bool cel_expr_CheckedExpr_type_map_set(cel_expr_CheckedExpr* msg, int64_t key, cel_expr_Type* val, upb_Arena* a) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr__TypeMapEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Map* map = _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), + &field, sizeof(key), sizeof(val), a); + return _upb_Map_Insert(map, &key, sizeof(key), &val, sizeof(val), a) != + kUpb_MapInsertStatus_OutOfMemory; +} +UPB_INLINE bool cel_expr_CheckedExpr_type_map_delete(cel_expr_CheckedExpr* msg, int64_t key) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + return _upb_Map_Delete(map, &key, sizeof(key), NULL); +} +UPB_INLINE void cel_expr_CheckedExpr_set_expr(cel_expr_CheckedExpr *msg, struct cel_expr_Expr* value) { + const upb_MiniTableField field = {4, UPB_SIZE(20, 48), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_CheckedExpr_mutable_expr(cel_expr_CheckedExpr* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_CheckedExpr_expr(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_CheckedExpr_set_expr(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_CheckedExpr_set_source_info(cel_expr_CheckedExpr *msg, struct cel_expr_SourceInfo* value) { + const upb_MiniTableField field = {5, UPB_SIZE(24, 56), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_SourceInfo* cel_expr_CheckedExpr_mutable_source_info(cel_expr_CheckedExpr* msg, upb_Arena* arena) { + struct cel_expr_SourceInfo* sub = (struct cel_expr_SourceInfo*)cel_expr_CheckedExpr_source_info(msg); + if (sub == NULL) { + sub = (struct cel_expr_SourceInfo*)_upb_Message_New(&cel__expr__SourceInfo_msg_init, arena); + if (sub) cel_expr_CheckedExpr_set_source_info(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_CheckedExpr_set_expr_version(cel_expr_CheckedExpr *msg, upb_StringView value) { + const upb_MiniTableField field = {6, UPB_SIZE(28, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} + +/* cel.expr.Type */ + +UPB_INLINE cel_expr_Type* cel_expr_Type_new(upb_Arena* arena) { + return (cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); +} +UPB_INLINE cel_expr_Type* cel_expr_Type_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Type* ret = cel_expr_Type_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Type* cel_expr_Type_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Type* ret = cel_expr_Type_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Type_serialize(const cel_expr_Type* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Type_serialize_ex(const cel_expr_Type* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type_msg_init, options, arena, &ptr, len); + return ptr; +} +typedef enum { + cel_expr_Type_type_kind_dyn = 1, + cel_expr_Type_type_kind_null = 2, + cel_expr_Type_type_kind_primitive = 3, + cel_expr_Type_type_kind_wrapper = 4, + cel_expr_Type_type_kind_well_known = 5, + cel_expr_Type_type_kind_list_type = 6, + cel_expr_Type_type_kind_map_type = 7, + cel_expr_Type_type_kind_function = 8, + cel_expr_Type_type_kind_message_type = 9, + cel_expr_Type_type_kind_type_param = 10, + cel_expr_Type_type_kind_type = 11, + cel_expr_Type_type_kind_error = 12, + cel_expr_Type_type_kind_abstract_type = 14, + cel_expr_Type_type_kind_NOT_SET = 0 +} cel_expr_Type_type_kind_oneofcases; +UPB_INLINE cel_expr_Type_type_kind_oneofcases cel_expr_Type_type_kind_case(const cel_expr_Type* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Type_type_kind_oneofcases)upb_Message_WhichOneofFieldNumber( + UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_type_kind(cel_expr_Type* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearOneof(UPB_UPCAST(msg), &cel__expr__Type_msg_init, &field); +} +UPB_INLINE void cel_expr_Type_clear_dyn(cel_expr_Type* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct google_protobuf_Empty* cel_expr_Type_dyn(const cel_expr_Type* msg) { + const struct google_protobuf_Empty* default_val = NULL; + const struct google_protobuf_Empty* ret; + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__protobuf__Empty_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_dyn(const cel_expr_Type* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_null(cel_expr_Type* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int32_t cel_expr_Type_null(const cel_expr_Type* msg) { + int32_t default_val = 0; + int32_t ret; + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_null(const cel_expr_Type* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_primitive(cel_expr_Type* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int32_t cel_expr_Type_primitive(const cel_expr_Type* msg) { + int32_t default_val = 0; + int32_t ret; + const upb_MiniTableField field = {3, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_primitive(const cel_expr_Type* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_wrapper(cel_expr_Type* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int32_t cel_expr_Type_wrapper(const cel_expr_Type* msg) { + int32_t default_val = 0; + int32_t ret; + const upb_MiniTableField field = {4, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_wrapper(const cel_expr_Type* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_well_known(cel_expr_Type* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int32_t cel_expr_Type_well_known(const cel_expr_Type* msg) { + int32_t default_val = 0; + int32_t ret; + const upb_MiniTableField field = {5, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_well_known(const cel_expr_Type* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_list_type(cel_expr_Type* msg) { + const upb_MiniTableField field = {6, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type_ListType* cel_expr_Type_list_type(const cel_expr_Type* msg) { + const cel_expr_Type_ListType* default_val = NULL; + const cel_expr_Type_ListType* ret; + const upb_MiniTableField field = {6, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type__ListType_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_list_type(const cel_expr_Type* msg) { + const upb_MiniTableField field = {6, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_map_type(cel_expr_Type* msg) { + const upb_MiniTableField field = {7, UPB_SIZE(12, 16), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type_MapType* cel_expr_Type_map_type(const cel_expr_Type* msg) { + const cel_expr_Type_MapType* default_val = NULL; + const cel_expr_Type_MapType* ret; + const upb_MiniTableField field = {7, UPB_SIZE(12, 16), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type__MapType_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_map_type(const cel_expr_Type* msg) { + const upb_MiniTableField field = {7, UPB_SIZE(12, 16), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_function(cel_expr_Type* msg) { + const upb_MiniTableField field = {8, UPB_SIZE(12, 16), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type_FunctionType* cel_expr_Type_function(const cel_expr_Type* msg) { + const cel_expr_Type_FunctionType* default_val = NULL; + const cel_expr_Type_FunctionType* ret; + const upb_MiniTableField field = {8, UPB_SIZE(12, 16), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type__FunctionType_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_function(const cel_expr_Type* msg) { + const upb_MiniTableField field = {8, UPB_SIZE(12, 16), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_message_type(cel_expr_Type* msg) { + const upb_MiniTableField field = {9, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Type_message_type(const cel_expr_Type* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {9, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_message_type(const cel_expr_Type* msg) { + const upb_MiniTableField field = {9, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_type_param(cel_expr_Type* msg) { + const upb_MiniTableField field = {10, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Type_type_param(const cel_expr_Type* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {10, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_type_param(const cel_expr_Type* msg) { + const upb_MiniTableField field = {10, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_type(cel_expr_Type* msg) { + const upb_MiniTableField field = {11, UPB_SIZE(12, 16), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* cel_expr_Type_type(const cel_expr_Type* msg) { + const cel_expr_Type* default_val = NULL; + const cel_expr_Type* ret; + const upb_MiniTableField field = {11, UPB_SIZE(12, 16), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_type(const cel_expr_Type* msg) { + const upb_MiniTableField field = {11, UPB_SIZE(12, 16), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_error(cel_expr_Type* msg) { + const upb_MiniTableField field = {12, UPB_SIZE(12, 16), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct google_protobuf_Empty* cel_expr_Type_error(const cel_expr_Type* msg) { + const struct google_protobuf_Empty* default_val = NULL; + const struct google_protobuf_Empty* ret; + const upb_MiniTableField field = {12, UPB_SIZE(12, 16), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__protobuf__Empty_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_error(const cel_expr_Type* msg) { + const upb_MiniTableField field = {12, UPB_SIZE(12, 16), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_clear_abstract_type(cel_expr_Type* msg) { + const upb_MiniTableField field = {14, UPB_SIZE(12, 16), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type_AbstractType* cel_expr_Type_abstract_type(const cel_expr_Type* msg) { + const cel_expr_Type_AbstractType* default_val = NULL; + const cel_expr_Type_AbstractType* ret; + const upb_MiniTableField field = {14, UPB_SIZE(12, 16), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type__AbstractType_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_has_abstract_type(const cel_expr_Type* msg) { + const upb_MiniTableField field = {14, UPB_SIZE(12, 16), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} + +UPB_INLINE void cel_expr_Type_set_dyn(cel_expr_Type *msg, struct google_protobuf_Empty* value) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__protobuf__Empty_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct google_protobuf_Empty* cel_expr_Type_mutable_dyn(cel_expr_Type* msg, upb_Arena* arena) { + struct google_protobuf_Empty* sub = (struct google_protobuf_Empty*)cel_expr_Type_dyn(msg); + if (sub == NULL) { + sub = (struct google_protobuf_Empty*)_upb_Message_New(&google__protobuf__Empty_msg_init, arena); + if (sub) cel_expr_Type_set_dyn(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Type_set_null(cel_expr_Type *msg, int32_t value) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Type_set_primitive(cel_expr_Type *msg, int32_t value) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Type_set_wrapper(cel_expr_Type *msg, int32_t value) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Type_set_well_known(cel_expr_Type *msg, int32_t value) { + const upb_MiniTableField field = {5, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Type_set_list_type(cel_expr_Type *msg, cel_expr_Type_ListType* value) { + const upb_MiniTableField field = {6, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type__ListType_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type_ListType* cel_expr_Type_mutable_list_type(cel_expr_Type* msg, upb_Arena* arena) { + struct cel_expr_Type_ListType* sub = (struct cel_expr_Type_ListType*)cel_expr_Type_list_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type_ListType*)_upb_Message_New(&cel__expr__Type__ListType_msg_init, arena); + if (sub) cel_expr_Type_set_list_type(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Type_set_map_type(cel_expr_Type *msg, cel_expr_Type_MapType* value) { + const upb_MiniTableField field = {7, UPB_SIZE(12, 16), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type__MapType_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type_MapType* cel_expr_Type_mutable_map_type(cel_expr_Type* msg, upb_Arena* arena) { + struct cel_expr_Type_MapType* sub = (struct cel_expr_Type_MapType*)cel_expr_Type_map_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type_MapType*)_upb_Message_New(&cel__expr__Type__MapType_msg_init, arena); + if (sub) cel_expr_Type_set_map_type(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Type_set_function(cel_expr_Type *msg, cel_expr_Type_FunctionType* value) { + const upb_MiniTableField field = {8, UPB_SIZE(12, 16), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type__FunctionType_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type_FunctionType* cel_expr_Type_mutable_function(cel_expr_Type* msg, upb_Arena* arena) { + struct cel_expr_Type_FunctionType* sub = (struct cel_expr_Type_FunctionType*)cel_expr_Type_function(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type_FunctionType*)_upb_Message_New(&cel__expr__Type__FunctionType_msg_init, arena); + if (sub) cel_expr_Type_set_function(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Type_set_message_type(cel_expr_Type *msg, upb_StringView value) { + const upb_MiniTableField field = {9, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Type_set_type_param(cel_expr_Type *msg, upb_StringView value) { + const upb_MiniTableField field = {10, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Type_set_type(cel_expr_Type *msg, cel_expr_Type* value) { + const upb_MiniTableField field = {11, UPB_SIZE(12, 16), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Type_mutable_type(cel_expr_Type* msg, upb_Arena* arena) { + struct cel_expr_Type* sub = (struct cel_expr_Type*)cel_expr_Type_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (sub) cel_expr_Type_set_type(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Type_set_error(cel_expr_Type *msg, struct google_protobuf_Empty* value) { + const upb_MiniTableField field = {12, UPB_SIZE(12, 16), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__protobuf__Empty_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct google_protobuf_Empty* cel_expr_Type_mutable_error(cel_expr_Type* msg, upb_Arena* arena) { + struct google_protobuf_Empty* sub = (struct google_protobuf_Empty*)cel_expr_Type_error(msg); + if (sub == NULL) { + sub = (struct google_protobuf_Empty*)_upb_Message_New(&google__protobuf__Empty_msg_init, arena); + if (sub) cel_expr_Type_set_error(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Type_set_abstract_type(cel_expr_Type *msg, cel_expr_Type_AbstractType* value) { + const upb_MiniTableField field = {14, UPB_SIZE(12, 16), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type__AbstractType_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type_AbstractType* cel_expr_Type_mutable_abstract_type(cel_expr_Type* msg, upb_Arena* arena) { + struct cel_expr_Type_AbstractType* sub = (struct cel_expr_Type_AbstractType*)cel_expr_Type_abstract_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type_AbstractType*)_upb_Message_New(&cel__expr__Type__AbstractType_msg_init, arena); + if (sub) cel_expr_Type_set_abstract_type(msg, sub); + } + return sub; +} + +/* cel.expr.Type.ListType */ + +UPB_INLINE cel_expr_Type_ListType* cel_expr_Type_ListType_new(upb_Arena* arena) { + return (cel_expr_Type_ListType*)_upb_Message_New(&cel__expr__Type__ListType_msg_init, arena); +} +UPB_INLINE cel_expr_Type_ListType* cel_expr_Type_ListType_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Type_ListType* ret = cel_expr_Type_ListType_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type__ListType_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Type_ListType* cel_expr_Type_ListType_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Type_ListType* ret = cel_expr_Type_ListType_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type__ListType_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Type_ListType_serialize(const cel_expr_Type_ListType* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type__ListType_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Type_ListType_serialize_ex(const cel_expr_Type_ListType* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type__ListType_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Type_ListType_clear_elem_type(cel_expr_Type_ListType* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* cel_expr_Type_ListType_elem_type(const cel_expr_Type_ListType* msg) { + const cel_expr_Type* default_val = NULL; + const cel_expr_Type* ret; + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_ListType_has_elem_type(const cel_expr_Type_ListType* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} + +UPB_INLINE void cel_expr_Type_ListType_set_elem_type(cel_expr_Type_ListType *msg, cel_expr_Type* value) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Type_ListType_mutable_elem_type(cel_expr_Type_ListType* msg, upb_Arena* arena) { + struct cel_expr_Type* sub = (struct cel_expr_Type*)cel_expr_Type_ListType_elem_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (sub) cel_expr_Type_ListType_set_elem_type(msg, sub); + } + return sub; +} + +/* cel.expr.Type.MapType */ + +UPB_INLINE cel_expr_Type_MapType* cel_expr_Type_MapType_new(upb_Arena* arena) { + return (cel_expr_Type_MapType*)_upb_Message_New(&cel__expr__Type__MapType_msg_init, arena); +} +UPB_INLINE cel_expr_Type_MapType* cel_expr_Type_MapType_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Type_MapType* ret = cel_expr_Type_MapType_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type__MapType_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Type_MapType* cel_expr_Type_MapType_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Type_MapType* ret = cel_expr_Type_MapType_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type__MapType_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Type_MapType_serialize(const cel_expr_Type_MapType* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type__MapType_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Type_MapType_serialize_ex(const cel_expr_Type_MapType* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type__MapType_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Type_MapType_clear_key_type(cel_expr_Type_MapType* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* cel_expr_Type_MapType_key_type(const cel_expr_Type_MapType* msg) { + const cel_expr_Type* default_val = NULL; + const cel_expr_Type* ret; + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_MapType_has_key_type(const cel_expr_Type_MapType* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_MapType_clear_value_type(cel_expr_Type_MapType* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* cel_expr_Type_MapType_value_type(const cel_expr_Type_MapType* msg) { + const cel_expr_Type* default_val = NULL; + const cel_expr_Type* ret; + const upb_MiniTableField field = {2, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_MapType_has_value_type(const cel_expr_Type_MapType* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} + +UPB_INLINE void cel_expr_Type_MapType_set_key_type(cel_expr_Type_MapType *msg, cel_expr_Type* value) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Type_MapType_mutable_key_type(cel_expr_Type_MapType* msg, upb_Arena* arena) { + struct cel_expr_Type* sub = (struct cel_expr_Type*)cel_expr_Type_MapType_key_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (sub) cel_expr_Type_MapType_set_key_type(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Type_MapType_set_value_type(cel_expr_Type_MapType *msg, cel_expr_Type* value) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Type_MapType_mutable_value_type(cel_expr_Type_MapType* msg, upb_Arena* arena) { + struct cel_expr_Type* sub = (struct cel_expr_Type*)cel_expr_Type_MapType_value_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (sub) cel_expr_Type_MapType_set_value_type(msg, sub); + } + return sub; +} + +/* cel.expr.Type.FunctionType */ + +UPB_INLINE cel_expr_Type_FunctionType* cel_expr_Type_FunctionType_new(upb_Arena* arena) { + return (cel_expr_Type_FunctionType*)_upb_Message_New(&cel__expr__Type__FunctionType_msg_init, arena); +} +UPB_INLINE cel_expr_Type_FunctionType* cel_expr_Type_FunctionType_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Type_FunctionType* ret = cel_expr_Type_FunctionType_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type__FunctionType_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Type_FunctionType* cel_expr_Type_FunctionType_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Type_FunctionType* ret = cel_expr_Type_FunctionType_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type__FunctionType_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Type_FunctionType_serialize(const cel_expr_Type_FunctionType* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type__FunctionType_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Type_FunctionType_serialize_ex(const cel_expr_Type_FunctionType* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type__FunctionType_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Type_FunctionType_clear_result_type(cel_expr_Type_FunctionType* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* cel_expr_Type_FunctionType_result_type(const cel_expr_Type_FunctionType* msg) { + const cel_expr_Type* default_val = NULL; + const cel_expr_Type* ret; + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Type_FunctionType_has_result_type(const cel_expr_Type_FunctionType* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Type_FunctionType_clear_arg_types(cel_expr_Type_FunctionType* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 24), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* const* cel_expr_Type_FunctionType_arg_types(const cel_expr_Type_FunctionType* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 24), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (const cel_expr_Type* const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Type_FunctionType_arg_types_upb_array(const cel_expr_Type_FunctionType* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 24), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Type_FunctionType_arg_types_mutable_upb_array(cel_expr_Type_FunctionType* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 24), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} + +UPB_INLINE void cel_expr_Type_FunctionType_set_result_type(cel_expr_Type_FunctionType *msg, cel_expr_Type* value) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Type_FunctionType_mutable_result_type(cel_expr_Type_FunctionType* msg, upb_Arena* arena) { + struct cel_expr_Type* sub = (struct cel_expr_Type*)cel_expr_Type_FunctionType_result_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (sub) cel_expr_Type_FunctionType_set_result_type(msg, sub); + } + return sub; +} +UPB_INLINE cel_expr_Type** cel_expr_Type_FunctionType_mutable_arg_types(cel_expr_Type_FunctionType* msg, size_t* size) { + upb_MiniTableField field = {2, UPB_SIZE(16, 24), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (cel_expr_Type**)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE cel_expr_Type** cel_expr_Type_FunctionType_resize_arg_types(cel_expr_Type_FunctionType* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(16, 24), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Type**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Type_FunctionType_add_arg_types(cel_expr_Type_FunctionType* msg, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(16, 24), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return NULL; + } + struct cel_expr_Type* sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (!arr || !sub) return NULL; + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub)); + return sub; +} + +/* cel.expr.Type.AbstractType */ + +UPB_INLINE cel_expr_Type_AbstractType* cel_expr_Type_AbstractType_new(upb_Arena* arena) { + return (cel_expr_Type_AbstractType*)_upb_Message_New(&cel__expr__Type__AbstractType_msg_init, arena); +} +UPB_INLINE cel_expr_Type_AbstractType* cel_expr_Type_AbstractType_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Type_AbstractType* ret = cel_expr_Type_AbstractType_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type__AbstractType_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Type_AbstractType* cel_expr_Type_AbstractType_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Type_AbstractType* ret = cel_expr_Type_AbstractType_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Type__AbstractType_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Type_AbstractType_serialize(const cel_expr_Type_AbstractType* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type__AbstractType_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Type_AbstractType_serialize_ex(const cel_expr_Type_AbstractType* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Type__AbstractType_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Type_AbstractType_clear_name(cel_expr_Type_AbstractType* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Type_AbstractType_name(const cel_expr_Type_AbstractType* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Type_AbstractType_clear_parameter_types(cel_expr_Type_AbstractType* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* const* cel_expr_Type_AbstractType_parameter_types(const cel_expr_Type_AbstractType* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (const cel_expr_Type* const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Type_AbstractType_parameter_types_upb_array(const cel_expr_Type_AbstractType* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Type_AbstractType_parameter_types_mutable_upb_array(cel_expr_Type_AbstractType* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} + +UPB_INLINE void cel_expr_Type_AbstractType_set_name(cel_expr_Type_AbstractType *msg, upb_StringView value) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE cel_expr_Type** cel_expr_Type_AbstractType_mutable_parameter_types(cel_expr_Type_AbstractType* msg, size_t* size) { + upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (cel_expr_Type**)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE cel_expr_Type** cel_expr_Type_AbstractType_resize_parameter_types(cel_expr_Type_AbstractType* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Type**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Type_AbstractType_add_parameter_types(cel_expr_Type_AbstractType* msg, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return NULL; + } + struct cel_expr_Type* sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (!arr || !sub) return NULL; + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub)); + return sub; +} + +/* cel.expr.Decl */ + +UPB_INLINE cel_expr_Decl* cel_expr_Decl_new(upb_Arena* arena) { + return (cel_expr_Decl*)_upb_Message_New(&cel__expr__Decl_msg_init, arena); +} +UPB_INLINE cel_expr_Decl* cel_expr_Decl_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Decl* ret = cel_expr_Decl_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Decl_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Decl* cel_expr_Decl_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Decl* ret = cel_expr_Decl_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Decl_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Decl_serialize(const cel_expr_Decl* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Decl_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Decl_serialize_ex(const cel_expr_Decl* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Decl_msg_init, options, arena, &ptr, len); + return ptr; +} +typedef enum { + cel_expr_Decl_decl_kind_ident = 2, + cel_expr_Decl_decl_kind_function = 3, + cel_expr_Decl_decl_kind_NOT_SET = 0 +} cel_expr_Decl_decl_kind_oneofcases; +UPB_INLINE cel_expr_Decl_decl_kind_oneofcases cel_expr_Decl_decl_kind_case(const cel_expr_Decl* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Decl_decl_kind_oneofcases)upb_Message_WhichOneofFieldNumber( + UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Decl_clear_decl_kind(cel_expr_Decl* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearOneof(UPB_UPCAST(msg), &cel__expr__Decl_msg_init, &field); +} +UPB_INLINE void cel_expr_Decl_clear_name(cel_expr_Decl* msg) { + const upb_MiniTableField field = {1, 16, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Decl_name(const cel_expr_Decl* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {1, 16, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Decl_clear_ident(cel_expr_Decl* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Decl_IdentDecl* cel_expr_Decl_ident(const cel_expr_Decl* msg) { + const cel_expr_Decl_IdentDecl* default_val = NULL; + const cel_expr_Decl_IdentDecl* ret; + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Decl__IdentDecl_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Decl_has_ident(const cel_expr_Decl* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Decl_clear_function(cel_expr_Decl* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Decl_FunctionDecl* cel_expr_Decl_function(const cel_expr_Decl* msg) { + const cel_expr_Decl_FunctionDecl* default_val = NULL; + const cel_expr_Decl_FunctionDecl* ret; + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Decl__FunctionDecl_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Decl_has_function(const cel_expr_Decl* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} + +UPB_INLINE void cel_expr_Decl_set_name(cel_expr_Decl *msg, upb_StringView value) { + const upb_MiniTableField field = {1, 16, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Decl_set_ident(cel_expr_Decl *msg, cel_expr_Decl_IdentDecl* value) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Decl__IdentDecl_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Decl_IdentDecl* cel_expr_Decl_mutable_ident(cel_expr_Decl* msg, upb_Arena* arena) { + struct cel_expr_Decl_IdentDecl* sub = (struct cel_expr_Decl_IdentDecl*)cel_expr_Decl_ident(msg); + if (sub == NULL) { + sub = (struct cel_expr_Decl_IdentDecl*)_upb_Message_New(&cel__expr__Decl__IdentDecl_msg_init, arena); + if (sub) cel_expr_Decl_set_ident(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Decl_set_function(cel_expr_Decl *msg, cel_expr_Decl_FunctionDecl* value) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Decl__FunctionDecl_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Decl_FunctionDecl* cel_expr_Decl_mutable_function(cel_expr_Decl* msg, upb_Arena* arena) { + struct cel_expr_Decl_FunctionDecl* sub = (struct cel_expr_Decl_FunctionDecl*)cel_expr_Decl_function(msg); + if (sub == NULL) { + sub = (struct cel_expr_Decl_FunctionDecl*)_upb_Message_New(&cel__expr__Decl__FunctionDecl_msg_init, arena); + if (sub) cel_expr_Decl_set_function(msg, sub); + } + return sub; +} + +/* cel.expr.Decl.IdentDecl */ + +UPB_INLINE cel_expr_Decl_IdentDecl* cel_expr_Decl_IdentDecl_new(upb_Arena* arena) { + return (cel_expr_Decl_IdentDecl*)_upb_Message_New(&cel__expr__Decl__IdentDecl_msg_init, arena); +} +UPB_INLINE cel_expr_Decl_IdentDecl* cel_expr_Decl_IdentDecl_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Decl_IdentDecl* ret = cel_expr_Decl_IdentDecl_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Decl__IdentDecl_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Decl_IdentDecl* cel_expr_Decl_IdentDecl_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Decl_IdentDecl* ret = cel_expr_Decl_IdentDecl_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Decl__IdentDecl_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Decl_IdentDecl_serialize(const cel_expr_Decl_IdentDecl* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Decl__IdentDecl_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Decl_IdentDecl_serialize_ex(const cel_expr_Decl_IdentDecl* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Decl__IdentDecl_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Decl_IdentDecl_clear_type(cel_expr_Decl_IdentDecl* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* cel_expr_Decl_IdentDecl_type(const cel_expr_Decl_IdentDecl* msg) { + const cel_expr_Type* default_val = NULL; + const cel_expr_Type* ret; + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Decl_IdentDecl_has_type(const cel_expr_Decl_IdentDecl* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Decl_IdentDecl_clear_value(cel_expr_Decl_IdentDecl* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 40), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct cel_expr_Constant* cel_expr_Decl_IdentDecl_value(const cel_expr_Decl_IdentDecl* msg) { + const struct cel_expr_Constant* default_val = NULL; + const struct cel_expr_Constant* ret; + const upb_MiniTableField field = {2, UPB_SIZE(16, 40), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Constant_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Decl_IdentDecl_has_value(const cel_expr_Decl_IdentDecl* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 40), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Decl_IdentDecl_clear_doc(cel_expr_Decl_IdentDecl* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Decl_IdentDecl_doc(const cel_expr_Decl_IdentDecl* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {3, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} + +UPB_INLINE void cel_expr_Decl_IdentDecl_set_type(cel_expr_Decl_IdentDecl *msg, cel_expr_Type* value) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Decl_IdentDecl_mutable_type(cel_expr_Decl_IdentDecl* msg, upb_Arena* arena) { + struct cel_expr_Type* sub = (struct cel_expr_Type*)cel_expr_Decl_IdentDecl_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (sub) cel_expr_Decl_IdentDecl_set_type(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Decl_IdentDecl_set_value(cel_expr_Decl_IdentDecl *msg, struct cel_expr_Constant* value) { + const upb_MiniTableField field = {2, UPB_SIZE(16, 40), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Constant_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Constant* cel_expr_Decl_IdentDecl_mutable_value(cel_expr_Decl_IdentDecl* msg, upb_Arena* arena) { + struct cel_expr_Constant* sub = (struct cel_expr_Constant*)cel_expr_Decl_IdentDecl_value(msg); + if (sub == NULL) { + sub = (struct cel_expr_Constant*)_upb_Message_New(&cel__expr__Constant_msg_init, arena); + if (sub) cel_expr_Decl_IdentDecl_set_value(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Decl_IdentDecl_set_doc(cel_expr_Decl_IdentDecl *msg, upb_StringView value) { + const upb_MiniTableField field = {3, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} + +/* cel.expr.Decl.FunctionDecl */ + +UPB_INLINE cel_expr_Decl_FunctionDecl* cel_expr_Decl_FunctionDecl_new(upb_Arena* arena) { + return (cel_expr_Decl_FunctionDecl*)_upb_Message_New(&cel__expr__Decl__FunctionDecl_msg_init, arena); +} +UPB_INLINE cel_expr_Decl_FunctionDecl* cel_expr_Decl_FunctionDecl_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Decl_FunctionDecl* ret = cel_expr_Decl_FunctionDecl_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Decl__FunctionDecl_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Decl_FunctionDecl* cel_expr_Decl_FunctionDecl_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Decl_FunctionDecl* ret = cel_expr_Decl_FunctionDecl_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Decl__FunctionDecl_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Decl_FunctionDecl_serialize(const cel_expr_Decl_FunctionDecl* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Decl__FunctionDecl_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Decl_FunctionDecl_serialize_ex(const cel_expr_Decl_FunctionDecl* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Decl__FunctionDecl_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_clear_overloads(cel_expr_Decl_FunctionDecl* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Decl_FunctionDecl_Overload* const* cel_expr_Decl_FunctionDecl_overloads(const cel_expr_Decl_FunctionDecl* msg, size_t* size) { + const upb_MiniTableField field = {1, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Decl__FunctionDecl__Overload_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (const cel_expr_Decl_FunctionDecl_Overload* const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Decl_FunctionDecl_overloads_upb_array(const cel_expr_Decl_FunctionDecl* msg, size_t* size) { + const upb_MiniTableField field = {1, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Decl__FunctionDecl__Overload_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Decl_FunctionDecl_overloads_mutable_upb_array(cel_expr_Decl_FunctionDecl* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {1, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Decl__FunctionDecl__Overload_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_clear_doc(cel_expr_Decl_FunctionDecl* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Decl_FunctionDecl_doc(const cel_expr_Decl_FunctionDecl* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {2, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} + +UPB_INLINE cel_expr_Decl_FunctionDecl_Overload** cel_expr_Decl_FunctionDecl_mutable_overloads(cel_expr_Decl_FunctionDecl* msg, size_t* size) { + upb_MiniTableField field = {1, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Decl__FunctionDecl__Overload_msg_init); + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (cel_expr_Decl_FunctionDecl_Overload**)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE cel_expr_Decl_FunctionDecl_Overload** cel_expr_Decl_FunctionDecl_resize_overloads(cel_expr_Decl_FunctionDecl* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {1, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Decl_FunctionDecl_Overload**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE struct cel_expr_Decl_FunctionDecl_Overload* cel_expr_Decl_FunctionDecl_add_overloads(cel_expr_Decl_FunctionDecl* msg, upb_Arena* arena) { + upb_MiniTableField field = {1, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Decl__FunctionDecl__Overload_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return NULL; + } + struct cel_expr_Decl_FunctionDecl_Overload* sub = (struct cel_expr_Decl_FunctionDecl_Overload*)_upb_Message_New(&cel__expr__Decl__FunctionDecl__Overload_msg_init, arena); + if (!arr || !sub) return NULL; + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub)); + return sub; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_set_doc(cel_expr_Decl_FunctionDecl *msg, upb_StringView value) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} + +/* cel.expr.Decl.FunctionDecl.Overload */ + +UPB_INLINE cel_expr_Decl_FunctionDecl_Overload* cel_expr_Decl_FunctionDecl_Overload_new(upb_Arena* arena) { + return (cel_expr_Decl_FunctionDecl_Overload*)_upb_Message_New(&cel__expr__Decl__FunctionDecl__Overload_msg_init, arena); +} +UPB_INLINE cel_expr_Decl_FunctionDecl_Overload* cel_expr_Decl_FunctionDecl_Overload_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Decl_FunctionDecl_Overload* ret = cel_expr_Decl_FunctionDecl_Overload_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Decl__FunctionDecl__Overload_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Decl_FunctionDecl_Overload* cel_expr_Decl_FunctionDecl_Overload_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Decl_FunctionDecl_Overload* ret = cel_expr_Decl_FunctionDecl_Overload_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Decl__FunctionDecl__Overload_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Decl_FunctionDecl_Overload_serialize(const cel_expr_Decl_FunctionDecl_Overload* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Decl__FunctionDecl__Overload_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Decl_FunctionDecl_Overload_serialize_ex(const cel_expr_Decl_FunctionDecl_Overload* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Decl__FunctionDecl__Overload_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_clear_overload_id(cel_expr_Decl_FunctionDecl_Overload* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Decl_FunctionDecl_Overload_overload_id(const cel_expr_Decl_FunctionDecl_Overload* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_clear_params(cel_expr_Decl_FunctionDecl_Overload* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* const* cel_expr_Decl_FunctionDecl_Overload_params(const cel_expr_Decl_FunctionDecl_Overload* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (const cel_expr_Type* const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Decl_FunctionDecl_Overload_params_upb_array(const cel_expr_Decl_FunctionDecl_Overload* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Decl_FunctionDecl_Overload_params_mutable_upb_array(cel_expr_Decl_FunctionDecl_Overload* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_clear_type_params(cel_expr_Decl_FunctionDecl_Overload* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 56), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView const* cel_expr_Decl_FunctionDecl_Overload_type_params(const cel_expr_Decl_FunctionDecl_Overload* msg, size_t* size) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 56), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (upb_StringView const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Decl_FunctionDecl_Overload_type_params_upb_array(const cel_expr_Decl_FunctionDecl_Overload* msg, size_t* size) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 56), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Decl_FunctionDecl_Overload_type_params_mutable_upb_array(cel_expr_Decl_FunctionDecl_Overload* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 56), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_clear_result_type(cel_expr_Decl_FunctionDecl_Overload* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(20, 64), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Type* cel_expr_Decl_FunctionDecl_Overload_result_type(const cel_expr_Decl_FunctionDecl_Overload* msg) { + const cel_expr_Type* default_val = NULL; + const cel_expr_Type* ret; + const upb_MiniTableField field = {4, UPB_SIZE(20, 64), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Decl_FunctionDecl_Overload_has_result_type(const cel_expr_Decl_FunctionDecl_Overload* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(20, 64), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_clear_is_instance_function(cel_expr_Decl_FunctionDecl_Overload* msg) { + const upb_MiniTableField field = {5, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE bool cel_expr_Decl_FunctionDecl_Overload_is_instance_function(const cel_expr_Decl_FunctionDecl_Overload* msg) { + bool default_val = false; + bool ret; + const upb_MiniTableField field = {5, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_clear_doc(cel_expr_Decl_FunctionDecl_Overload* msg) { + const upb_MiniTableField field = {6, 32, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Decl_FunctionDecl_Overload_doc(const cel_expr_Decl_FunctionDecl_Overload* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {6, 32, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} + +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_set_overload_id(cel_expr_Decl_FunctionDecl_Overload *msg, upb_StringView value) { + const upb_MiniTableField field = {1, UPB_SIZE(24, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE cel_expr_Type** cel_expr_Decl_FunctionDecl_Overload_mutable_params(cel_expr_Decl_FunctionDecl_Overload* msg, size_t* size) { + upb_MiniTableField field = {2, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (cel_expr_Type**)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE cel_expr_Type** cel_expr_Decl_FunctionDecl_Overload_resize_params(cel_expr_Decl_FunctionDecl_Overload* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Type**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Decl_FunctionDecl_Overload_add_params(cel_expr_Decl_FunctionDecl_Overload* msg, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return NULL; + } + struct cel_expr_Type* sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (!arr || !sub) return NULL; + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub)); + return sub; +} +UPB_INLINE upb_StringView* cel_expr_Decl_FunctionDecl_Overload_mutable_type_params(cel_expr_Decl_FunctionDecl_Overload* msg, size_t* size) { + upb_MiniTableField field = {3, UPB_SIZE(16, 56), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (upb_StringView*)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE upb_StringView* cel_expr_Decl_FunctionDecl_Overload_resize_type_params(cel_expr_Decl_FunctionDecl_Overload* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {3, UPB_SIZE(16, 56), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE bool cel_expr_Decl_FunctionDecl_Overload_add_type_params(cel_expr_Decl_FunctionDecl_Overload* msg, upb_StringView val, upb_Arena* arena) { + upb_MiniTableField field = {3, UPB_SIZE(16, 56), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return false; + } + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val)); + return true; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_set_result_type(cel_expr_Decl_FunctionDecl_Overload *msg, cel_expr_Type* value) { + const upb_MiniTableField field = {4, UPB_SIZE(20, 64), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Type_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Type* cel_expr_Decl_FunctionDecl_Overload_mutable_result_type(cel_expr_Decl_FunctionDecl_Overload* msg, upb_Arena* arena) { + struct cel_expr_Type* sub = (struct cel_expr_Type*)cel_expr_Decl_FunctionDecl_Overload_result_type(msg); + if (sub == NULL) { + sub = (struct cel_expr_Type*)_upb_Message_New(&cel__expr__Type_msg_init, arena); + if (sub) cel_expr_Decl_FunctionDecl_Overload_set_result_type(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_set_is_instance_function(cel_expr_Decl_FunctionDecl_Overload *msg, bool value) { + const upb_MiniTableField field = {5, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Decl_FunctionDecl_Overload_set_doc(cel_expr_Decl_FunctionDecl_Overload *msg, upb_StringView value) { + const upb_MiniTableField field = {6, 32, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} + +/* cel.expr.Reference */ + +UPB_INLINE cel_expr_Reference* cel_expr_Reference_new(upb_Arena* arena) { + return (cel_expr_Reference*)_upb_Message_New(&cel__expr__Reference_msg_init, arena); +} +UPB_INLINE cel_expr_Reference* cel_expr_Reference_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Reference* ret = cel_expr_Reference_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Reference_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Reference* cel_expr_Reference_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Reference* ret = cel_expr_Reference_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Reference_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Reference_serialize(const cel_expr_Reference* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Reference_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Reference_serialize_ex(const cel_expr_Reference* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Reference_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Reference_clear_name(cel_expr_Reference* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Reference_name(const cel_expr_Reference* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {1, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Reference_clear_overload_id(cel_expr_Reference* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView const* cel_expr_Reference_overload_id(const cel_expr_Reference* msg, size_t* size) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (upb_StringView const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Reference_overload_id_upb_array(const cel_expr_Reference* msg, size_t* size) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Reference_overload_id_mutable_upb_array(cel_expr_Reference* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE void cel_expr_Reference_clear_value(cel_expr_Reference* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct cel_expr_Constant* cel_expr_Reference_value(const cel_expr_Reference* msg) { + const struct cel_expr_Constant* default_val = NULL; + const struct cel_expr_Constant* ret; + const upb_MiniTableField field = {4, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Constant_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Reference_has_value(const cel_expr_Reference* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} + +UPB_INLINE void cel_expr_Reference_set_name(cel_expr_Reference *msg, upb_StringView value) { + const upb_MiniTableField field = {1, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE upb_StringView* cel_expr_Reference_mutable_overload_id(cel_expr_Reference* msg, size_t* size) { + upb_MiniTableField field = {3, UPB_SIZE(12, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (upb_StringView*)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE upb_StringView* cel_expr_Reference_resize_overload_id(cel_expr_Reference* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {3, UPB_SIZE(12, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE bool cel_expr_Reference_add_overload_id(cel_expr_Reference* msg, upb_StringView val, upb_Arena* arena) { + upb_MiniTableField field = {3, UPB_SIZE(12, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return false; + } + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val)); + return true; +} +UPB_INLINE void cel_expr_Reference_set_value(cel_expr_Reference *msg, struct cel_expr_Constant* value) { + const upb_MiniTableField field = {4, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Constant_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Constant* cel_expr_Reference_mutable_value(cel_expr_Reference* msg, upb_Arena* arena) { + struct cel_expr_Constant* sub = (struct cel_expr_Constant*)cel_expr_Reference_value(msg); + if (sub == NULL) { + sub = (struct cel_expr_Constant*)_upb_Message_New(&cel__expr__Constant_msg_init, arena); + if (sub) cel_expr_Reference_set_value(msg, sub); + } + return sub; +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port/undef.inc" + +#endif /* CEL_EXPR_CHECKED_PROTO_UPB_H__UPB_H_ */ diff --git a/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c b/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c new file mode 100644 index 0000000000000..838ec23ee9616 --- /dev/null +++ b/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c @@ -0,0 +1,409 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/checked.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + +#include +#include "upb/generated_code_support.h" +#include "cel/expr/checked.upb_minitable.h" +#include "cel/expr/syntax.upb_minitable.h" +#include "google/protobuf/empty.upb_minitable.h" +#include "google/protobuf/struct.upb_minitable.h" + +// Must be last. +#include "upb/port/def.inc" + +extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_StaticallyTreeShaken); +static const upb_MiniTableSubInternal cel_expr_CheckedExpr__submsgs[4] = { + {.UPB_PRIVATE(submsg) = &cel__expr__CheckedExpr__ReferenceMapEntry_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__CheckedExpr__TypeMapEntry_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__SourceInfo_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_CheckedExpr__fields[5] = { + {2, UPB_SIZE(12, 32), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {4, UPB_SIZE(20, 48), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {5, UPB_SIZE(24, 56), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {6, UPB_SIZE(28, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__CheckedExpr_msg_init = { + &cel_expr_CheckedExpr__submsgs[0], + &cel_expr_CheckedExpr__fields[0], + UPB_SIZE(40, 64), 5, kUpb_ExtMode_NonExtendable, 0, UPB_FASTTABLE_MASK(56), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.CheckedExpr", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f000032, &upb_pss_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__CheckedExpr_msg_init_ptr = &cel__expr__CheckedExpr_msg_init; +static const upb_MiniTableSubInternal cel_expr_CheckedExpr_ReferenceMapEntry__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Reference_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_CheckedExpr_ReferenceMapEntry__fields[2] = { + {1, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {2, 32, 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__CheckedExpr__ReferenceMapEntry_msg_init = { + &cel_expr_CheckedExpr_ReferenceMapEntry__submsgs[0], + &cel_expr_CheckedExpr_ReferenceMapEntry__fields[0], + 48, 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(8), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.CheckedExpr.ReferenceMapEntry", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f000008, &upb_psv8_1bt}, + }) +}; + +const upb_MiniTable* cel__expr__CheckedExpr__ReferenceMapEntry_msg_init_ptr = &cel__expr__CheckedExpr__ReferenceMapEntry_msg_init; +static const upb_MiniTableSubInternal cel_expr_CheckedExpr_TypeMapEntry__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_CheckedExpr_TypeMapEntry__fields[2] = { + {1, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {2, 32, 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__CheckedExpr__TypeMapEntry_msg_init = { + &cel_expr_CheckedExpr_TypeMapEntry__submsgs[0], + &cel_expr_CheckedExpr_TypeMapEntry__fields[0], + 48, 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(8), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.CheckedExpr.TypeMapEntry", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f000008, &upb_psv8_1bt}, + }) +}; + +const upb_MiniTable* cel__expr__CheckedExpr__TypeMapEntry_msg_init_ptr = &cel__expr__CheckedExpr__TypeMapEntry_msg_init; +static const upb_MiniTableSubInternal cel_expr_Type__submsgs[7] = { + {.UPB_PRIVATE(submsg) = &google__protobuf__Empty_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Type__ListType_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Type__MapType_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Type__FunctionType_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &google__protobuf__Empty_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Type__AbstractType_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Type__fields[13] = { + {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}, + {4, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}, + {5, UPB_SIZE(12, 16), -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}, + {6, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {7, UPB_SIZE(12, 16), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {8, UPB_SIZE(12, 16), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {9, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {10, UPB_SIZE(12, 16), -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {11, UPB_SIZE(12, 16), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {12, UPB_SIZE(12, 16), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {14, UPB_SIZE(12, 16), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Type_msg_init = { + &cel_expr_Type__submsgs[0], + &cel_expr_Type__fields[0], + UPB_SIZE(24, 32), 13, kUpb_ExtMode_NonExtendable, 12, UPB_FASTTABLE_MASK(120), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Type", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000080100000a, &upb_pom_1bt_maxmaxb}, + {0x0010000802000010, &upb_pov4_1bt}, + {0x0010000803000018, &upb_pov4_1bt}, + {0x0010000804000020, &upb_pov4_1bt}, + {0x0010000805000028, &upb_pov4_1bt}, + {0x0010000806010032, &upb_pom_1bt_max64b}, + {0x001000080702003a, &upb_pom_1bt_max64b}, + {0x0010000808030042, &upb_pom_1bt_max64b}, + {0x001000080900004a, &upb_pos_1bt}, + {0x001000080a000052, &upb_pos_1bt}, + {0x001000080b04005a, &upb_pom_1bt_max64b}, + {0x001000080c050062, &upb_pom_1bt_maxmaxb}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000080e060072, &upb_pom_1bt_max64b}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Type_msg_init_ptr = &cel__expr__Type_msg_init; +static const upb_MiniTableSubInternal cel_expr_Type_ListType__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Type_ListType__fields[1] = { + {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Type__ListType_msg_init = { + &cel_expr_Type_ListType__submsgs[0], + &cel_expr_Type_ListType__fields[0], + UPB_SIZE(16, 24), 1, kUpb_ExtMode_NonExtendable, 1, UPB_FASTTABLE_MASK(255), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Type.ListType", +#endif +}; + +const upb_MiniTable* cel__expr__Type__ListType_msg_init_ptr = &cel__expr__Type__ListType_msg_init; +static const upb_MiniTableSubInternal cel_expr_Type_MapType__submsgs[2] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Type_MapType__fields[2] = { + {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Type__MapType_msg_init = { + &cel_expr_Type_MapType__submsgs[0], + &cel_expr_Type_MapType__fields[0], + UPB_SIZE(24, 32), 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(255), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Type.MapType", +#endif +}; + +const upb_MiniTable* cel__expr__Type__MapType_msg_init_ptr = &cel__expr__Type__MapType_msg_init; +static const upb_MiniTableSubInternal cel_expr_Type_FunctionType__submsgs[2] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Type_FunctionType__fields[2] = { + {1, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(16, 24), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Type__FunctionType_msg_init = { + &cel_expr_Type_FunctionType__submsgs[0], + &cel_expr_Type_FunctionType__fields[0], + UPB_SIZE(24, 32), 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Type.FunctionType", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001800003f010012, &upb_prm_1bt_max64b}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Type__FunctionType_msg_init_ptr = &cel__expr__Type__FunctionType_msg_init; +static const upb_MiniTableSubInternal cel_expr_Type_AbstractType__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Type_AbstractType__fields[2] = { + {1, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Type__AbstractType_msg_init = { + &cel_expr_Type_AbstractType__submsgs[0], + &cel_expr_Type_AbstractType__fields[0], + UPB_SIZE(24, 32), 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Type.AbstractType", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x000800003f00000a, &upb_pss_1bt}, + {0x001800003f000012, &upb_prm_1bt_max64b}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Type__AbstractType_msg_init_ptr = &cel__expr__Type__AbstractType_msg_init; +static const upb_MiniTableSubInternal cel_expr_Decl__submsgs[2] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Decl__IdentDecl_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Decl__FunctionDecl_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Decl__fields[3] = { + {1, 16, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(12, 32), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(12, 32), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Decl_msg_init = { + &cel_expr_Decl__submsgs[0], + &cel_expr_Decl__fields[0], + UPB_SIZE(24, 40), 3, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Decl", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f00000a, &upb_pss_1bt}, + {0x0020000802000012, &upb_pom_1bt_max64b}, + {0x002000080301001a, &upb_pom_1bt_max64b}, + }) +}; + +const upb_MiniTable* cel__expr__Decl_msg_init_ptr = &cel__expr__Decl_msg_init; +static const upb_MiniTableSubInternal cel_expr_Decl_IdentDecl__submsgs[2] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Constant_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Decl_IdentDecl__fields[3] = { + {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(16, 40), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Decl__IdentDecl_msg_init = { + &cel_expr_Decl_IdentDecl__submsgs[0], + &cel_expr_Decl_IdentDecl__fields[0], + UPB_SIZE(32, 48), 3, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Decl.IdentDecl", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f00001a, &upb_pss_1bt}, + }) +}; + +const upb_MiniTable* cel__expr__Decl__IdentDecl_msg_init_ptr = &cel__expr__Decl__IdentDecl_msg_init; +static const upb_MiniTableSubInternal cel_expr_Decl_FunctionDecl__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Decl__FunctionDecl__Overload_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Decl_FunctionDecl__fields[2] = { + {1, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Decl__FunctionDecl_msg_init = { + &cel_expr_Decl_FunctionDecl__submsgs[0], + &cel_expr_Decl_FunctionDecl__fields[0], + UPB_SIZE(24, 32), 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Decl.FunctionDecl", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001800003f00000a, &upb_prm_1bt_max128b}, + {0x000800003f000012, &upb_pss_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Decl__FunctionDecl_msg_init_ptr = &cel__expr__Decl__FunctionDecl_msg_init; +static const upb_MiniTableSubInternal cel_expr_Decl_FunctionDecl_Overload__submsgs[2] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Type_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Decl_FunctionDecl_Overload__fields[6] = { + {1, UPB_SIZE(24, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(16, 56), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {4, UPB_SIZE(20, 64), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {5, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}, + {6, 32, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Decl__FunctionDecl__Overload_msg_init = { + &cel_expr_Decl_FunctionDecl_Overload__submsgs[0], + &cel_expr_Decl_FunctionDecl_Overload__fields[0], + UPB_SIZE(40, 72), 6, kUpb_ExtMode_NonExtendable, 6, UPB_FASTTABLE_MASK(56), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Decl.FunctionDecl.Overload", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f00000a, &upb_pss_1bt}, + {0x003000003f000012, &upb_prm_1bt_max64b}, + {0x003800003f00001a, &upb_prs_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x000900003f000028, &upb_psb1_1bt}, + {0x002000003f000032, &upb_pss_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Decl__FunctionDecl__Overload_msg_init_ptr = &cel__expr__Decl__FunctionDecl__Overload_msg_init; +static const upb_MiniTableSubInternal cel_expr_Reference__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Constant_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Reference__fields[3] = { + {1, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(12, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {4, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Reference_msg_init = { + &cel_expr_Reference__submsgs[0], + &cel_expr_Reference__fields[0], + UPB_SIZE(32, 48), 3, kUpb_ExtMode_NonExtendable, 1, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Reference", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f00000a, &upb_pss_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x002000003f00001a, &upb_prs_1bt}, + }) +}; + +const upb_MiniTable* cel__expr__Reference_msg_init_ptr = &cel__expr__Reference_msg_init; +static const upb_MiniTable *messages_layout[13] = { + &cel__expr__CheckedExpr_msg_init, + &cel__expr__CheckedExpr__ReferenceMapEntry_msg_init, + &cel__expr__CheckedExpr__TypeMapEntry_msg_init, + &cel__expr__Type_msg_init, + &cel__expr__Type__ListType_msg_init, + &cel__expr__Type__MapType_msg_init, + &cel__expr__Type__FunctionType_msg_init, + &cel__expr__Type__AbstractType_msg_init, + &cel__expr__Decl_msg_init, + &cel__expr__Decl__IdentDecl_msg_init, + &cel__expr__Decl__FunctionDecl_msg_init, + &cel__expr__Decl__FunctionDecl__Overload_msg_init, + &cel__expr__Reference_msg_init, +}; + +const upb_MiniTableFile cel_expr_checked_proto_upb_file_layout = { + messages_layout, + NULL, + NULL, + 13, + 0, + 0, +}; + +#include "upb/port/undef.inc" + diff --git a/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h b/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h new file mode 100644 index 0000000000000..9d5bf205af833 --- /dev/null +++ b/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h @@ -0,0 +1,56 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/checked.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + +#ifndef CEL_EXPR_CHECKED_PROTO_UPB_H__UPB_MINITABLE_H_ +#define CEL_EXPR_CHECKED_PROTO_UPB_H__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 cel__expr__CheckedExpr_msg_init; +extern const upb_MiniTable* cel__expr__CheckedExpr_msg_init_ptr; +extern const upb_MiniTable cel__expr__CheckedExpr__ReferenceMapEntry_msg_init; +extern const upb_MiniTable* cel__expr__CheckedExpr__ReferenceMapEntry_msg_init_ptr; +extern const upb_MiniTable cel__expr__CheckedExpr__TypeMapEntry_msg_init; +extern const upb_MiniTable* cel__expr__CheckedExpr__TypeMapEntry_msg_init_ptr; +extern const upb_MiniTable cel__expr__Type_msg_init; +extern const upb_MiniTable* cel__expr__Type_msg_init_ptr; +extern const upb_MiniTable cel__expr__Type__ListType_msg_init; +extern const upb_MiniTable* cel__expr__Type__ListType_msg_init_ptr; +extern const upb_MiniTable cel__expr__Type__MapType_msg_init; +extern const upb_MiniTable* cel__expr__Type__MapType_msg_init_ptr; +extern const upb_MiniTable cel__expr__Type__FunctionType_msg_init; +extern const upb_MiniTable* cel__expr__Type__FunctionType_msg_init_ptr; +extern const upb_MiniTable cel__expr__Type__AbstractType_msg_init; +extern const upb_MiniTable* cel__expr__Type__AbstractType_msg_init_ptr; +extern const upb_MiniTable cel__expr__Decl_msg_init; +extern const upb_MiniTable* cel__expr__Decl_msg_init_ptr; +extern const upb_MiniTable cel__expr__Decl__IdentDecl_msg_init; +extern const upb_MiniTable* cel__expr__Decl__IdentDecl_msg_init_ptr; +extern const upb_MiniTable cel__expr__Decl__FunctionDecl_msg_init; +extern const upb_MiniTable* cel__expr__Decl__FunctionDecl_msg_init_ptr; +extern const upb_MiniTable cel__expr__Decl__FunctionDecl__Overload_msg_init; +extern const upb_MiniTable* cel__expr__Decl__FunctionDecl__Overload_msg_init_ptr; +extern const upb_MiniTable cel__expr__Reference_msg_init; +extern const upb_MiniTable* cel__expr__Reference_msg_init_ptr; + +extern const upb_MiniTableFile cel_expr_checked_proto_upb_file_layout; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port/undef.inc" + +#endif /* CEL_EXPR_CHECKED_PROTO_UPB_H__UPB_MINITABLE_H_ */ diff --git a/src/core/ext/upb-gen/cel/expr/syntax.upb.h b/src/core/ext/upb-gen/cel/expr/syntax.upb.h new file mode 100644 index 0000000000000..027cd0389ccf8 --- /dev/null +++ b/src/core/ext/upb-gen/cel/expr/syntax.upb.h @@ -0,0 +1,2223 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/syntax.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + +#ifndef CEL_EXPR_SYNTAX_PROTO_UPB_H__UPB_H_ +#define CEL_EXPR_SYNTAX_PROTO_UPB_H__UPB_H_ + +#include "upb/generated_code_support.h" + +#include "cel/expr/syntax.upb_minitable.h" + +#include "google/protobuf/duration.upb_minitable.h" +#include "google/protobuf/struct.upb_minitable.h" +#include "google/protobuf/timestamp.upb_minitable.h" + +// Must be last. +#include "upb/port/def.inc" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct cel_expr_ParsedExpr { upb_Message UPB_PRIVATE(base); } cel_expr_ParsedExpr; +typedef struct cel_expr_Expr { upb_Message UPB_PRIVATE(base); } cel_expr_Expr; +typedef struct cel_expr_Expr_Ident { upb_Message UPB_PRIVATE(base); } cel_expr_Expr_Ident; +typedef struct cel_expr_Expr_Select { upb_Message UPB_PRIVATE(base); } cel_expr_Expr_Select; +typedef struct cel_expr_Expr_Call { upb_Message UPB_PRIVATE(base); } cel_expr_Expr_Call; +typedef struct cel_expr_Expr_CreateList { upb_Message UPB_PRIVATE(base); } cel_expr_Expr_CreateList; +typedef struct cel_expr_Expr_CreateStruct { upb_Message UPB_PRIVATE(base); } cel_expr_Expr_CreateStruct; +typedef struct cel_expr_Expr_CreateStruct_Entry { upb_Message UPB_PRIVATE(base); } cel_expr_Expr_CreateStruct_Entry; +typedef struct cel_expr_Expr_Comprehension { upb_Message UPB_PRIVATE(base); } cel_expr_Expr_Comprehension; +typedef struct cel_expr_Constant { upb_Message UPB_PRIVATE(base); } cel_expr_Constant; +typedef struct cel_expr_SourceInfo { upb_Message UPB_PRIVATE(base); } cel_expr_SourceInfo; +typedef struct cel_expr_SourceInfo_Extension { upb_Message UPB_PRIVATE(base); } cel_expr_SourceInfo_Extension; +typedef struct cel_expr_SourceInfo_Extension_Version { upb_Message UPB_PRIVATE(base); } cel_expr_SourceInfo_Extension_Version; +struct google_protobuf_Duration; +struct google_protobuf_Timestamp; + +typedef enum { + cel_expr_SourceInfo_Extension_COMPONENT_UNSPECIFIED = 0, + cel_expr_SourceInfo_Extension_COMPONENT_PARSER = 1, + cel_expr_SourceInfo_Extension_COMPONENT_TYPE_CHECKER = 2, + cel_expr_SourceInfo_Extension_COMPONENT_RUNTIME = 3 +} cel_expr_SourceInfo_Extension_Component; + + + +/* cel.expr.ParsedExpr */ + +UPB_INLINE cel_expr_ParsedExpr* cel_expr_ParsedExpr_new(upb_Arena* arena) { + return (cel_expr_ParsedExpr*)_upb_Message_New(&cel__expr__ParsedExpr_msg_init, arena); +} +UPB_INLINE cel_expr_ParsedExpr* cel_expr_ParsedExpr_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_ParsedExpr* ret = cel_expr_ParsedExpr_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__ParsedExpr_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_ParsedExpr* cel_expr_ParsedExpr_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_ParsedExpr* ret = cel_expr_ParsedExpr_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__ParsedExpr_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_ParsedExpr_serialize(const cel_expr_ParsedExpr* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__ParsedExpr_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_ParsedExpr_serialize_ex(const cel_expr_ParsedExpr* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__ParsedExpr_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_ParsedExpr_clear_expr(cel_expr_ParsedExpr* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_ParsedExpr_expr(const cel_expr_ParsedExpr* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_ParsedExpr_has_expr(const cel_expr_ParsedExpr* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_ParsedExpr_clear_source_info(cel_expr_ParsedExpr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_SourceInfo* cel_expr_ParsedExpr_source_info(const cel_expr_ParsedExpr* msg) { + const cel_expr_SourceInfo* default_val = NULL; + const cel_expr_SourceInfo* ret; + const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_ParsedExpr_has_source_info(const cel_expr_ParsedExpr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} + +UPB_INLINE void cel_expr_ParsedExpr_set_expr(cel_expr_ParsedExpr *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_ParsedExpr_mutable_expr(cel_expr_ParsedExpr* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_ParsedExpr_expr(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_ParsedExpr_set_expr(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_ParsedExpr_set_source_info(cel_expr_ParsedExpr *msg, cel_expr_SourceInfo* value) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_SourceInfo* cel_expr_ParsedExpr_mutable_source_info(cel_expr_ParsedExpr* msg, upb_Arena* arena) { + struct cel_expr_SourceInfo* sub = (struct cel_expr_SourceInfo*)cel_expr_ParsedExpr_source_info(msg); + if (sub == NULL) { + sub = (struct cel_expr_SourceInfo*)_upb_Message_New(&cel__expr__SourceInfo_msg_init, arena); + if (sub) cel_expr_ParsedExpr_set_source_info(msg, sub); + } + return sub; +} + +/* cel.expr.Expr */ + +UPB_INLINE cel_expr_Expr* cel_expr_Expr_new(upb_Arena* arena) { + return (cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); +} +UPB_INLINE cel_expr_Expr* cel_expr_Expr_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Expr* ret = cel_expr_Expr_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Expr* cel_expr_Expr_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Expr* ret = cel_expr_Expr_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Expr_serialize(const cel_expr_Expr* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Expr_serialize_ex(const cel_expr_Expr* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr_msg_init, options, arena, &ptr, len); + return ptr; +} +typedef enum { + cel_expr_Expr_expr_kind_const_expr = 3, + cel_expr_Expr_expr_kind_ident_expr = 4, + cel_expr_Expr_expr_kind_select_expr = 5, + cel_expr_Expr_expr_kind_call_expr = 6, + cel_expr_Expr_expr_kind_list_expr = 7, + cel_expr_Expr_expr_kind_struct_expr = 8, + cel_expr_Expr_expr_kind_comprehension_expr = 9, + cel_expr_Expr_expr_kind_NOT_SET = 0 +} cel_expr_Expr_expr_kind_oneofcases; +UPB_INLINE cel_expr_Expr_expr_kind_oneofcases cel_expr_Expr_expr_kind_case(const cel_expr_Expr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 24), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Expr_expr_kind_oneofcases)upb_Message_WhichOneofFieldNumber( + UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_clear_expr_kind(cel_expr_Expr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 24), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearOneof(UPB_UPCAST(msg), &cel__expr__Expr_msg_init, &field); +} +UPB_INLINE void cel_expr_Expr_clear_id(cel_expr_Expr* msg) { + const upb_MiniTableField field = {2, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int64_t cel_expr_Expr_id(const cel_expr_Expr* msg) { + int64_t default_val = (int64_t)0ll; + int64_t ret; + const upb_MiniTableField field = {2, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Expr_clear_const_expr(cel_expr_Expr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 24), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Constant* cel_expr_Expr_const_expr(const cel_expr_Expr* msg) { + const cel_expr_Constant* default_val = NULL; + const cel_expr_Constant* ret; + const upb_MiniTableField field = {3, UPB_SIZE(12, 24), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Constant_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_has_const_expr(const cel_expr_Expr* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 24), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_clear_ident_expr(cel_expr_Expr* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 24), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr_Ident* cel_expr_Expr_ident_expr(const cel_expr_Expr* msg) { + const cel_expr_Expr_Ident* default_val = NULL; + const cel_expr_Expr_Ident* ret; + const upb_MiniTableField field = {4, UPB_SIZE(12, 24), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__Ident_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_has_ident_expr(const cel_expr_Expr* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 24), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_clear_select_expr(cel_expr_Expr* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(12, 24), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr_Select* cel_expr_Expr_select_expr(const cel_expr_Expr* msg) { + const cel_expr_Expr_Select* default_val = NULL; + const cel_expr_Expr_Select* ret; + const upb_MiniTableField field = {5, UPB_SIZE(12, 24), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__Select_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_has_select_expr(const cel_expr_Expr* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(12, 24), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_clear_call_expr(cel_expr_Expr* msg) { + const upb_MiniTableField field = {6, UPB_SIZE(12, 24), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr_Call* cel_expr_Expr_call_expr(const cel_expr_Expr* msg) { + const cel_expr_Expr_Call* default_val = NULL; + const cel_expr_Expr_Call* ret; + const upb_MiniTableField field = {6, UPB_SIZE(12, 24), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__Call_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_has_call_expr(const cel_expr_Expr* msg) { + const upb_MiniTableField field = {6, UPB_SIZE(12, 24), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_clear_list_expr(cel_expr_Expr* msg) { + const upb_MiniTableField field = {7, UPB_SIZE(12, 24), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr_CreateList* cel_expr_Expr_list_expr(const cel_expr_Expr* msg) { + const cel_expr_Expr_CreateList* default_val = NULL; + const cel_expr_Expr_CreateList* ret; + const upb_MiniTableField field = {7, UPB_SIZE(12, 24), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__CreateList_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_has_list_expr(const cel_expr_Expr* msg) { + const upb_MiniTableField field = {7, UPB_SIZE(12, 24), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_clear_struct_expr(cel_expr_Expr* msg) { + const upb_MiniTableField field = {8, UPB_SIZE(12, 24), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr_CreateStruct* cel_expr_Expr_struct_expr(const cel_expr_Expr* msg) { + const cel_expr_Expr_CreateStruct* default_val = NULL; + const cel_expr_Expr_CreateStruct* ret; + const upb_MiniTableField field = {8, UPB_SIZE(12, 24), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__CreateStruct_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_has_struct_expr(const cel_expr_Expr* msg) { + const upb_MiniTableField field = {8, UPB_SIZE(12, 24), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_clear_comprehension_expr(cel_expr_Expr* msg) { + const upb_MiniTableField field = {9, UPB_SIZE(12, 24), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr_Comprehension* cel_expr_Expr_comprehension_expr(const cel_expr_Expr* msg) { + const cel_expr_Expr_Comprehension* default_val = NULL; + const cel_expr_Expr_Comprehension* ret; + const upb_MiniTableField field = {9, UPB_SIZE(12, 24), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__Comprehension_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_has_comprehension_expr(const cel_expr_Expr* msg) { + const upb_MiniTableField field = {9, UPB_SIZE(12, 24), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} + +UPB_INLINE void cel_expr_Expr_set_id(cel_expr_Expr *msg, int64_t value) { + const upb_MiniTableField field = {2, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Expr_set_const_expr(cel_expr_Expr *msg, cel_expr_Constant* value) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 24), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Constant_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Constant* cel_expr_Expr_mutable_const_expr(cel_expr_Expr* msg, upb_Arena* arena) { + struct cel_expr_Constant* sub = (struct cel_expr_Constant*)cel_expr_Expr_const_expr(msg); + if (sub == NULL) { + sub = (struct cel_expr_Constant*)_upb_Message_New(&cel__expr__Constant_msg_init, arena); + if (sub) cel_expr_Expr_set_const_expr(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_set_ident_expr(cel_expr_Expr *msg, cel_expr_Expr_Ident* value) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 24), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__Ident_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr_Ident* cel_expr_Expr_mutable_ident_expr(cel_expr_Expr* msg, upb_Arena* arena) { + struct cel_expr_Expr_Ident* sub = (struct cel_expr_Expr_Ident*)cel_expr_Expr_ident_expr(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr_Ident*)_upb_Message_New(&cel__expr__Expr__Ident_msg_init, arena); + if (sub) cel_expr_Expr_set_ident_expr(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_set_select_expr(cel_expr_Expr *msg, cel_expr_Expr_Select* value) { + const upb_MiniTableField field = {5, UPB_SIZE(12, 24), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__Select_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr_Select* cel_expr_Expr_mutable_select_expr(cel_expr_Expr* msg, upb_Arena* arena) { + struct cel_expr_Expr_Select* sub = (struct cel_expr_Expr_Select*)cel_expr_Expr_select_expr(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr_Select*)_upb_Message_New(&cel__expr__Expr__Select_msg_init, arena); + if (sub) cel_expr_Expr_set_select_expr(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_set_call_expr(cel_expr_Expr *msg, cel_expr_Expr_Call* value) { + const upb_MiniTableField field = {6, UPB_SIZE(12, 24), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__Call_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr_Call* cel_expr_Expr_mutable_call_expr(cel_expr_Expr* msg, upb_Arena* arena) { + struct cel_expr_Expr_Call* sub = (struct cel_expr_Expr_Call*)cel_expr_Expr_call_expr(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr_Call*)_upb_Message_New(&cel__expr__Expr__Call_msg_init, arena); + if (sub) cel_expr_Expr_set_call_expr(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_set_list_expr(cel_expr_Expr *msg, cel_expr_Expr_CreateList* value) { + const upb_MiniTableField field = {7, UPB_SIZE(12, 24), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__CreateList_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr_CreateList* cel_expr_Expr_mutable_list_expr(cel_expr_Expr* msg, upb_Arena* arena) { + struct cel_expr_Expr_CreateList* sub = (struct cel_expr_Expr_CreateList*)cel_expr_Expr_list_expr(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr_CreateList*)_upb_Message_New(&cel__expr__Expr__CreateList_msg_init, arena); + if (sub) cel_expr_Expr_set_list_expr(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_set_struct_expr(cel_expr_Expr *msg, cel_expr_Expr_CreateStruct* value) { + const upb_MiniTableField field = {8, UPB_SIZE(12, 24), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__CreateStruct_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr_CreateStruct* cel_expr_Expr_mutable_struct_expr(cel_expr_Expr* msg, upb_Arena* arena) { + struct cel_expr_Expr_CreateStruct* sub = (struct cel_expr_Expr_CreateStruct*)cel_expr_Expr_struct_expr(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr_CreateStruct*)_upb_Message_New(&cel__expr__Expr__CreateStruct_msg_init, arena); + if (sub) cel_expr_Expr_set_struct_expr(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_set_comprehension_expr(cel_expr_Expr *msg, cel_expr_Expr_Comprehension* value) { + const upb_MiniTableField field = {9, UPB_SIZE(12, 24), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__Comprehension_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr_Comprehension* cel_expr_Expr_mutable_comprehension_expr(cel_expr_Expr* msg, upb_Arena* arena) { + struct cel_expr_Expr_Comprehension* sub = (struct cel_expr_Expr_Comprehension*)cel_expr_Expr_comprehension_expr(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr_Comprehension*)_upb_Message_New(&cel__expr__Expr__Comprehension_msg_init, arena); + if (sub) cel_expr_Expr_set_comprehension_expr(msg, sub); + } + return sub; +} + +/* cel.expr.Expr.Ident */ + +UPB_INLINE cel_expr_Expr_Ident* cel_expr_Expr_Ident_new(upb_Arena* arena) { + return (cel_expr_Expr_Ident*)_upb_Message_New(&cel__expr__Expr__Ident_msg_init, arena); +} +UPB_INLINE cel_expr_Expr_Ident* cel_expr_Expr_Ident_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Expr_Ident* ret = cel_expr_Expr_Ident_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__Ident_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Expr_Ident* cel_expr_Expr_Ident_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Expr_Ident* ret = cel_expr_Expr_Ident_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__Ident_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Expr_Ident_serialize(const cel_expr_Expr_Ident* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__Ident_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Expr_Ident_serialize_ex(const cel_expr_Expr_Ident* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__Ident_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Expr_Ident_clear_name(cel_expr_Expr_Ident* msg) { + const upb_MiniTableField field = {1, 8, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Expr_Ident_name(const cel_expr_Expr_Ident* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {1, 8, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} + +UPB_INLINE void cel_expr_Expr_Ident_set_name(cel_expr_Expr_Ident *msg, upb_StringView value) { + const upb_MiniTableField field = {1, 8, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} + +/* cel.expr.Expr.Select */ + +UPB_INLINE cel_expr_Expr_Select* cel_expr_Expr_Select_new(upb_Arena* arena) { + return (cel_expr_Expr_Select*)_upb_Message_New(&cel__expr__Expr__Select_msg_init, arena); +} +UPB_INLINE cel_expr_Expr_Select* cel_expr_Expr_Select_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Expr_Select* ret = cel_expr_Expr_Select_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__Select_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Expr_Select* cel_expr_Expr_Select_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Expr_Select* ret = cel_expr_Expr_Select_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__Select_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Expr_Select_serialize(const cel_expr_Expr_Select* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__Select_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Expr_Select_serialize_ex(const cel_expr_Expr_Select* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__Select_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Expr_Select_clear_operand(cel_expr_Expr_Select* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_Expr_Select_operand(const cel_expr_Expr_Select* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_Select_has_operand(const cel_expr_Expr_Select* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_Select_clear_field(cel_expr_Expr_Select* msg) { + const upb_MiniTableField field = {2, 16, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Expr_Select_field(const cel_expr_Expr_Select* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {2, 16, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Expr_Select_clear_test_only(cel_expr_Expr_Select* msg) { + const upb_MiniTableField field = {3, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE bool cel_expr_Expr_Select_test_only(const cel_expr_Expr_Select* msg) { + bool default_val = false; + bool ret; + const upb_MiniTableField field = {3, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} + +UPB_INLINE void cel_expr_Expr_Select_set_operand(cel_expr_Expr_Select *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_Select_mutable_operand(cel_expr_Expr_Select* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_Expr_Select_operand(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_Expr_Select_set_operand(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_Select_set_field(cel_expr_Expr_Select *msg, upb_StringView value) { + const upb_MiniTableField field = {2, 16, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Expr_Select_set_test_only(cel_expr_Expr_Select *msg, bool value) { + const upb_MiniTableField field = {3, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} + +/* cel.expr.Expr.Call */ + +UPB_INLINE cel_expr_Expr_Call* cel_expr_Expr_Call_new(upb_Arena* arena) { + return (cel_expr_Expr_Call*)_upb_Message_New(&cel__expr__Expr__Call_msg_init, arena); +} +UPB_INLINE cel_expr_Expr_Call* cel_expr_Expr_Call_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Expr_Call* ret = cel_expr_Expr_Call_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__Call_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Expr_Call* cel_expr_Expr_Call_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Expr_Call* ret = cel_expr_Expr_Call_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__Call_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Expr_Call_serialize(const cel_expr_Expr_Call* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__Call_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Expr_Call_serialize_ex(const cel_expr_Expr_Call* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__Call_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Expr_Call_clear_target(cel_expr_Expr_Call* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_Expr_Call_target(const cel_expr_Expr_Call* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_Call_has_target(const cel_expr_Expr_Call* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_Call_clear_function(cel_expr_Expr_Call* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Expr_Call_function(const cel_expr_Expr_Call* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {2, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Expr_Call_clear_args(cel_expr_Expr_Call* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* const* cel_expr_Expr_Call_args(const cel_expr_Expr_Call* msg, size_t* size) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (const cel_expr_Expr* const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Expr_Call_args_upb_array(const cel_expr_Expr_Call* msg, size_t* size) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Expr_Call_args_mutable_upb_array(cel_expr_Expr_Call* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} + +UPB_INLINE void cel_expr_Expr_Call_set_target(cel_expr_Expr_Call *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_Call_mutable_target(cel_expr_Expr_Call* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_Expr_Call_target(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_Expr_Call_set_target(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_Call_set_function(cel_expr_Expr_Call *msg, upb_StringView value) { + const upb_MiniTableField field = {2, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE cel_expr_Expr** cel_expr_Expr_Call_mutable_args(cel_expr_Expr_Call* msg, size_t* size) { + upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (cel_expr_Expr**)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE cel_expr_Expr** cel_expr_Expr_Call_resize_args(cel_expr_Expr_Call* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Expr**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_Call_add_args(cel_expr_Expr_Call* msg, upb_Arena* arena) { + upb_MiniTableField field = {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return NULL; + } + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (!arr || !sub) return NULL; + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub)); + return sub; +} + +/* cel.expr.Expr.CreateList */ + +UPB_INLINE cel_expr_Expr_CreateList* cel_expr_Expr_CreateList_new(upb_Arena* arena) { + return (cel_expr_Expr_CreateList*)_upb_Message_New(&cel__expr__Expr__CreateList_msg_init, arena); +} +UPB_INLINE cel_expr_Expr_CreateList* cel_expr_Expr_CreateList_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Expr_CreateList* ret = cel_expr_Expr_CreateList_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__CreateList_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Expr_CreateList* cel_expr_Expr_CreateList_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Expr_CreateList* ret = cel_expr_Expr_CreateList_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__CreateList_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Expr_CreateList_serialize(const cel_expr_Expr_CreateList* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__CreateList_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Expr_CreateList_serialize_ex(const cel_expr_Expr_CreateList* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__CreateList_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Expr_CreateList_clear_elements(cel_expr_Expr_CreateList* msg) { + const upb_MiniTableField field = {1, 8, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* const* cel_expr_Expr_CreateList_elements(const cel_expr_Expr_CreateList* msg, size_t* size) { + const upb_MiniTableField field = {1, 8, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (const cel_expr_Expr* const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Expr_CreateList_elements_upb_array(const cel_expr_Expr_CreateList* msg, size_t* size) { + const upb_MiniTableField field = {1, 8, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Expr_CreateList_elements_mutable_upb_array(cel_expr_Expr_CreateList* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {1, 8, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE void cel_expr_Expr_CreateList_clear_optional_indices(cel_expr_Expr_CreateList* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int32_t const* cel_expr_Expr_CreateList_optional_indices(const cel_expr_Expr_CreateList* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (int32_t const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Expr_CreateList_optional_indices_upb_array(const cel_expr_Expr_CreateList* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Expr_CreateList_optional_indices_mutable_upb_array(cel_expr_Expr_CreateList* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} + +UPB_INLINE cel_expr_Expr** cel_expr_Expr_CreateList_mutable_elements(cel_expr_Expr_CreateList* msg, size_t* size) { + upb_MiniTableField field = {1, 8, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (cel_expr_Expr**)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE cel_expr_Expr** cel_expr_Expr_CreateList_resize_elements(cel_expr_Expr_CreateList* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {1, 8, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Expr**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_CreateList_add_elements(cel_expr_Expr_CreateList* msg, upb_Arena* arena) { + upb_MiniTableField field = {1, 8, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return NULL; + } + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (!arr || !sub) return NULL; + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub)); + return sub; +} +UPB_INLINE int32_t* cel_expr_Expr_CreateList_mutable_optional_indices(cel_expr_Expr_CreateList* msg, size_t* size) { + upb_MiniTableField field = {2, UPB_SIZE(12, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (int32_t*)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE int32_t* cel_expr_Expr_CreateList_resize_optional_indices(cel_expr_Expr_CreateList* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(12, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE bool cel_expr_Expr_CreateList_add_optional_indices(cel_expr_Expr_CreateList* msg, int32_t val, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(12, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return false; + } + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val)); + return true; +} + +/* cel.expr.Expr.CreateStruct */ + +UPB_INLINE cel_expr_Expr_CreateStruct* cel_expr_Expr_CreateStruct_new(upb_Arena* arena) { + return (cel_expr_Expr_CreateStruct*)_upb_Message_New(&cel__expr__Expr__CreateStruct_msg_init, arena); +} +UPB_INLINE cel_expr_Expr_CreateStruct* cel_expr_Expr_CreateStruct_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Expr_CreateStruct* ret = cel_expr_Expr_CreateStruct_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__CreateStruct_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Expr_CreateStruct* cel_expr_Expr_CreateStruct_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Expr_CreateStruct* ret = cel_expr_Expr_CreateStruct_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__CreateStruct_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Expr_CreateStruct_serialize(const cel_expr_Expr_CreateStruct* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__CreateStruct_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Expr_CreateStruct_serialize_ex(const cel_expr_Expr_CreateStruct* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__CreateStruct_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Expr_CreateStruct_clear_message_name(cel_expr_Expr_CreateStruct* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Expr_CreateStruct_message_name(const cel_expr_Expr_CreateStruct* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Expr_CreateStruct_clear_entries(cel_expr_Expr_CreateStruct* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr_CreateStruct_Entry* const* cel_expr_Expr_CreateStruct_entries(const cel_expr_Expr_CreateStruct* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__CreateStruct__Entry_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (const cel_expr_Expr_CreateStruct_Entry* const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_Expr_CreateStruct_entries_upb_array(const cel_expr_Expr_CreateStruct* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__CreateStruct__Entry_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_Expr_CreateStruct_entries_mutable_upb_array(cel_expr_Expr_CreateStruct* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__CreateStruct__Entry_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} + +UPB_INLINE void cel_expr_Expr_CreateStruct_set_message_name(cel_expr_Expr_CreateStruct *msg, upb_StringView value) { + const upb_MiniTableField field = {1, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE cel_expr_Expr_CreateStruct_Entry** cel_expr_Expr_CreateStruct_mutable_entries(cel_expr_Expr_CreateStruct* msg, size_t* size) { + upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__CreateStruct__Entry_msg_init); + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (cel_expr_Expr_CreateStruct_Entry**)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE cel_expr_Expr_CreateStruct_Entry** cel_expr_Expr_CreateStruct_resize_entries(cel_expr_Expr_CreateStruct* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_Expr_CreateStruct_Entry**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE struct cel_expr_Expr_CreateStruct_Entry* cel_expr_Expr_CreateStruct_add_entries(cel_expr_Expr_CreateStruct* msg, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr__CreateStruct__Entry_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return NULL; + } + struct cel_expr_Expr_CreateStruct_Entry* sub = (struct cel_expr_Expr_CreateStruct_Entry*)_upb_Message_New(&cel__expr__Expr__CreateStruct__Entry_msg_init, arena); + if (!arr || !sub) return NULL; + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub)); + return sub; +} + +/* cel.expr.Expr.CreateStruct.Entry */ + +UPB_INLINE cel_expr_Expr_CreateStruct_Entry* cel_expr_Expr_CreateStruct_Entry_new(upb_Arena* arena) { + return (cel_expr_Expr_CreateStruct_Entry*)_upb_Message_New(&cel__expr__Expr__CreateStruct__Entry_msg_init, arena); +} +UPB_INLINE cel_expr_Expr_CreateStruct_Entry* cel_expr_Expr_CreateStruct_Entry_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Expr_CreateStruct_Entry* ret = cel_expr_Expr_CreateStruct_Entry_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__CreateStruct__Entry_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Expr_CreateStruct_Entry* cel_expr_Expr_CreateStruct_Entry_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Expr_CreateStruct_Entry* ret = cel_expr_Expr_CreateStruct_Entry_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__CreateStruct__Entry_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Expr_CreateStruct_Entry_serialize(const cel_expr_Expr_CreateStruct_Entry* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__CreateStruct__Entry_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Expr_CreateStruct_Entry_serialize_ex(const cel_expr_Expr_CreateStruct_Entry* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__CreateStruct__Entry_msg_init, options, arena, &ptr, len); + return ptr; +} +typedef enum { + cel_expr_Expr_CreateStruct_Entry_key_kind_field_key = 2, + cel_expr_Expr_CreateStruct_Entry_key_kind_map_key = 3, + cel_expr_Expr_CreateStruct_Entry_key_kind_NOT_SET = 0 +} cel_expr_Expr_CreateStruct_Entry_key_kind_oneofcases; +UPB_INLINE cel_expr_Expr_CreateStruct_Entry_key_kind_oneofcases cel_expr_Expr_CreateStruct_Entry_key_kind_case(const cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + return (cel_expr_Expr_CreateStruct_Entry_key_kind_oneofcases)upb_Message_WhichOneofFieldNumber( + UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_clear_key_kind(cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearOneof(UPB_UPCAST(msg), &cel__expr__Expr__CreateStruct__Entry_msg_init, &field); +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_clear_id(cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {1, 32, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int64_t cel_expr_Expr_CreateStruct_Entry_id(const cel_expr_Expr_CreateStruct_Entry* msg) { + int64_t default_val = (int64_t)0ll; + int64_t ret; + const upb_MiniTableField field = {1, 32, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_clear_field_key(cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Expr_CreateStruct_Entry_field_key(const cel_expr_Expr_CreateStruct_Entry* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {2, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_CreateStruct_Entry_has_field_key(const cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_clear_map_key(cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_Expr_CreateStruct_Entry_map_key(const cel_expr_Expr_CreateStruct_Entry* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {3, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_CreateStruct_Entry_has_map_key(const cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_clear_value(cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_Expr_CreateStruct_Entry_value(const cel_expr_Expr_CreateStruct_Entry* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_CreateStruct_Entry_has_value(const cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_clear_optional_entry(cel_expr_Expr_CreateStruct_Entry* msg) { + const upb_MiniTableField field = {5, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE bool cel_expr_Expr_CreateStruct_Entry_optional_entry(const cel_expr_Expr_CreateStruct_Entry* msg) { + bool default_val = false; + bool ret; + const upb_MiniTableField field = {5, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} + +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_set_id(cel_expr_Expr_CreateStruct_Entry *msg, int64_t value) { + const upb_MiniTableField field = {1, 32, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_set_field_key(cel_expr_Expr_CreateStruct_Entry *msg, upb_StringView value) { + const upb_MiniTableField field = {2, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_set_map_key(cel_expr_Expr_CreateStruct_Entry *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {3, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_CreateStruct_Entry_mutable_map_key(cel_expr_Expr_CreateStruct_Entry* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_Expr_CreateStruct_Entry_map_key(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_Expr_CreateStruct_Entry_set_map_key(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_set_value(cel_expr_Expr_CreateStruct_Entry *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 40), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_CreateStruct_Entry_mutable_value(cel_expr_Expr_CreateStruct_Entry* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_Expr_CreateStruct_Entry_value(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_Expr_CreateStruct_Entry_set_value(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_CreateStruct_Entry_set_optional_entry(cel_expr_Expr_CreateStruct_Entry *msg, bool value) { + const upb_MiniTableField field = {5, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} + +/* cel.expr.Expr.Comprehension */ + +UPB_INLINE cel_expr_Expr_Comprehension* cel_expr_Expr_Comprehension_new(upb_Arena* arena) { + return (cel_expr_Expr_Comprehension*)_upb_Message_New(&cel__expr__Expr__Comprehension_msg_init, arena); +} +UPB_INLINE cel_expr_Expr_Comprehension* cel_expr_Expr_Comprehension_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Expr_Comprehension* ret = cel_expr_Expr_Comprehension_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__Comprehension_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Expr_Comprehension* cel_expr_Expr_Comprehension_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Expr_Comprehension* ret = cel_expr_Expr_Comprehension_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Expr__Comprehension_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Expr_Comprehension_serialize(const cel_expr_Expr_Comprehension* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__Comprehension_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Expr_Comprehension_serialize_ex(const cel_expr_Expr_Comprehension* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Expr__Comprehension_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_Expr_Comprehension_clear_iter_var(cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(32, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Expr_Comprehension_iter_var(const cel_expr_Expr_Comprehension* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {1, UPB_SIZE(32, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Expr_Comprehension_clear_iter_range(cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 64), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_Expr_Comprehension_iter_range(const cel_expr_Expr_Comprehension* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {2, UPB_SIZE(12, 64), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_Comprehension_has_iter_range(const cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 64), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_Comprehension_clear_accu_var(cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(40, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Expr_Comprehension_accu_var(const cel_expr_Expr_Comprehension* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {3, UPB_SIZE(40, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_Expr_Comprehension_clear_accu_init(cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(16, 72), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_Expr_Comprehension_accu_init(const cel_expr_Expr_Comprehension* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {4, UPB_SIZE(16, 72), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_Comprehension_has_accu_init(const cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(16, 72), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_Comprehension_clear_loop_condition(cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(20, 80), 66, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_Expr_Comprehension_loop_condition(const cel_expr_Expr_Comprehension* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {5, UPB_SIZE(20, 80), 66, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_Comprehension_has_loop_condition(const cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(20, 80), 66, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_Comprehension_clear_loop_step(cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {6, UPB_SIZE(24, 88), 67, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_Expr_Comprehension_loop_step(const cel_expr_Expr_Comprehension* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {6, UPB_SIZE(24, 88), 67, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_Comprehension_has_loop_step(const cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {6, UPB_SIZE(24, 88), 67, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_Comprehension_clear_result(cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {7, UPB_SIZE(28, 96), 68, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_Expr* cel_expr_Expr_Comprehension_result(const cel_expr_Expr_Comprehension* msg) { + const cel_expr_Expr* default_val = NULL; + const cel_expr_Expr* ret; + const upb_MiniTableField field = {7, UPB_SIZE(28, 96), 68, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Expr_Comprehension_has_result(const cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {7, UPB_SIZE(28, 96), 68, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Expr_Comprehension_clear_iter_var2(cel_expr_Expr_Comprehension* msg) { + const upb_MiniTableField field = {8, 48, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Expr_Comprehension_iter_var2(const cel_expr_Expr_Comprehension* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {8, 48, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} + +UPB_INLINE void cel_expr_Expr_Comprehension_set_iter_var(cel_expr_Expr_Comprehension *msg, upb_StringView value) { + const upb_MiniTableField field = {1, UPB_SIZE(32, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Expr_Comprehension_set_iter_range(cel_expr_Expr_Comprehension *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 64), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_Comprehension_mutable_iter_range(cel_expr_Expr_Comprehension* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_Expr_Comprehension_iter_range(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_Expr_Comprehension_set_iter_range(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_Comprehension_set_accu_var(cel_expr_Expr_Comprehension *msg, upb_StringView value) { + const upb_MiniTableField field = {3, UPB_SIZE(40, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Expr_Comprehension_set_accu_init(cel_expr_Expr_Comprehension *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {4, UPB_SIZE(16, 72), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_Comprehension_mutable_accu_init(cel_expr_Expr_Comprehension* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_Expr_Comprehension_accu_init(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_Expr_Comprehension_set_accu_init(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_Comprehension_set_loop_condition(cel_expr_Expr_Comprehension *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {5, UPB_SIZE(20, 80), 66, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_Comprehension_mutable_loop_condition(cel_expr_Expr_Comprehension* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_Expr_Comprehension_loop_condition(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_Expr_Comprehension_set_loop_condition(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_Comprehension_set_loop_step(cel_expr_Expr_Comprehension *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {6, UPB_SIZE(24, 88), 67, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_Comprehension_mutable_loop_step(cel_expr_Expr_Comprehension* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_Expr_Comprehension_loop_step(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_Expr_Comprehension_set_loop_step(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_Comprehension_set_result(cel_expr_Expr_Comprehension *msg, cel_expr_Expr* value) { + const upb_MiniTableField field = {7, UPB_SIZE(28, 96), 68, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_Expr* cel_expr_Expr_Comprehension_mutable_result(cel_expr_Expr_Comprehension* msg, upb_Arena* arena) { + struct cel_expr_Expr* sub = (struct cel_expr_Expr*)cel_expr_Expr_Comprehension_result(msg); + if (sub == NULL) { + sub = (struct cel_expr_Expr*)_upb_Message_New(&cel__expr__Expr_msg_init, arena); + if (sub) cel_expr_Expr_Comprehension_set_result(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Expr_Comprehension_set_iter_var2(cel_expr_Expr_Comprehension *msg, upb_StringView value) { + const upb_MiniTableField field = {8, 48, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} + +/* cel.expr.Constant */ + +UPB_INLINE cel_expr_Constant* cel_expr_Constant_new(upb_Arena* arena) { + return (cel_expr_Constant*)_upb_Message_New(&cel__expr__Constant_msg_init, arena); +} +UPB_INLINE cel_expr_Constant* cel_expr_Constant_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_Constant* ret = cel_expr_Constant_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Constant_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_Constant* cel_expr_Constant_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_Constant* ret = cel_expr_Constant_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__Constant_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_Constant_serialize(const cel_expr_Constant* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Constant_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_Constant_serialize_ex(const cel_expr_Constant* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__Constant_msg_init, options, arena, &ptr, len); + return ptr; +} +typedef enum { + cel_expr_Constant_constant_kind_null_value = 1, + cel_expr_Constant_constant_kind_bool_value = 2, + cel_expr_Constant_constant_kind_int64_value = 3, + cel_expr_Constant_constant_kind_uint64_value = 4, + cel_expr_Constant_constant_kind_double_value = 5, + cel_expr_Constant_constant_kind_string_value = 6, + cel_expr_Constant_constant_kind_bytes_value = 7, + cel_expr_Constant_constant_kind_duration_value = 8, + cel_expr_Constant_constant_kind_timestamp_value = 9, + cel_expr_Constant_constant_kind_NOT_SET = 0 +} cel_expr_Constant_constant_kind_oneofcases; +UPB_INLINE cel_expr_Constant_constant_kind_oneofcases cel_expr_Constant_constant_kind_case(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {1, 16, -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + return (cel_expr_Constant_constant_kind_oneofcases)upb_Message_WhichOneofFieldNumber( + UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Constant_clear_constant_kind(cel_expr_Constant* msg) { + const upb_MiniTableField field = {1, 16, -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearOneof(UPB_UPCAST(msg), &cel__expr__Constant_msg_init, &field); +} +UPB_INLINE void cel_expr_Constant_clear_null_value(cel_expr_Constant* msg) { + const upb_MiniTableField field = {1, 16, -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int32_t cel_expr_Constant_null_value(const cel_expr_Constant* msg) { + int32_t default_val = 0; + int32_t ret; + const upb_MiniTableField field = {1, 16, -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Constant_has_null_value(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {1, 16, -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Constant_clear_bool_value(cel_expr_Constant* msg) { + const upb_MiniTableField field = {2, 16, -9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE bool cel_expr_Constant_bool_value(const cel_expr_Constant* msg) { + bool default_val = false; + bool ret; + const upb_MiniTableField field = {2, 16, -9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Constant_has_bool_value(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {2, 16, -9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Constant_clear_int64_value(cel_expr_Constant* msg) { + const upb_MiniTableField field = {3, 16, -9, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int64_t cel_expr_Constant_int64_value(const cel_expr_Constant* msg) { + int64_t default_val = (int64_t)0ll; + int64_t ret; + const upb_MiniTableField field = {3, 16, -9, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Constant_has_int64_value(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {3, 16, -9, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Constant_clear_uint64_value(cel_expr_Constant* msg) { + const upb_MiniTableField field = {4, 16, -9, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE uint64_t cel_expr_Constant_uint64_value(const cel_expr_Constant* msg) { + uint64_t default_val = (uint64_t)0ull; + uint64_t ret; + const upb_MiniTableField field = {4, 16, -9, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Constant_has_uint64_value(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {4, 16, -9, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Constant_clear_double_value(cel_expr_Constant* msg) { + const upb_MiniTableField field = {5, 16, -9, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE double cel_expr_Constant_double_value(const cel_expr_Constant* msg) { + double default_val = 0; + double ret; + const upb_MiniTableField field = {5, 16, -9, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Constant_has_double_value(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {5, 16, -9, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Constant_clear_string_value(cel_expr_Constant* msg) { + const upb_MiniTableField field = {6, 16, -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Constant_string_value(const cel_expr_Constant* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {6, 16, -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Constant_has_string_value(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {6, 16, -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Constant_clear_bytes_value(cel_expr_Constant* msg) { + const upb_MiniTableField field = {7, 16, -9, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_Constant_bytes_value(const cel_expr_Constant* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {7, 16, -9, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Constant_has_bytes_value(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {7, 16, -9, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Constant_clear_duration_value(cel_expr_Constant* msg) { + const upb_MiniTableField field = {8, 16, -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct google_protobuf_Duration* cel_expr_Constant_duration_value(const cel_expr_Constant* msg) { + const struct google_protobuf_Duration* default_val = NULL; + const struct google_protobuf_Duration* ret; + const upb_MiniTableField field = {8, 16, -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__protobuf__Duration_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Constant_has_duration_value(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {8, 16, -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void cel_expr_Constant_clear_timestamp_value(cel_expr_Constant* msg) { + const upb_MiniTableField field = {9, 16, -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct google_protobuf_Timestamp* cel_expr_Constant_timestamp_value(const cel_expr_Constant* msg) { + const struct google_protobuf_Timestamp* default_val = NULL; + const struct google_protobuf_Timestamp* ret; + const upb_MiniTableField field = {9, 16, -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__protobuf__Timestamp_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_Constant_has_timestamp_value(const cel_expr_Constant* msg) { + const upb_MiniTableField field = {9, 16, -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} + +UPB_INLINE void cel_expr_Constant_set_null_value(cel_expr_Constant *msg, int32_t value) { + const upb_MiniTableField field = {1, 16, -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Constant_set_bool_value(cel_expr_Constant *msg, bool value) { + const upb_MiniTableField field = {2, 16, -9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Constant_set_int64_value(cel_expr_Constant *msg, int64_t value) { + const upb_MiniTableField field = {3, 16, -9, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Constant_set_uint64_value(cel_expr_Constant *msg, uint64_t value) { + const upb_MiniTableField field = {4, 16, -9, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Constant_set_double_value(cel_expr_Constant *msg, double value) { + const upb_MiniTableField field = {5, 16, -9, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Constant_set_string_value(cel_expr_Constant *msg, upb_StringView value) { + const upb_MiniTableField field = {6, 16, -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Constant_set_bytes_value(cel_expr_Constant *msg, upb_StringView value) { + const upb_MiniTableField field = {7, 16, -9, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_Constant_set_duration_value(cel_expr_Constant *msg, struct google_protobuf_Duration* value) { + const upb_MiniTableField field = {8, 16, -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__protobuf__Duration_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct google_protobuf_Duration* cel_expr_Constant_mutable_duration_value(cel_expr_Constant* msg, upb_Arena* arena) { + struct google_protobuf_Duration* sub = (struct google_protobuf_Duration*)cel_expr_Constant_duration_value(msg); + if (sub == NULL) { + sub = (struct google_protobuf_Duration*)_upb_Message_New(&google__protobuf__Duration_msg_init, arena); + if (sub) cel_expr_Constant_set_duration_value(msg, sub); + } + return sub; +} +UPB_INLINE void cel_expr_Constant_set_timestamp_value(cel_expr_Constant *msg, struct google_protobuf_Timestamp* value) { + const upb_MiniTableField field = {9, 16, -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__protobuf__Timestamp_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct google_protobuf_Timestamp* cel_expr_Constant_mutable_timestamp_value(cel_expr_Constant* msg, upb_Arena* arena) { + struct google_protobuf_Timestamp* sub = (struct google_protobuf_Timestamp*)cel_expr_Constant_timestamp_value(msg); + if (sub == NULL) { + sub = (struct google_protobuf_Timestamp*)_upb_Message_New(&google__protobuf__Timestamp_msg_init, arena); + if (sub) cel_expr_Constant_set_timestamp_value(msg, sub); + } + return sub; +} + +/* cel.expr.SourceInfo */ + +UPB_INLINE cel_expr_SourceInfo* cel_expr_SourceInfo_new(upb_Arena* arena) { + return (cel_expr_SourceInfo*)_upb_Message_New(&cel__expr__SourceInfo_msg_init, arena); +} +UPB_INLINE cel_expr_SourceInfo* cel_expr_SourceInfo_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_SourceInfo* ret = cel_expr_SourceInfo_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__SourceInfo_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_SourceInfo* cel_expr_SourceInfo_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_SourceInfo* ret = cel_expr_SourceInfo_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__SourceInfo_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_SourceInfo_serialize(const cel_expr_SourceInfo* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__SourceInfo_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_SourceInfo_serialize_ex(const cel_expr_SourceInfo* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__SourceInfo_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_SourceInfo_clear_syntax_version(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(24, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_SourceInfo_syntax_version(const cel_expr_SourceInfo* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {1, UPB_SIZE(24, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_SourceInfo_clear_location(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(32, 24), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_SourceInfo_location(const cel_expr_SourceInfo* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {2, UPB_SIZE(32, 24), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_SourceInfo_clear_line_offsets(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(8, 40), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int32_t const* cel_expr_SourceInfo_line_offsets(const cel_expr_SourceInfo* msg, size_t* size) { + const upb_MiniTableField field = {3, UPB_SIZE(8, 40), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (int32_t const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_SourceInfo_line_offsets_upb_array(const cel_expr_SourceInfo* msg, size_t* size) { + const upb_MiniTableField field = {3, UPB_SIZE(8, 40), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_SourceInfo_line_offsets_mutable_upb_array(cel_expr_SourceInfo* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {3, UPB_SIZE(8, 40), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE void cel_expr_SourceInfo_clear_positions(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE size_t cel_expr_SourceInfo_positions_size(const cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + return map ? _upb_Map_Size(map) : 0; +} +UPB_INLINE bool cel_expr_SourceInfo_positions_get(const cel_expr_SourceInfo* msg, int64_t key, int32_t* val) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__PositionsEntry_msg_init); + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + return _upb_Map_Get(map, &key, sizeof(key), val, sizeof(*val)); +} +UPB_INLINE bool cel_expr_SourceInfo_positions_next(const cel_expr_SourceInfo* msg, int64_t* key, int32_t* val, + size_t* iter) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__PositionsEntry_msg_init); + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + upb_MessageValue k; + upb_MessageValue v; + if (!upb_Map_Next(map, &k, &v, iter)) return false; + memcpy(key, &k, sizeof(*key)); + memcpy(val, &v, sizeof(*val)); + return true; +} +UPB_INLINE const upb_Map* _cel_expr_SourceInfo_positions_upb_map(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__PositionsEntry_msg_init); + return upb_Message_GetMap(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_Map* _cel_expr_SourceInfo_positions_mutable_upb_map(cel_expr_SourceInfo* msg, upb_Arena* a) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__PositionsEntry_msg_init); + return _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), &field, sizeof(int64_t), sizeof(int32_t), a); +} +UPB_INLINE void cel_expr_SourceInfo_clear_macro_calls(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE size_t cel_expr_SourceInfo_macro_calls_size(const cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + return map ? _upb_Map_Size(map) : 0; +} +UPB_INLINE bool cel_expr_SourceInfo_macro_calls_get(const cel_expr_SourceInfo* msg, int64_t key, cel_expr_Expr** val) { + const upb_MiniTableField field = {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__MacroCallsEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + return _upb_Map_Get(map, &key, sizeof(key), val, sizeof(*val)); +} +UPB_INLINE bool cel_expr_SourceInfo_macro_calls_next(const cel_expr_SourceInfo* msg, int64_t* key, const cel_expr_Expr** val, + size_t* iter) { + const upb_MiniTableField field = {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__MacroCallsEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + upb_MessageValue k; + upb_MessageValue v; + if (!upb_Map_Next(map, &k, &v, iter)) return false; + memcpy(key, &k, sizeof(*key)); + memcpy(val, &v, sizeof(*val)); + return true; +} +UPB_INLINE const upb_Map* _cel_expr_SourceInfo_macro_calls_upb_map(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__MacroCallsEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + return upb_Message_GetMap(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_Map* _cel_expr_SourceInfo_macro_calls_mutable_upb_map(cel_expr_SourceInfo* msg, upb_Arena* a) { + const upb_MiniTableField field = {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__MacroCallsEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + return _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), &field, sizeof(int64_t), sizeof(cel_expr_Expr*), a); +} +UPB_INLINE void cel_expr_SourceInfo_clear_extensions(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {6, UPB_SIZE(20, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_SourceInfo_Extension* const* cel_expr_SourceInfo_extensions(const cel_expr_SourceInfo* msg, size_t* size) { + const upb_MiniTableField field = {6, UPB_SIZE(20, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__Extension_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (const cel_expr_SourceInfo_Extension* const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_SourceInfo_extensions_upb_array(const cel_expr_SourceInfo* msg, size_t* size) { + const upb_MiniTableField field = {6, UPB_SIZE(20, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__Extension_msg_init); + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_SourceInfo_extensions_mutable_upb_array(cel_expr_SourceInfo* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {6, UPB_SIZE(20, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__Extension_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} + +UPB_INLINE void cel_expr_SourceInfo_set_syntax_version(cel_expr_SourceInfo *msg, upb_StringView value) { + const upb_MiniTableField field = {1, UPB_SIZE(24, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_SourceInfo_set_location(cel_expr_SourceInfo *msg, upb_StringView value) { + const upb_MiniTableField field = {2, UPB_SIZE(32, 24), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE int32_t* cel_expr_SourceInfo_mutable_line_offsets(cel_expr_SourceInfo* msg, size_t* size) { + upb_MiniTableField field = {3, UPB_SIZE(8, 40), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (int32_t*)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE int32_t* cel_expr_SourceInfo_resize_line_offsets(cel_expr_SourceInfo* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {3, UPB_SIZE(8, 40), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE bool cel_expr_SourceInfo_add_line_offsets(cel_expr_SourceInfo* msg, int32_t val, upb_Arena* arena) { + upb_MiniTableField field = {3, UPB_SIZE(8, 40), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return false; + } + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val)); + return true; +} +UPB_INLINE void cel_expr_SourceInfo_positions_clear(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return; + _upb_Map_Clear(map); +} +UPB_INLINE bool cel_expr_SourceInfo_positions_set(cel_expr_SourceInfo* msg, int64_t key, int32_t val, upb_Arena* a) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__PositionsEntry_msg_init); + upb_Map* map = _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), + &field, sizeof(key), sizeof(val), a); + return _upb_Map_Insert(map, &key, sizeof(key), &val, sizeof(val), a) != + kUpb_MapInsertStatus_OutOfMemory; +} +UPB_INLINE bool cel_expr_SourceInfo_positions_delete(cel_expr_SourceInfo* msg, int64_t key) { + const upb_MiniTableField field = {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + return _upb_Map_Delete(map, &key, sizeof(key), NULL); +} +UPB_INLINE void cel_expr_SourceInfo_macro_calls_clear(cel_expr_SourceInfo* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return; + _upb_Map_Clear(map); +} +UPB_INLINE bool cel_expr_SourceInfo_macro_calls_set(cel_expr_SourceInfo* msg, int64_t key, cel_expr_Expr* val, upb_Arena* a) { + const upb_MiniTableField field = {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__MacroCallsEntry_msg_init); + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__Expr_msg_init); + upb_Map* map = _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), + &field, sizeof(key), sizeof(val), a); + return _upb_Map_Insert(map, &key, sizeof(key), &val, sizeof(val), a) != + kUpb_MapInsertStatus_OutOfMemory; +} +UPB_INLINE bool cel_expr_SourceInfo_macro_calls_delete(cel_expr_SourceInfo* msg, int64_t key) { + const upb_MiniTableField field = {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field); + if (!map) return false; + return _upb_Map_Delete(map, &key, sizeof(key), NULL); +} +UPB_INLINE cel_expr_SourceInfo_Extension** cel_expr_SourceInfo_mutable_extensions(cel_expr_SourceInfo* msg, size_t* size) { + upb_MiniTableField field = {6, UPB_SIZE(20, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__Extension_msg_init); + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (cel_expr_SourceInfo_Extension**)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE cel_expr_SourceInfo_Extension** cel_expr_SourceInfo_resize_extensions(cel_expr_SourceInfo* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {6, UPB_SIZE(20, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (cel_expr_SourceInfo_Extension**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE struct cel_expr_SourceInfo_Extension* cel_expr_SourceInfo_add_extensions(cel_expr_SourceInfo* msg, upb_Arena* arena) { + upb_MiniTableField field = {6, UPB_SIZE(20, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__Extension_msg_init); + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return NULL; + } + struct cel_expr_SourceInfo_Extension* sub = (struct cel_expr_SourceInfo_Extension*)_upb_Message_New(&cel__expr__SourceInfo__Extension_msg_init, arena); + if (!arr || !sub) return NULL; + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &sub, sizeof(sub)); + return sub; +} + +/* cel.expr.SourceInfo.Extension */ + +UPB_INLINE cel_expr_SourceInfo_Extension* cel_expr_SourceInfo_Extension_new(upb_Arena* arena) { + return (cel_expr_SourceInfo_Extension*)_upb_Message_New(&cel__expr__SourceInfo__Extension_msg_init, arena); +} +UPB_INLINE cel_expr_SourceInfo_Extension* cel_expr_SourceInfo_Extension_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_SourceInfo_Extension* ret = cel_expr_SourceInfo_Extension_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__SourceInfo__Extension_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_SourceInfo_Extension* cel_expr_SourceInfo_Extension_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_SourceInfo_Extension* ret = cel_expr_SourceInfo_Extension_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__SourceInfo__Extension_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_SourceInfo_Extension_serialize(const cel_expr_SourceInfo_Extension* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__SourceInfo__Extension_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_SourceInfo_Extension_serialize_ex(const cel_expr_SourceInfo_Extension* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__SourceInfo__Extension_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_SourceInfo_Extension_clear_id(cel_expr_SourceInfo_Extension* msg) { + const upb_MiniTableField field = {1, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView cel_expr_SourceInfo_Extension_id(const cel_expr_SourceInfo_Extension* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {1, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_SourceInfo_Extension_clear_affected_components(cel_expr_SourceInfo_Extension* msg) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int32_t const* cel_expr_SourceInfo_Extension_affected_components(const cel_expr_SourceInfo_Extension* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (int32_t const*)upb_Array_DataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE const upb_Array* _cel_expr_SourceInfo_Extension_affected_components_upb_array(const cel_expr_SourceInfo_Extension* msg, size_t* size) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE upb_Array* _cel_expr_SourceInfo_Extension_affected_components_mutable_upb_array(cel_expr_SourceInfo_Extension* msg, size_t* size, upb_Arena* arena) { + const upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg), + &field, arena); + if (size) { + *size = arr ? arr->UPB_PRIVATE(size) : 0; + } + return arr; +} +UPB_INLINE void cel_expr_SourceInfo_Extension_clear_version(cel_expr_SourceInfo_Extension* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const cel_expr_SourceInfo_Extension_Version* cel_expr_SourceInfo_Extension_version(const cel_expr_SourceInfo_Extension* msg) { + const cel_expr_SourceInfo_Extension_Version* default_val = NULL; + const cel_expr_SourceInfo_Extension_Version* ret; + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__Extension__Version_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool cel_expr_SourceInfo_Extension_has_version(const cel_expr_SourceInfo_Extension* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} + +UPB_INLINE void cel_expr_SourceInfo_Extension_set_id(cel_expr_SourceInfo_Extension *msg, upb_StringView value) { + const upb_MiniTableField field = {1, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE int32_t* cel_expr_SourceInfo_Extension_mutable_affected_components(cel_expr_SourceInfo_Extension* msg, size_t* size) { + upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field); + if (arr) { + if (size) *size = arr->UPB_PRIVATE(size); + return (int32_t*)upb_Array_MutableDataPtr(arr); + } else { + if (size) *size = 0; + return NULL; + } +} +UPB_INLINE int32_t* cel_expr_SourceInfo_Extension_resize_affected_components(cel_expr_SourceInfo_Extension* msg, size_t size, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return (int32_t*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg), + &field, size, arena); +} +UPB_INLINE bool cel_expr_SourceInfo_Extension_add_affected_components(cel_expr_SourceInfo_Extension* msg, int32_t val, upb_Arena* arena) { + upb_MiniTableField field = {2, UPB_SIZE(12, 32), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Array* arr = upb_Message_GetOrCreateMutableArray( + UPB_UPCAST(msg), &field, arena); + if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)( + arr, arr->UPB_PRIVATE(size) + 1, arena)) { + return false; + } + UPB_PRIVATE(_upb_Array_Set) + (arr, arr->UPB_PRIVATE(size) - 1, &val, sizeof(val)); + return true; +} +UPB_INLINE void cel_expr_SourceInfo_Extension_set_version(cel_expr_SourceInfo_Extension *msg, cel_expr_SourceInfo_Extension_Version* value) { + const upb_MiniTableField field = {3, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__SourceInfo__Extension__Version_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_SourceInfo_Extension_Version* cel_expr_SourceInfo_Extension_mutable_version(cel_expr_SourceInfo_Extension* msg, upb_Arena* arena) { + struct cel_expr_SourceInfo_Extension_Version* sub = (struct cel_expr_SourceInfo_Extension_Version*)cel_expr_SourceInfo_Extension_version(msg); + if (sub == NULL) { + sub = (struct cel_expr_SourceInfo_Extension_Version*)_upb_Message_New(&cel__expr__SourceInfo__Extension__Version_msg_init, arena); + if (sub) cel_expr_SourceInfo_Extension_set_version(msg, sub); + } + return sub; +} + +/* cel.expr.SourceInfo.Extension.Version */ + +UPB_INLINE cel_expr_SourceInfo_Extension_Version* cel_expr_SourceInfo_Extension_Version_new(upb_Arena* arena) { + return (cel_expr_SourceInfo_Extension_Version*)_upb_Message_New(&cel__expr__SourceInfo__Extension__Version_msg_init, arena); +} +UPB_INLINE cel_expr_SourceInfo_Extension_Version* cel_expr_SourceInfo_Extension_Version_parse(const char* buf, size_t size, upb_Arena* arena) { + cel_expr_SourceInfo_Extension_Version* ret = cel_expr_SourceInfo_Extension_Version_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__SourceInfo__Extension__Version_msg_init, NULL, 0, arena) != + kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE cel_expr_SourceInfo_Extension_Version* cel_expr_SourceInfo_Extension_Version_parse_ex(const char* buf, size_t size, + const upb_ExtensionRegistry* extreg, + int options, upb_Arena* arena) { + cel_expr_SourceInfo_Extension_Version* ret = cel_expr_SourceInfo_Extension_Version_new(arena); + if (!ret) return NULL; + if (upb_Decode(buf, size, UPB_UPCAST(ret), &cel__expr__SourceInfo__Extension__Version_msg_init, extreg, options, + arena) != kUpb_DecodeStatus_Ok) { + return NULL; + } + return ret; +} +UPB_INLINE char* cel_expr_SourceInfo_Extension_Version_serialize(const cel_expr_SourceInfo_Extension_Version* msg, upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__SourceInfo__Extension__Version_msg_init, 0, arena, &ptr, len); + return ptr; +} +UPB_INLINE char* cel_expr_SourceInfo_Extension_Version_serialize_ex(const cel_expr_SourceInfo_Extension_Version* msg, int options, + upb_Arena* arena, size_t* len) { + char* ptr; + (void)upb_Encode(UPB_UPCAST(msg), &cel__expr__SourceInfo__Extension__Version_msg_init, options, arena, &ptr, len); + return ptr; +} +UPB_INLINE void cel_expr_SourceInfo_Extension_Version_clear_major(cel_expr_SourceInfo_Extension_Version* msg) { + const upb_MiniTableField field = {1, 8, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int64_t cel_expr_SourceInfo_Extension_Version_major(const cel_expr_SourceInfo_Extension_Version* msg) { + int64_t default_val = (int64_t)0ll; + int64_t ret; + const upb_MiniTableField field = {1, 8, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE void cel_expr_SourceInfo_Extension_Version_clear_minor(cel_expr_SourceInfo_Extension_Version* msg) { + const upb_MiniTableField field = {2, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE int64_t cel_expr_SourceInfo_Extension_Version_minor(const cel_expr_SourceInfo_Extension_Version* msg) { + int64_t default_val = (int64_t)0ll; + int64_t ret; + const upb_MiniTableField field = {2, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} + +UPB_INLINE void cel_expr_SourceInfo_Extension_Version_set_major(cel_expr_SourceInfo_Extension_Version *msg, int64_t value) { + const upb_MiniTableField field = {1, 8, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE void cel_expr_SourceInfo_Extension_Version_set_minor(cel_expr_SourceInfo_Extension_Version *msg, int64_t value) { + const upb_MiniTableField field = {2, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port/undef.inc" + +#endif /* CEL_EXPR_SYNTAX_PROTO_UPB_H__UPB_H_ */ diff --git a/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c b/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c new file mode 100644 index 0000000000000..0977be53c366d --- /dev/null +++ b/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c @@ -0,0 +1,489 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/syntax.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + +#include +#include "upb/generated_code_support.h" +#include "cel/expr/syntax.upb_minitable.h" +#include "google/protobuf/duration.upb_minitable.h" +#include "google/protobuf/struct.upb_minitable.h" +#include "google/protobuf/timestamp.upb_minitable.h" + +// Must be last. +#include "upb/port/def.inc" + +extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_StaticallyTreeShaken); +static const upb_MiniTableSubInternal cel_expr_ParsedExpr__submsgs[2] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__SourceInfo_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_ParsedExpr__fields[2] = { + {2, UPB_SIZE(12, 16), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(16, 24), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__ParsedExpr_msg_init = { + &cel_expr_ParsedExpr__submsgs[0], + &cel_expr_ParsedExpr__fields[0], + UPB_SIZE(24, 32), 2, kUpb_ExtMode_NonExtendable, 0, UPB_FASTTABLE_MASK(255), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.ParsedExpr", +#endif +}; + +const upb_MiniTable* cel__expr__ParsedExpr_msg_init_ptr = &cel__expr__ParsedExpr_msg_init; +static const upb_MiniTableSubInternal cel_expr_Expr__submsgs[7] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Constant_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr__Ident_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr__Select_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr__Call_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr__CreateList_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr__CreateStruct_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr__Comprehension_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Expr__fields[8] = { + {2, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(12, 24), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {4, UPB_SIZE(12, 24), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {5, UPB_SIZE(12, 24), -9, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {6, UPB_SIZE(12, 24), -9, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {7, UPB_SIZE(12, 24), -9, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {8, UPB_SIZE(12, 24), -9, 5, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {9, UPB_SIZE(12, 24), -9, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Expr_msg_init = { + &cel_expr_Expr__submsgs[0], + &cel_expr_Expr__fields[0], + UPB_SIZE(24, 32), 8, kUpb_ExtMode_NonExtendable, 0, UPB_FASTTABLE_MASK(120), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Expr", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f000010, &upb_psv8_1bt}, + {0x001800080300001a, &upb_pom_1bt_max64b}, + {0x0018000804010022, &upb_pom_1bt_max64b}, + {0x001800080502002a, &upb_pom_1bt_max64b}, + {0x0018000806030032, &upb_pom_1bt_max64b}, + {0x001800080704003a, &upb_pom_1bt_max64b}, + {0x0018000808050042, &upb_pom_1bt_max64b}, + {0x001800080906004a, &upb_pom_1bt_max128b}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Expr_msg_init_ptr = &cel__expr__Expr_msg_init; +static const upb_MiniTableField cel_expr_Expr_Ident__fields[1] = { + {1, 8, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Expr__Ident_msg_init = { + NULL, + &cel_expr_Expr_Ident__fields[0], + UPB_SIZE(16, 24), 1, kUpb_ExtMode_NonExtendable, 1, UPB_FASTTABLE_MASK(8), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Expr.Ident", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x000800003f00000a, &upb_pss_1bt}, + }) +}; + +const upb_MiniTable* cel__expr__Expr__Ident_msg_init_ptr = &cel__expr__Expr__Ident_msg_init; +static const upb_MiniTableSubInternal cel_expr_Expr_Select__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Expr_Select__fields[3] = { + {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, 16, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {3, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Expr__Select_msg_init = { + &cel_expr_Expr_Select__submsgs[0], + &cel_expr_Expr_Select__fields[0], + UPB_SIZE(24, 40), 3, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Expr.Select", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f000012, &upb_pss_1bt}, + {0x000900003f000018, &upb_psb1_1bt}, + }) +}; + +const upb_MiniTable* cel__expr__Expr__Select_msg_init_ptr = &cel__expr__Expr__Select_msg_init; +static const upb_MiniTableSubInternal cel_expr_Expr_Call__submsgs[2] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Expr_Call__fields[3] = { + {1, UPB_SIZE(12, 32), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(16, 40), 0, 1, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Expr__Call_msg_init = { + &cel_expr_Expr_Call__submsgs[0], + &cel_expr_Expr_Call__fields[0], + UPB_SIZE(32, 48), 3, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Expr.Call", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f000012, &upb_pss_1bt}, + {0x002800003f01001a, &upb_prm_1bt_max64b}, + }) +}; + +const upb_MiniTable* cel__expr__Expr__Call_msg_init_ptr = &cel__expr__Expr__Call_msg_init; +static const upb_MiniTableSubInternal cel_expr_Expr_CreateList__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Expr_CreateList__fields[2] = { + {1, 8, 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(12, 16), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Expr__CreateList_msg_init = { + &cel_expr_Expr_CreateList__submsgs[0], + &cel_expr_Expr_CreateList__fields[0], + UPB_SIZE(16, 24), 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Expr.CreateList", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x000800003f00000a, &upb_prm_1bt_max64b}, + {0x001000003f000012, &upb_ppv4_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Expr__CreateList_msg_init_ptr = &cel__expr__Expr__CreateList_msg_init; +static const upb_MiniTableSubInternal cel_expr_Expr_CreateStruct__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Expr__CreateStruct__Entry_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Expr_CreateStruct__fields[2] = { + {1, UPB_SIZE(12, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(8, 24), 0, 0, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Expr__CreateStruct_msg_init = { + &cel_expr_Expr_CreateStruct__submsgs[0], + &cel_expr_Expr_CreateStruct__fields[0], + UPB_SIZE(24, 32), 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Expr.CreateStruct", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x000800003f00000a, &upb_pss_1bt}, + {0x001800003f000012, &upb_prm_1bt_max64b}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Expr__CreateStruct_msg_init_ptr = &cel__expr__Expr__CreateStruct_msg_init; +static const upb_MiniTableSubInternal cel_expr_Expr_CreateStruct_Entry__submsgs[2] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Expr_CreateStruct_Entry__fields[5] = { + {1, 32, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(20, 16), UPB_SIZE(-17, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {4, UPB_SIZE(12, 40), 64, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {5, 9, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Expr__CreateStruct__Entry_msg_init = { + &cel_expr_Expr_CreateStruct_Entry__submsgs[0], + &cel_expr_Expr_CreateStruct_Entry__fields[0], + UPB_SIZE(40, 48), 5, kUpb_ExtMode_NonExtendable, 5, UPB_FASTTABLE_MASK(56), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Expr.CreateStruct.Entry", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x002000003f000008, &upb_psv8_1bt}, + {0x0010000c02000012, &upb_pos_1bt}, + {0x0010000c0300001a, &upb_pom_1bt_max64b}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x000900003f000028, &upb_psb1_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Expr__CreateStruct__Entry_msg_init_ptr = &cel__expr__Expr__CreateStruct__Entry_msg_init; +static const upb_MiniTableSubInternal cel_expr_Expr_Comprehension__submsgs[5] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Expr_Comprehension__fields[8] = { + {1, UPB_SIZE(32, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(12, 64), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(40, 32), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {4, UPB_SIZE(16, 72), 65, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {5, UPB_SIZE(20, 80), 66, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {6, UPB_SIZE(24, 88), 67, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {7, UPB_SIZE(28, 96), 68, 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {8, 48, 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Expr__Comprehension_msg_init = { + &cel_expr_Expr_Comprehension__submsgs[0], + &cel_expr_Expr_Comprehension__fields[0], + UPB_SIZE(56, 104), 8, kUpb_ExtMode_NonExtendable, 8, UPB_FASTTABLE_MASK(120), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Expr.Comprehension", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f00000a, &upb_pss_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x002000003f00001a, &upb_pss_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x003000003f000042, &upb_pss_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Expr__Comprehension_msg_init_ptr = &cel__expr__Expr__Comprehension_msg_init; +static const upb_MiniTableSubInternal cel_expr_Constant__submsgs[2] = { + {.UPB_PRIVATE(submsg) = &google__protobuf__Duration_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &google__protobuf__Timestamp_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_Constant__fields[9] = { + {1, 16, -9, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | (int)kUpb_LabelFlags_IsAlternate | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}, + {2, 16, -9, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}, + {3, 16, -9, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {4, 16, -9, kUpb_NoSub, 4, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {5, 16, -9, kUpb_NoSub, 1, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {6, 16, -9, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {7, 16, -9, kUpb_NoSub, 12, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {8, 16, -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {9, 16, -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__Constant_msg_init = { + &cel_expr_Constant__submsgs[0], + &cel_expr_Constant__fields[0], + UPB_SIZE(24, 32), 9, kUpb_ExtMode_NonExtendable, 9, UPB_FASTTABLE_MASK(120), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.Constant", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0010000801000008, &upb_pov4_1bt}, + {0x0010000802000010, &upb_pob1_1bt}, + {0x0010000803000018, &upb_pov8_1bt}, + {0x0010000804000020, &upb_pov8_1bt}, + {0x0010000805000029, &upb_pof8_1bt}, + {0x0010000806000032, &upb_pos_1bt}, + {0x001000080700003a, &upb_pob_1bt}, + {0x0010000808000042, &upb_pom_1bt_maxmaxb}, + {0x001000080901004a, &upb_pom_1bt_maxmaxb}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__Constant_msg_init_ptr = &cel__expr__Constant_msg_init; +static const upb_MiniTableSubInternal cel_expr_SourceInfo__submsgs[3] = { + {.UPB_PRIVATE(submsg) = &cel__expr__SourceInfo__PositionsEntry_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__SourceInfo__MacroCallsEntry_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__SourceInfo__Extension_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_SourceInfo__fields[6] = { + {1, UPB_SIZE(24, 8), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(32, 24), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(8, 40), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {4, UPB_SIZE(12, 48), 0, 0, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {5, UPB_SIZE(16, 56), 0, 1, 11, (int)kUpb_FieldMode_Map | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {6, UPB_SIZE(20, 64), 0, 2, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__SourceInfo_msg_init = { + &cel_expr_SourceInfo__submsgs[0], + &cel_expr_SourceInfo__fields[0], + UPB_SIZE(40, 72), 6, kUpb_ExtMode_NonExtendable, 6, UPB_FASTTABLE_MASK(56), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.SourceInfo", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x000800003f00000a, &upb_pss_1bt}, + {0x001800003f000012, &upb_pss_1bt}, + {0x002800003f00001a, &upb_ppv4_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x004000003f020032, &upb_prm_1bt_max64b}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__SourceInfo_msg_init_ptr = &cel__expr__SourceInfo_msg_init; +static const upb_MiniTableField cel_expr_SourceInfo_PositionsEntry__fields[2] = { + {1, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {2, 32, 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_4Byte << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__SourceInfo__PositionsEntry_msg_init = { + NULL, + &cel_expr_SourceInfo_PositionsEntry__fields[0], + 48, 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.SourceInfo.PositionsEntry", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f000008, &upb_psv8_1bt}, + {0x002000003f000010, &upb_psv4_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__SourceInfo__PositionsEntry_msg_init_ptr = &cel__expr__SourceInfo__PositionsEntry_msg_init; +static const upb_MiniTableSubInternal cel_expr_SourceInfo_MacroCallsEntry__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__Expr_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_SourceInfo_MacroCallsEntry__fields[2] = { + {1, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {2, 32, 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__SourceInfo__MacroCallsEntry_msg_init = { + &cel_expr_SourceInfo_MacroCallsEntry__submsgs[0], + &cel_expr_SourceInfo_MacroCallsEntry__fields[0], + 48, 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(8), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.SourceInfo.MacroCallsEntry", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f000008, &upb_psv8_1bt}, + }) +}; + +const upb_MiniTable* cel__expr__SourceInfo__MacroCallsEntry_msg_init_ptr = &cel__expr__SourceInfo__MacroCallsEntry_msg_init; +static const upb_MiniTableSubInternal cel_expr_SourceInfo_Extension__submsgs[1] = { + {.UPB_PRIVATE(submsg) = &cel__expr__SourceInfo__Extension__Version_msg_init_ptr}, +}; + +static const upb_MiniTableField cel_expr_SourceInfo_Extension__fields[3] = { + {1, UPB_SIZE(20, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(12, 32), 0, kUpb_NoSub, 5, (int)kUpb_FieldMode_Array | (int)kUpb_LabelFlags_IsPacked | (int)kUpb_LabelFlags_IsAlternate | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(16, 40), 64, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__SourceInfo__Extension_msg_init = { + &cel_expr_SourceInfo_Extension__submsgs[0], + &cel_expr_SourceInfo_Extension__fields[0], + UPB_SIZE(32, 48), 3, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.SourceInfo.Extension", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f00000a, &upb_pss_1bt}, + {0x002000003f000012, &upb_ppv4_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__SourceInfo__Extension_msg_init_ptr = &cel__expr__SourceInfo__Extension_msg_init; +static const upb_MiniTableField cel_expr_SourceInfo_Extension_Version__fields[2] = { + {1, 8, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, + {2, 16, 0, kUpb_NoSub, 3, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)}, +}; + +const upb_MiniTable cel__expr__SourceInfo__Extension__Version_msg_init = { + NULL, + &cel_expr_SourceInfo_Extension_Version__fields[0], + 24, 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(24), 0, +#ifdef UPB_TRACING_ENABLED + "cel.expr.SourceInfo.Extension.Version", +#endif + UPB_FASTTABLE_INIT({ + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x000800003f000008, &upb_psv8_1bt}, + {0x001000003f000010, &upb_psv8_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + }) +}; + +const upb_MiniTable* cel__expr__SourceInfo__Extension__Version_msg_init_ptr = &cel__expr__SourceInfo__Extension__Version_msg_init; +static const upb_MiniTable *messages_layout[15] = { + &cel__expr__ParsedExpr_msg_init, + &cel__expr__Expr_msg_init, + &cel__expr__Expr__Ident_msg_init, + &cel__expr__Expr__Select_msg_init, + &cel__expr__Expr__Call_msg_init, + &cel__expr__Expr__CreateList_msg_init, + &cel__expr__Expr__CreateStruct_msg_init, + &cel__expr__Expr__CreateStruct__Entry_msg_init, + &cel__expr__Expr__Comprehension_msg_init, + &cel__expr__Constant_msg_init, + &cel__expr__SourceInfo_msg_init, + &cel__expr__SourceInfo__PositionsEntry_msg_init, + &cel__expr__SourceInfo__MacroCallsEntry_msg_init, + &cel__expr__SourceInfo__Extension_msg_init, + &cel__expr__SourceInfo__Extension__Version_msg_init, +}; + +const upb_MiniTableFile cel_expr_syntax_proto_upb_file_layout = { + messages_layout, + NULL, + NULL, + 15, + 0, + 0, +}; + +#include "upb/port/undef.inc" + diff --git a/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h b/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h new file mode 100644 index 0000000000000..c1718f9108cdd --- /dev/null +++ b/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h @@ -0,0 +1,60 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/syntax.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + +#ifndef CEL_EXPR_SYNTAX_PROTO_UPB_H__UPB_MINITABLE_H_ +#define CEL_EXPR_SYNTAX_PROTO_UPB_H__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 cel__expr__ParsedExpr_msg_init; +extern const upb_MiniTable* cel__expr__ParsedExpr_msg_init_ptr; +extern const upb_MiniTable cel__expr__Expr_msg_init; +extern const upb_MiniTable* cel__expr__Expr_msg_init_ptr; +extern const upb_MiniTable cel__expr__Expr__Ident_msg_init; +extern const upb_MiniTable* cel__expr__Expr__Ident_msg_init_ptr; +extern const upb_MiniTable cel__expr__Expr__Select_msg_init; +extern const upb_MiniTable* cel__expr__Expr__Select_msg_init_ptr; +extern const upb_MiniTable cel__expr__Expr__Call_msg_init; +extern const upb_MiniTable* cel__expr__Expr__Call_msg_init_ptr; +extern const upb_MiniTable cel__expr__Expr__CreateList_msg_init; +extern const upb_MiniTable* cel__expr__Expr__CreateList_msg_init_ptr; +extern const upb_MiniTable cel__expr__Expr__CreateStruct_msg_init; +extern const upb_MiniTable* cel__expr__Expr__CreateStruct_msg_init_ptr; +extern const upb_MiniTable cel__expr__Expr__CreateStruct__Entry_msg_init; +extern const upb_MiniTable* cel__expr__Expr__CreateStruct__Entry_msg_init_ptr; +extern const upb_MiniTable cel__expr__Expr__Comprehension_msg_init; +extern const upb_MiniTable* cel__expr__Expr__Comprehension_msg_init_ptr; +extern const upb_MiniTable cel__expr__Constant_msg_init; +extern const upb_MiniTable* cel__expr__Constant_msg_init_ptr; +extern const upb_MiniTable cel__expr__SourceInfo_msg_init; +extern const upb_MiniTable* cel__expr__SourceInfo_msg_init_ptr; +extern const upb_MiniTable cel__expr__SourceInfo__PositionsEntry_msg_init; +extern const upb_MiniTable* cel__expr__SourceInfo__PositionsEntry_msg_init_ptr; +extern const upb_MiniTable cel__expr__SourceInfo__MacroCallsEntry_msg_init; +extern const upb_MiniTable* cel__expr__SourceInfo__MacroCallsEntry_msg_init_ptr; +extern const upb_MiniTable cel__expr__SourceInfo__Extension_msg_init; +extern const upb_MiniTable* cel__expr__SourceInfo__Extension_msg_init_ptr; +extern const upb_MiniTable cel__expr__SourceInfo__Extension__Version_msg_init; +extern const upb_MiniTable* cel__expr__SourceInfo__Extension__Version_msg_init_ptr; + +extern const upb_MiniTableFile cel_expr_syntax_proto_upb_file_layout; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port/undef.inc" + +#endif /* CEL_EXPR_SYNTAX_PROTO_UPB_H__UPB_MINITABLE_H_ */ diff --git a/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h b/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h index f985f4b93bd73..c00c8c296d5bf 100644 --- a/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +++ b/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h @@ -13,7 +13,6 @@ #include "xds/type/matcher/v3/cel.upb_minitable.h" -#include "xds/annotations/v3/status.upb_minitable.h" #include "xds/type/v3/cel.upb_minitable.h" #include "validate/validate.upb_minitable.h" diff --git a/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c b/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c index 1876ca4ea03f5..a552290a60d64 100644 --- a/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +++ b/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c @@ -9,7 +9,6 @@ #include #include "upb/generated_code_support.h" #include "xds/type/matcher/v3/cel.upb_minitable.h" -#include "xds/annotations/v3/status.upb_minitable.h" #include "xds/type/v3/cel.upb_minitable.h" #include "validate/validate.upb_minitable.h" diff --git a/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h b/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h index 261e81a0ba41a..49687269e5cb2 100644 --- a/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +++ b/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h @@ -13,7 +13,6 @@ #include "xds/type/matcher/v3/http_inputs.upb_minitable.h" -#include "xds/annotations/v3/status.upb_minitable.h" // Must be last. #include "upb/port/def.inc" diff --git a/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c b/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c index d7e8bf32e56e9..a6bcef5dbe457 100644 --- a/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +++ b/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c @@ -9,7 +9,6 @@ #include #include "upb/generated_code_support.h" #include "xds/type/matcher/v3/http_inputs.upb_minitable.h" -#include "xds/annotations/v3/status.upb_minitable.h" // Must be last. #include "upb/port/def.inc" diff --git a/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h b/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h index 0b55ba2b5a55b..7ab77827b86fc 100644 --- a/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +++ b/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h @@ -13,7 +13,6 @@ #include "xds/type/matcher/v3/matcher.upb_minitable.h" -#include "xds/annotations/v3/status.upb_minitable.h" #include "xds/core/v3/extension.upb_minitable.h" #include "xds/type/matcher/v3/string.upb_minitable.h" #include "validate/validate.upb_minitable.h" @@ -223,51 +222,63 @@ typedef enum { xds_type_matcher_v3_Matcher_OnMatch_on_match_NOT_SET = 0 } xds_type_matcher_v3_Matcher_OnMatch_on_match_oneofcases; UPB_INLINE xds_type_matcher_v3_Matcher_OnMatch_on_match_oneofcases xds_type_matcher_v3_Matcher_OnMatch_on_match_case(const xds_type_matcher_v3_Matcher_OnMatch* msg) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, 16, -13, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; return (xds_type_matcher_v3_Matcher_OnMatch_on_match_oneofcases)upb_Message_WhichOneofFieldNumber( UPB_UPCAST(msg), &field); } UPB_INLINE void xds_type_matcher_v3_Matcher_OnMatch_clear_on_match(xds_type_matcher_v3_Matcher_OnMatch* msg) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, 16, -13, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; upb_Message_ClearOneof(UPB_UPCAST(msg), &xds__type__matcher__v3__Matcher__OnMatch_msg_init, &field); } UPB_INLINE void xds_type_matcher_v3_Matcher_OnMatch_clear_matcher(xds_type_matcher_v3_Matcher_OnMatch* msg) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, 16, -13, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); } UPB_INLINE const xds_type_matcher_v3_Matcher* xds_type_matcher_v3_Matcher_OnMatch_matcher(const xds_type_matcher_v3_Matcher_OnMatch* msg) { const xds_type_matcher_v3_Matcher* default_val = NULL; const xds_type_matcher_v3_Matcher* ret; - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, 16, -13, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; UPB_PRIVATE(_upb_MiniTable_StrongReference)(&xds__type__matcher__v3__Matcher_msg_init); _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, &default_val, &ret); return ret; } UPB_INLINE bool xds_type_matcher_v3_Matcher_OnMatch_has_matcher(const xds_type_matcher_v3_Matcher_OnMatch* msg) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, 16, -13, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); } UPB_INLINE void xds_type_matcher_v3_Matcher_OnMatch_clear_action(xds_type_matcher_v3_Matcher_OnMatch* msg) { - const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {2, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); } UPB_INLINE const struct xds_core_v3_TypedExtensionConfig* xds_type_matcher_v3_Matcher_OnMatch_action(const xds_type_matcher_v3_Matcher_OnMatch* msg) { const struct xds_core_v3_TypedExtensionConfig* default_val = NULL; const struct xds_core_v3_TypedExtensionConfig* ret; - const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {2, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; UPB_PRIVATE(_upb_MiniTable_StrongReference)(&xds__core__v3__TypedExtensionConfig_msg_init); _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, &default_val, &ret); return ret; } UPB_INLINE bool xds_type_matcher_v3_Matcher_OnMatch_has_action(const xds_type_matcher_v3_Matcher_OnMatch* msg) { - const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {2, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); } +UPB_INLINE void xds_type_matcher_v3_Matcher_OnMatch_clear_keep_matching(xds_type_matcher_v3_Matcher_OnMatch* msg) { + const upb_MiniTableField field = {3, 8, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE bool xds_type_matcher_v3_Matcher_OnMatch_keep_matching(const xds_type_matcher_v3_Matcher_OnMatch* msg) { + bool default_val = false; + bool ret; + const upb_MiniTableField field = {3, 8, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} UPB_INLINE void xds_type_matcher_v3_Matcher_OnMatch_set_matcher(xds_type_matcher_v3_Matcher_OnMatch *msg, xds_type_matcher_v3_Matcher* value) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, 16, -13, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; UPB_PRIVATE(_upb_MiniTable_StrongReference)(&xds__type__matcher__v3__Matcher_msg_init); upb_Message_SetBaseField((upb_Message *)msg, &field, &value); } @@ -280,7 +291,7 @@ UPB_INLINE struct xds_type_matcher_v3_Matcher* xds_type_matcher_v3_Matcher_OnMat return sub; } UPB_INLINE void xds_type_matcher_v3_Matcher_OnMatch_set_action(xds_type_matcher_v3_Matcher_OnMatch *msg, struct xds_core_v3_TypedExtensionConfig* value) { - const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {2, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; UPB_PRIVATE(_upb_MiniTable_StrongReference)(&xds__core__v3__TypedExtensionConfig_msg_init); upb_Message_SetBaseField((upb_Message *)msg, &field, &value); } @@ -292,6 +303,10 @@ UPB_INLINE struct xds_core_v3_TypedExtensionConfig* xds_type_matcher_v3_Matcher_ } return sub; } +UPB_INLINE void xds_type_matcher_v3_Matcher_OnMatch_set_keep_matching(xds_type_matcher_v3_Matcher_OnMatch *msg, bool value) { + const upb_MiniTableField field = {3, 8, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} /* xds.type.matcher.v3.Matcher.MatcherList */ diff --git a/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c b/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c index 28289fb5055ff..0e02926e2ba24 100644 --- a/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +++ b/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c @@ -9,7 +9,6 @@ #include #include "upb/generated_code_support.h" #include "xds/type/matcher/v3/matcher.upb_minitable.h" -#include "xds/annotations/v3/status.upb_minitable.h" #include "xds/core/v3/extension.upb_minitable.h" #include "xds/type/matcher/v3/string.upb_minitable.h" #include "validate/validate.upb_minitable.h" @@ -51,23 +50,24 @@ static const upb_MiniTableSubInternal xds_type_matcher_v3_Matcher_OnMatch__subms {.UPB_PRIVATE(submsg) = &xds__core__v3__TypedExtensionConfig_msg_init_ptr}, }; -static const upb_MiniTableField xds_type_matcher_v3_Matcher_OnMatch__fields[2] = { - {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, - {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +static const upb_MiniTableField xds_type_matcher_v3_Matcher_OnMatch__fields[3] = { + {1, 16, -13, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {3, 8, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}, }; const upb_MiniTable xds__type__matcher__v3__Matcher__OnMatch_msg_init = { &xds_type_matcher_v3_Matcher_OnMatch__submsgs[0], &xds_type_matcher_v3_Matcher_OnMatch__fields[0], - UPB_SIZE(16, 24), 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(24), 0, + 24, 3, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(24), 0, #ifdef UPB_TRACING_ENABLED "xds.type.matcher.v3.Matcher.OnMatch", #endif UPB_FASTTABLE_INIT({ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, - {0x001000080100000a, &upb_pom_1bt_max64b}, - {0x0010000802010012, &upb_pom_1bt_maxmaxb}, - {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0010000c0100000a, &upb_pom_1bt_max64b}, + {0x0010000c02010012, &upb_pom_1bt_maxmaxb}, + {0x000800003f000018, &upb_psb1_1bt}, }) }; diff --git a/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h b/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h index 5d8c371f8992e..ec261938c331d 100644 --- a/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +++ b/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h @@ -13,6 +13,7 @@ #include "xds/type/matcher/v3/string.upb_minitable.h" +#include "xds/core/v3/extension.upb_minitable.h" #include "xds/type/matcher/v3/regex.upb_minitable.h" #include "validate/validate.upb_minitable.h" @@ -25,6 +26,7 @@ extern "C" { typedef struct xds_type_matcher_v3_StringMatcher { upb_Message UPB_PRIVATE(base); } xds_type_matcher_v3_StringMatcher; typedef struct xds_type_matcher_v3_ListStringMatcher { upb_Message UPB_PRIVATE(base); } xds_type_matcher_v3_ListStringMatcher; +struct xds_core_v3_TypedExtensionConfig; struct xds_type_matcher_v3_RegexMatcher; @@ -71,6 +73,7 @@ typedef enum { xds_type_matcher_v3_StringMatcher_match_pattern_suffix = 3, xds_type_matcher_v3_StringMatcher_match_pattern_safe_regex = 5, xds_type_matcher_v3_StringMatcher_match_pattern_contains = 7, + xds_type_matcher_v3_StringMatcher_match_pattern_custom = 8, xds_type_matcher_v3_StringMatcher_match_pattern_NOT_SET = 0 } xds_type_matcher_v3_StringMatcher_match_pattern_oneofcases; UPB_INLINE xds_type_matcher_v3_StringMatcher_match_pattern_oneofcases xds_type_matcher_v3_StringMatcher_match_pattern_case(const xds_type_matcher_v3_StringMatcher* msg) { @@ -175,6 +178,23 @@ UPB_INLINE bool xds_type_matcher_v3_StringMatcher_has_contains(const xds_type_ma const upb_MiniTableField field = {7, 16, -13, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); } +UPB_INLINE void xds_type_matcher_v3_StringMatcher_clear_custom(xds_type_matcher_v3_StringMatcher* msg) { + const upb_MiniTableField field = {8, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct xds_core_v3_TypedExtensionConfig* xds_type_matcher_v3_StringMatcher_custom(const xds_type_matcher_v3_StringMatcher* msg) { + const struct xds_core_v3_TypedExtensionConfig* default_val = NULL; + const struct xds_core_v3_TypedExtensionConfig* ret; + const upb_MiniTableField field = {8, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&xds__core__v3__TypedExtensionConfig_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool xds_type_matcher_v3_StringMatcher_has_custom(const xds_type_matcher_v3_StringMatcher* msg) { + const upb_MiniTableField field = {8, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} UPB_INLINE void xds_type_matcher_v3_StringMatcher_set_exact(xds_type_matcher_v3_StringMatcher *msg, upb_StringView value) { const upb_MiniTableField field = {1, 16, -13, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; @@ -209,6 +229,19 @@ UPB_INLINE void xds_type_matcher_v3_StringMatcher_set_contains(xds_type_matcher_ const upb_MiniTableField field = {7, 16, -13, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; upb_Message_SetBaseField((upb_Message *)msg, &field, &value); } +UPB_INLINE void xds_type_matcher_v3_StringMatcher_set_custom(xds_type_matcher_v3_StringMatcher *msg, struct xds_core_v3_TypedExtensionConfig* value) { + const upb_MiniTableField field = {8, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&xds__core__v3__TypedExtensionConfig_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct xds_core_v3_TypedExtensionConfig* xds_type_matcher_v3_StringMatcher_mutable_custom(xds_type_matcher_v3_StringMatcher* msg, upb_Arena* arena) { + struct xds_core_v3_TypedExtensionConfig* sub = (struct xds_core_v3_TypedExtensionConfig*)xds_type_matcher_v3_StringMatcher_custom(msg); + if (sub == NULL) { + sub = (struct xds_core_v3_TypedExtensionConfig*)_upb_Message_New(&xds__core__v3__TypedExtensionConfig_msg_init, arena); + if (sub) xds_type_matcher_v3_StringMatcher_set_custom(msg, sub); + } + return sub; +} /* xds.type.matcher.v3.ListStringMatcher */ diff --git a/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c b/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c index f51ab159c6f1b..a7704edd75458 100644 --- a/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +++ b/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c @@ -9,6 +9,7 @@ #include #include "upb/generated_code_support.h" #include "xds/type/matcher/v3/string.upb_minitable.h" +#include "xds/core/v3/extension.upb_minitable.h" #include "xds/type/matcher/v3/regex.upb_minitable.h" #include "validate/validate.upb_minitable.h" @@ -16,23 +17,25 @@ #include "upb/port/def.inc" extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_StaticallyTreeShaken); -static const upb_MiniTableSubInternal xds_type_matcher_v3_StringMatcher__submsgs[1] = { +static const upb_MiniTableSubInternal xds_type_matcher_v3_StringMatcher__submsgs[2] = { {.UPB_PRIVATE(submsg) = &xds__type__matcher__v3__RegexMatcher_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &xds__core__v3__TypedExtensionConfig_msg_init_ptr}, }; -static const upb_MiniTableField xds_type_matcher_v3_StringMatcher__fields[6] = { +static const upb_MiniTableField xds_type_matcher_v3_StringMatcher__fields[7] = { {1, 16, -13, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, {2, 16, -13, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, {3, 16, -13, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, {5, 16, -13, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, {6, 8, 0, kUpb_NoSub, 8, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)}, {7, 16, -13, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, + {8, 16, -13, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, }; const upb_MiniTable xds__type__matcher__v3__StringMatcher_msg_init = { &xds_type_matcher_v3_StringMatcher__submsgs[0], &xds_type_matcher_v3_StringMatcher__fields[0], - UPB_SIZE(24, 32), 6, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(56), 0, + UPB_SIZE(24, 32), 7, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(120), 0, #ifdef UPB_TRACING_ENABLED "xds.type.matcher.v3.StringMatcher", #endif @@ -45,6 +48,14 @@ const upb_MiniTable xds__type__matcher__v3__StringMatcher_msg_init = { {0x0010000c0500002a, &upb_pom_1bt_maxmaxb}, {0x000800003f000030, &upb_psb1_1bt}, {0x0010000c0700003a, &upb_pos_1bt}, + {0x0010000c08010042, &upb_pom_1bt_maxmaxb}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, }) }; diff --git a/src/core/ext/upb-gen/xds/type/v3/cel.upb.h b/src/core/ext/upb-gen/xds/type/v3/cel.upb.h index bf4eb08fc12d0..3e50b6515b21d 100644 --- a/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +++ b/src/core/ext/upb-gen/xds/type/v3/cel.upb.h @@ -15,6 +15,8 @@ #include "google/api/expr/v1alpha1/checked.upb_minitable.h" #include "google/api/expr/v1alpha1/syntax.upb_minitable.h" +#include "cel/expr/checked.upb_minitable.h" +#include "cel/expr/syntax.upb_minitable.h" #include "google/protobuf/wrappers.upb_minitable.h" #include "xds/annotations/v3/status.upb_minitable.h" #include "validate/validate.upb_minitable.h" @@ -28,6 +30,8 @@ extern "C" { typedef struct xds_type_v3_CelExpression { upb_Message UPB_PRIVATE(base); } xds_type_v3_CelExpression; typedef struct xds_type_v3_CelExtractString { upb_Message UPB_PRIVATE(base); } xds_type_v3_CelExtractString; +struct cel_expr_CheckedExpr; +struct cel_expr_ParsedExpr; struct google_api_expr_v1alpha1_CheckedExpr; struct google_api_expr_v1alpha1_ParsedExpr; struct google_protobuf_StringValue; @@ -76,51 +80,97 @@ typedef enum { xds_type_v3_CelExpression_expr_specifier_NOT_SET = 0 } xds_type_v3_CelExpression_expr_specifier_oneofcases; UPB_INLINE xds_type_v3_CelExpression_expr_specifier_oneofcases xds_type_v3_CelExpression_expr_specifier_case(const xds_type_v3_CelExpression* msg) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; return (xds_type_v3_CelExpression_expr_specifier_oneofcases)upb_Message_WhichOneofFieldNumber( UPB_UPCAST(msg), &field); } UPB_INLINE void xds_type_v3_CelExpression_clear_expr_specifier(xds_type_v3_CelExpression* msg) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; upb_Message_ClearOneof(UPB_UPCAST(msg), &xds__type__v3__CelExpression_msg_init, &field); } UPB_INLINE void xds_type_v3_CelExpression_clear_parsed_expr(xds_type_v3_CelExpression* msg) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); } UPB_INLINE const struct google_api_expr_v1alpha1_ParsedExpr* xds_type_v3_CelExpression_parsed_expr(const xds_type_v3_CelExpression* msg) { const struct google_api_expr_v1alpha1_ParsedExpr* default_val = NULL; const struct google_api_expr_v1alpha1_ParsedExpr* ret; - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__api__expr__v1alpha1__ParsedExpr_msg_init); _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, &default_val, &ret); return ret; } UPB_INLINE bool xds_type_v3_CelExpression_has_parsed_expr(const xds_type_v3_CelExpression* msg) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); } UPB_INLINE void xds_type_v3_CelExpression_clear_checked_expr(xds_type_v3_CelExpression* msg) { - const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {2, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); } UPB_INLINE const struct google_api_expr_v1alpha1_CheckedExpr* xds_type_v3_CelExpression_checked_expr(const xds_type_v3_CelExpression* msg) { const struct google_api_expr_v1alpha1_CheckedExpr* default_val = NULL; const struct google_api_expr_v1alpha1_CheckedExpr* ret; - const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {2, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__api__expr__v1alpha1__CheckedExpr_msg_init); _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, &default_val, &ret); return ret; } UPB_INLINE bool xds_type_v3_CelExpression_has_checked_expr(const xds_type_v3_CelExpression* msg) { - const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {2, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); } +UPB_INLINE void xds_type_v3_CelExpression_clear_cel_expr_parsed(xds_type_v3_CelExpression* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct cel_expr_ParsedExpr* xds_type_v3_CelExpression_cel_expr_parsed(const xds_type_v3_CelExpression* msg) { + const struct cel_expr_ParsedExpr* default_val = NULL; + const struct cel_expr_ParsedExpr* ret; + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__ParsedExpr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool xds_type_v3_CelExpression_has_cel_expr_parsed(const xds_type_v3_CelExpression* msg) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void xds_type_v3_CelExpression_clear_cel_expr_checked(xds_type_v3_CelExpression* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(16, 40), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE const struct cel_expr_CheckedExpr* xds_type_v3_CelExpression_cel_expr_checked(const xds_type_v3_CelExpression* msg) { + const struct cel_expr_CheckedExpr* default_val = NULL; + const struct cel_expr_CheckedExpr* ret; + const upb_MiniTableField field = {4, UPB_SIZE(16, 40), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr_msg_init); + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} +UPB_INLINE bool xds_type_v3_CelExpression_has_cel_expr_checked(const xds_type_v3_CelExpression* msg) { + const upb_MiniTableField field = {4, UPB_SIZE(16, 40), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + return upb_Message_HasBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE void xds_type_v3_CelExpression_clear_cel_expr_string(xds_type_v3_CelExpression* msg) { + const upb_MiniTableField field = {5, UPB_SIZE(28, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_ClearBaseField(UPB_UPCAST(msg), &field); +} +UPB_INLINE upb_StringView xds_type_v3_CelExpression_cel_expr_string(const xds_type_v3_CelExpression* msg) { + upb_StringView default_val = upb_StringView_FromString(""); + upb_StringView ret; + const upb_MiniTableField field = {5, UPB_SIZE(28, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + _upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field, + &default_val, &ret); + return ret; +} UPB_INLINE void xds_type_v3_CelExpression_set_parsed_expr(xds_type_v3_CelExpression *msg, struct google_api_expr_v1alpha1_ParsedExpr* value) { - const upb_MiniTableField field = {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {1, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__api__expr__v1alpha1__ParsedExpr_msg_init); upb_Message_SetBaseField((upb_Message *)msg, &field, &value); } @@ -133,7 +183,7 @@ UPB_INLINE struct google_api_expr_v1alpha1_ParsedExpr* xds_type_v3_CelExpression return sub; } UPB_INLINE void xds_type_v3_CelExpression_set_checked_expr(xds_type_v3_CelExpression *msg, struct google_api_expr_v1alpha1_CheckedExpr* value) { - const upb_MiniTableField field = {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + const upb_MiniTableField field = {2, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; UPB_PRIVATE(_upb_MiniTable_StrongReference)(&google__api__expr__v1alpha1__CheckedExpr_msg_init); upb_Message_SetBaseField((upb_Message *)msg, &field, &value); } @@ -145,6 +195,36 @@ UPB_INLINE struct google_api_expr_v1alpha1_CheckedExpr* xds_type_v3_CelExpressio } return sub; } +UPB_INLINE void xds_type_v3_CelExpression_set_cel_expr_parsed(xds_type_v3_CelExpression *msg, struct cel_expr_ParsedExpr* value) { + const upb_MiniTableField field = {3, UPB_SIZE(12, 32), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__ParsedExpr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_ParsedExpr* xds_type_v3_CelExpression_mutable_cel_expr_parsed(xds_type_v3_CelExpression* msg, upb_Arena* arena) { + struct cel_expr_ParsedExpr* sub = (struct cel_expr_ParsedExpr*)xds_type_v3_CelExpression_cel_expr_parsed(msg); + if (sub == NULL) { + sub = (struct cel_expr_ParsedExpr*)_upb_Message_New(&cel__expr__ParsedExpr_msg_init, arena); + if (sub) xds_type_v3_CelExpression_set_cel_expr_parsed(msg, sub); + } + return sub; +} +UPB_INLINE void xds_type_v3_CelExpression_set_cel_expr_checked(xds_type_v3_CelExpression *msg, struct cel_expr_CheckedExpr* value) { + const upb_MiniTableField field = {4, UPB_SIZE(16, 40), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}; + UPB_PRIVATE(_upb_MiniTable_StrongReference)(&cel__expr__CheckedExpr_msg_init); + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} +UPB_INLINE struct cel_expr_CheckedExpr* xds_type_v3_CelExpression_mutable_cel_expr_checked(xds_type_v3_CelExpression* msg, upb_Arena* arena) { + struct cel_expr_CheckedExpr* sub = (struct cel_expr_CheckedExpr*)xds_type_v3_CelExpression_cel_expr_checked(msg); + if (sub == NULL) { + sub = (struct cel_expr_CheckedExpr*)_upb_Message_New(&cel__expr__CheckedExpr_msg_init, arena); + if (sub) xds_type_v3_CelExpression_set_cel_expr_checked(msg, sub); + } + return sub; +} +UPB_INLINE void xds_type_v3_CelExpression_set_cel_expr_string(xds_type_v3_CelExpression *msg, upb_StringView value) { + const upb_MiniTableField field = {5, UPB_SIZE(28, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}; + upb_Message_SetBaseField((upb_Message *)msg, &field, &value); +} /* xds.type.v3.CelExtractString */ diff --git a/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c b/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c index ce3944ad1aafc..de769074f25b0 100644 --- a/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +++ b/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c @@ -11,6 +11,8 @@ #include "xds/type/v3/cel.upb_minitable.h" #include "google/api/expr/v1alpha1/checked.upb_minitable.h" #include "google/api/expr/v1alpha1/syntax.upb_minitable.h" +#include "cel/expr/checked.upb_minitable.h" +#include "cel/expr/syntax.upb_minitable.h" #include "google/protobuf/wrappers.upb_minitable.h" #include "xds/annotations/v3/status.upb_minitable.h" #include "validate/validate.upb_minitable.h" @@ -19,27 +21,36 @@ #include "upb/port/def.inc" extern const struct upb_MiniTable UPB_PRIVATE(_kUpb_MiniTable_StaticallyTreeShaken); -static const upb_MiniTableSubInternal xds_type_v3_CelExpression__submsgs[2] = { +static const upb_MiniTableSubInternal xds_type_v3_CelExpression__submsgs[4] = { {.UPB_PRIVATE(submsg) = &google__api__expr__v1alpha1__ParsedExpr_msg_init_ptr}, {.UPB_PRIVATE(submsg) = &google__api__expr__v1alpha1__CheckedExpr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__ParsedExpr_msg_init_ptr}, + {.UPB_PRIVATE(submsg) = &cel__expr__CheckedExpr_msg_init_ptr}, }; -static const upb_MiniTableField xds_type_v3_CelExpression__fields[2] = { - {1, UPB_SIZE(12, 16), -9, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, - {2, UPB_SIZE(12, 16), -9, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, +static const upb_MiniTableField xds_type_v3_CelExpression__fields[5] = { + {1, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {2, UPB_SIZE(24, 48), UPB_SIZE(-21, -13), 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {3, UPB_SIZE(12, 32), 64, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {4, UPB_SIZE(16, 40), 65, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)}, + {5, UPB_SIZE(28, 16), 0, kUpb_NoSub, 9, (int)kUpb_FieldMode_Scalar | ((int)kUpb_FieldRep_StringView << kUpb_FieldRep_Shift)}, }; const upb_MiniTable xds__type__v3__CelExpression_msg_init = { &xds_type_v3_CelExpression__submsgs[0], &xds_type_v3_CelExpression__fields[0], - UPB_SIZE(16, 24), 2, kUpb_ExtMode_NonExtendable, 2, UPB_FASTTABLE_MASK(24), 0, + UPB_SIZE(40, 56), 5, kUpb_ExtMode_NonExtendable, 5, UPB_FASTTABLE_MASK(56), 0, #ifdef UPB_TRACING_ENABLED "xds.type.v3.CelExpression", #endif UPB_FASTTABLE_INIT({ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, - {0x001000080100000a, &upb_pom_1bt_maxmaxb}, - {0x0010000802010012, &upb_pom_1bt_maxmaxb}, + {0x0030000c0100000a, &upb_pom_1bt_maxmaxb}, + {0x0030000c02010012, &upb_pom_1bt_maxmaxb}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, + {0x001000003f00002a, &upb_pss_1bt}, + {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric}, }) }; diff --git a/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c b/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c new file mode 100644 index 0000000000000..f8dc075f78f06 --- /dev/null +++ b/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c @@ -0,0 +1,248 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/checked.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + + +#include "upb/reflection/def.h" +#include "cel/expr/checked.upbdefs.h" +#include "cel/expr/checked.upb_minitable.h" + +extern _upb_DefPool_Init cel_expr_syntax_proto_upbdefinit; +extern _upb_DefPool_Init google_protobuf_empty_proto_upbdefinit; +extern _upb_DefPool_Init google_protobuf_struct_proto_upbdefinit; + +static const char descriptor[2579] = { + '\n', '\026', 'c', 'e', 'l', '/', 'e', 'x', 'p', 'r', '/', 'c', + 'h', 'e', 'c', 'k', 'e', 'd', '.', 'p', 'r', 'o', 't', 'o', + '\022', '\010', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '\032', '\025', + 'c', 'e', 'l', '/', 'e', 'x', 'p', 'r', '/', 's', 'y', 'n', + 't', 'a', 'x', '.', 'p', 'r', 'o', 't', 'o', '\032', '\033', 'g', + 'o', 'o', 'g', 'l', 'e', '/', 'p', 'r', 'o', 't', 'o', 'b', + 'u', 'f', '/', 'e', 'm', 'p', 't', 'y', '.', 'p', 'r', 'o', + 't', 'o', '\032', '\034', 'g', 'o', 'o', 'g', 'l', 'e', '/', 'p', + 'r', 'o', 't', 'o', 'b', 'u', 'f', '/', 's', 't', 'r', 'u', + 'c', 't', '.', 'p', 'r', 'o', 't', 'o', '\"', '\272', '\003', '\n', + '\013', 'C', 'h', 'e', 'c', 'k', 'e', 'd', 'E', 'x', 'p', 'r', + '\022', 'L', '\n', '\r', 'r', 'e', 'f', 'e', 'r', 'e', 'n', 'c', + 'e', '_', 'm', 'a', 'p', '\030', '\002', ' ', '\003', '(', '\013', '2', + '\'', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'C', + 'h', 'e', 'c', 'k', 'e', 'd', 'E', 'x', 'p', 'r', '.', 'R', + 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 'M', 'a', 'p', 'E', + 'n', 't', 'r', 'y', 'R', '\014', 'r', 'e', 'f', 'e', 'r', 'e', + 'n', 'c', 'e', 'M', 'a', 'p', '\022', '=', '\n', '\010', 't', 'y', + 'p', 'e', '_', 'm', 'a', 'p', '\030', '\003', ' ', '\003', '(', '\013', + '2', '\"', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', + 'C', 'h', 'e', 'c', 'k', 'e', 'd', 'E', 'x', 'p', 'r', '.', + 'T', 'y', 'p', 'e', 'M', 'a', 'p', 'E', 'n', 't', 'r', 'y', + 'R', '\007', 't', 'y', 'p', 'e', 'M', 'a', 'p', '\022', '5', '\n', + '\013', 's', 'o', 'u', 'r', 'c', 'e', '_', 'i', 'n', 'f', 'o', + '\030', '\005', ' ', '\001', '(', '\013', '2', '\024', '.', 'c', 'e', 'l', + '.', 'e', 'x', 'p', 'r', '.', 'S', 'o', 'u', 'r', 'c', 'e', + 'I', 'n', 'f', 'o', 'R', '\n', 's', 'o', 'u', 'r', 'c', 'e', + 'I', 'n', 'f', 'o', '\022', '!', '\n', '\014', 'e', 'x', 'p', 'r', + '_', 'v', 'e', 'r', 's', 'i', 'o', 'n', '\030', '\006', ' ', '\001', + '(', '\t', 'R', '\013', 'e', 'x', 'p', 'r', 'V', 'e', 'r', 's', + 'i', 'o', 'n', '\022', '\"', '\n', '\004', 'e', 'x', 'p', 'r', '\030', + '\004', ' ', '\001', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', + 'e', 'x', 'p', 'r', '.', 'E', 'x', 'p', 'r', 'R', '\004', 'e', + 'x', 'p', 'r', '\032', 'T', '\n', '\021', 'R', 'e', 'f', 'e', 'r', + 'e', 'n', 'c', 'e', 'M', 'a', 'p', 'E', 'n', 't', 'r', 'y', + '\022', '\020', '\n', '\003', 'k', 'e', 'y', '\030', '\001', ' ', '\001', '(', + '\003', 'R', '\003', 'k', 'e', 'y', '\022', ')', '\n', '\005', 'v', 'a', + 'l', 'u', 'e', '\030', '\002', ' ', '\001', '(', '\013', '2', '\023', '.', + 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'R', 'e', 'f', + 'e', 'r', 'e', 'n', 'c', 'e', 'R', '\005', 'v', 'a', 'l', 'u', + 'e', ':', '\002', '8', '\001', '\032', 'J', '\n', '\014', 'T', 'y', 'p', + 'e', 'M', 'a', 'p', 'E', 'n', 't', 'r', 'y', '\022', '\020', '\n', + '\003', 'k', 'e', 'y', '\030', '\001', ' ', '\001', '(', '\003', 'R', '\003', + 'k', 'e', 'y', '\022', '$', '\n', '\005', 'v', 'a', 'l', 'u', 'e', + '\030', '\002', ' ', '\001', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', + '.', 'e', 'x', 'p', 'r', '.', 'T', 'y', 'p', 'e', 'R', '\005', + 'v', 'a', 'l', 'u', 'e', ':', '\002', '8', '\001', '\"', '\346', '\t', + '\n', '\004', 'T', 'y', 'p', 'e', '\022', '*', '\n', '\003', 'd', 'y', + 'n', '\030', '\001', ' ', '\001', '(', '\013', '2', '\026', '.', 'g', 'o', + 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', + 'f', '.', 'E', 'm', 'p', 't', 'y', 'H', '\000', 'R', '\003', 'd', + 'y', 'n', '\022', '0', '\n', '\004', 'n', 'u', 'l', 'l', '\030', '\002', + ' ', '\001', '(', '\016', '2', '\032', '.', 'g', 'o', 'o', 'g', 'l', + 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'N', + 'u', 'l', 'l', 'V', 'a', 'l', 'u', 'e', 'H', '\000', 'R', '\004', + 'n', 'u', 'l', 'l', '\022', '<', '\n', '\t', 'p', 'r', 'i', 'm', + 'i', 't', 'i', 'v', 'e', '\030', '\003', ' ', '\001', '(', '\016', '2', + '\034', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'T', + 'y', 'p', 'e', '.', 'P', 'r', 'i', 'm', 'i', 't', 'i', 'v', + 'e', 'T', 'y', 'p', 'e', 'H', '\000', 'R', '\t', 'p', 'r', 'i', + 'm', 'i', 't', 'i', 'v', 'e', '\022', '8', '\n', '\007', 'w', 'r', + 'a', 'p', 'p', 'e', 'r', '\030', '\004', ' ', '\001', '(', '\016', '2', + '\034', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'T', + 'y', 'p', 'e', '.', 'P', 'r', 'i', 'm', 'i', 't', 'i', 'v', + 'e', 'T', 'y', 'p', 'e', 'H', '\000', 'R', '\007', 'w', 'r', 'a', + 'p', 'p', 'e', 'r', '\022', '=', '\n', '\n', 'w', 'e', 'l', 'l', + '_', 'k', 'n', 'o', 'w', 'n', '\030', '\005', ' ', '\001', '(', '\016', + '2', '\034', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', + 'T', 'y', 'p', 'e', '.', 'W', 'e', 'l', 'l', 'K', 'n', 'o', + 'w', 'n', 'T', 'y', 'p', 'e', 'H', '\000', 'R', '\t', 'w', 'e', + 'l', 'l', 'K', 'n', 'o', 'w', 'n', '\022', '6', '\n', '\t', 'l', + 'i', 's', 't', '_', 't', 'y', 'p', 'e', '\030', '\006', ' ', '\001', + '(', '\013', '2', '\027', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'T', 'y', 'p', 'e', '.', 'L', 'i', 's', 't', 'T', + 'y', 'p', 'e', 'H', '\000', 'R', '\010', 'l', 'i', 's', 't', 'T', + 'y', 'p', 'e', '\022', '3', '\n', '\010', 'm', 'a', 'p', '_', 't', + 'y', 'p', 'e', '\030', '\007', ' ', '\001', '(', '\013', '2', '\026', '.', + 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'T', 'y', 'p', + 'e', '.', 'M', 'a', 'p', 'T', 'y', 'p', 'e', 'H', '\000', 'R', + '\007', 'm', 'a', 'p', 'T', 'y', 'p', 'e', '\022', '9', '\n', '\010', + 'f', 'u', 'n', 'c', 't', 'i', 'o', 'n', '\030', '\010', ' ', '\001', + '(', '\013', '2', '\033', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'T', 'y', 'p', 'e', '.', 'F', 'u', 'n', 'c', 't', + 'i', 'o', 'n', 'T', 'y', 'p', 'e', 'H', '\000', 'R', '\010', 'f', + 'u', 'n', 'c', 't', 'i', 'o', 'n', '\022', '#', '\n', '\014', 'm', + 'e', 's', 's', 'a', 'g', 'e', '_', 't', 'y', 'p', 'e', '\030', + '\t', ' ', '\001', '(', '\t', 'H', '\000', 'R', '\013', 'm', 'e', 's', + 's', 'a', 'g', 'e', 'T', 'y', 'p', 'e', '\022', '\037', '\n', '\n', + 't', 'y', 'p', 'e', '_', 'p', 'a', 'r', 'a', 'm', '\030', '\n', + ' ', '\001', '(', '\t', 'H', '\000', 'R', '\t', 't', 'y', 'p', 'e', + 'P', 'a', 'r', 'a', 'm', '\022', '$', '\n', '\004', 't', 'y', 'p', + 'e', '\030', '\013', ' ', '\001', '(', '\013', '2', '\016', '.', 'c', 'e', + 'l', '.', 'e', 'x', 'p', 'r', '.', 'T', 'y', 'p', 'e', 'H', + '\000', 'R', '\004', 't', 'y', 'p', 'e', '\022', '.', '\n', '\005', 'e', + 'r', 'r', 'o', 'r', '\030', '\014', ' ', '\001', '(', '\013', '2', '\026', + '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', + 'o', 'b', 'u', 'f', '.', 'E', 'm', 'p', 't', 'y', 'H', '\000', + 'R', '\005', 'e', 'r', 'r', 'o', 'r', '\022', 'B', '\n', '\r', 'a', + 'b', 's', 't', 'r', 'a', 'c', 't', '_', 't', 'y', 'p', 'e', + '\030', '\016', ' ', '\001', '(', '\013', '2', '\033', '.', 'c', 'e', 'l', + '.', 'e', 'x', 'p', 'r', '.', 'T', 'y', 'p', 'e', '.', 'A', + 'b', 's', 't', 'r', 'a', 'c', 't', 'T', 'y', 'p', 'e', 'H', + '\000', 'R', '\014', 'a', 'b', 's', 't', 'r', 'a', 'c', 't', 'T', + 'y', 'p', 'e', '\032', '7', '\n', '\010', 'L', 'i', 's', 't', 'T', + 'y', 'p', 'e', '\022', '+', '\n', '\t', 'e', 'l', 'e', 'm', '_', + 't', 'y', 'p', 'e', '\030', '\001', ' ', '\001', '(', '\013', '2', '\016', + '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'T', 'y', + 'p', 'e', 'R', '\010', 'e', 'l', 'e', 'm', 'T', 'y', 'p', 'e', + '\032', 'c', '\n', '\007', 'M', 'a', 'p', 'T', 'y', 'p', 'e', '\022', + ')', '\n', '\010', 'k', 'e', 'y', '_', 't', 'y', 'p', 'e', '\030', + '\001', ' ', '\001', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', + 'e', 'x', 'p', 'r', '.', 'T', 'y', 'p', 'e', 'R', '\007', 'k', + 'e', 'y', 'T', 'y', 'p', 'e', '\022', '-', '\n', '\n', 'v', 'a', + 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', '\030', '\002', ' ', '\001', + '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'T', 'y', 'p', 'e', 'R', '\t', 'v', 'a', 'l', 'u', + 'e', 'T', 'y', 'p', 'e', '\032', 'l', '\n', '\014', 'F', 'u', 'n', + 'c', 't', 'i', 'o', 'n', 'T', 'y', 'p', 'e', '\022', '/', '\n', + '\013', 'r', 'e', 's', 'u', 'l', 't', '_', 't', 'y', 'p', 'e', + '\030', '\001', ' ', '\001', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', + '.', 'e', 'x', 'p', 'r', '.', 'T', 'y', 'p', 'e', 'R', '\n', + 'r', 'e', 's', 'u', 'l', 't', 'T', 'y', 'p', 'e', '\022', '+', + '\n', '\t', 'a', 'r', 'g', '_', 't', 'y', 'p', 'e', 's', '\030', + '\002', ' ', '\003', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', + 'e', 'x', 'p', 'r', '.', 'T', 'y', 'p', 'e', 'R', '\010', 'a', + 'r', 'g', 'T', 'y', 'p', 'e', 's', '\032', '[', '\n', '\014', 'A', + 'b', 's', 't', 'r', 'a', 'c', 't', 'T', 'y', 'p', 'e', '\022', + '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030', '\001', ' ', '\001', '(', + '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', '7', '\n', '\017', 'p', + 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', '_', 't', 'y', 'p', + 'e', 's', '\030', '\002', ' ', '\003', '(', '\013', '2', '\016', '.', 'c', + 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'T', 'y', 'p', 'e', + 'R', '\016', 'p', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 'T', + 'y', 'p', 'e', 's', '\"', 's', '\n', '\r', 'P', 'r', 'i', 'm', + 'i', 't', 'i', 'v', 'e', 'T', 'y', 'p', 'e', '\022', '\036', '\n', + '\032', 'P', 'R', 'I', 'M', 'I', 'T', 'I', 'V', 'E', '_', 'T', + 'Y', 'P', 'E', '_', 'U', 'N', 'S', 'P', 'E', 'C', 'I', 'F', + 'I', 'E', 'D', '\020', '\000', '\022', '\010', '\n', '\004', 'B', 'O', 'O', + 'L', '\020', '\001', '\022', '\t', '\n', '\005', 'I', 'N', 'T', '6', '4', + '\020', '\002', '\022', '\n', '\n', '\006', 'U', 'I', 'N', 'T', '6', '4', + '\020', '\003', '\022', '\n', '\n', '\006', 'D', 'O', 'U', 'B', 'L', 'E', + '\020', '\004', '\022', '\n', '\n', '\006', 'S', 'T', 'R', 'I', 'N', 'G', + '\020', '\005', '\022', '\t', '\n', '\005', 'B', 'Y', 'T', 'E', 'S', '\020', + '\006', '\"', 'V', '\n', '\r', 'W', 'e', 'l', 'l', 'K', 'n', 'o', + 'w', 'n', 'T', 'y', 'p', 'e', '\022', '\037', '\n', '\033', 'W', 'E', + 'L', 'L', '_', 'K', 'N', 'O', 'W', 'N', '_', 'T', 'Y', 'P', + 'E', '_', 'U', 'N', 'S', 'P', 'E', 'C', 'I', 'F', 'I', 'E', + 'D', '\020', '\000', '\022', '\007', '\n', '\003', 'A', 'N', 'Y', '\020', '\001', + '\022', '\r', '\n', '\t', 'T', 'I', 'M', 'E', 'S', 'T', 'A', 'M', + 'P', '\020', '\002', '\022', '\014', '\n', '\010', 'D', 'U', 'R', 'A', 'T', + 'I', 'O', 'N', '\020', '\003', 'B', '\013', '\n', '\t', 't', 'y', 'p', + 'e', '_', 'k', 'i', 'n', 'd', '\"', '\324', '\004', '\n', '\004', 'D', + 'e', 'c', 'l', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030', + '\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\022', + '0', '\n', '\005', 'i', 'd', 'e', 'n', 't', '\030', '\002', ' ', '\001', + '(', '\013', '2', '\030', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'D', 'e', 'c', 'l', '.', 'I', 'd', 'e', 'n', 't', + 'D', 'e', 'c', 'l', 'H', '\000', 'R', '\005', 'i', 'd', 'e', 'n', + 't', '\022', '9', '\n', '\010', 'f', 'u', 'n', 'c', 't', 'i', 'o', + 'n', '\030', '\003', ' ', '\001', '(', '\013', '2', '\033', '.', 'c', 'e', + 'l', '.', 'e', 'x', 'p', 'r', '.', 'D', 'e', 'c', 'l', '.', + 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 'D', 'e', 'c', 'l', + 'H', '\000', 'R', '\010', 'f', 'u', 'n', 'c', 't', 'i', 'o', 'n', + '\032', 'k', '\n', '\t', 'I', 'd', 'e', 'n', 't', 'D', 'e', 'c', + 'l', '\022', '\"', '\n', '\004', 't', 'y', 'p', 'e', '\030', '\001', ' ', + '\001', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', + 'p', 'r', '.', 'T', 'y', 'p', 'e', 'R', '\004', 't', 'y', 'p', + 'e', '\022', '(', '\n', '\005', 'v', 'a', 'l', 'u', 'e', '\030', '\002', + ' ', '\001', '(', '\013', '2', '\022', '.', 'c', 'e', 'l', '.', 'e', + 'x', 'p', 'r', '.', 'C', 'o', 'n', 's', 't', 'a', 'n', 't', + 'R', '\005', 'v', 'a', 'l', 'u', 'e', '\022', '\020', '\n', '\003', 'd', + 'o', 'c', '\030', '\003', ' ', '\001', '(', '\t', 'R', '\003', 'd', 'o', + 'c', '\032', '\320', '\002', '\n', '\014', 'F', 'u', 'n', 'c', 't', 'i', + 'o', 'n', 'D', 'e', 'c', 'l', '\022', 'B', '\n', '\t', 'o', 'v', + 'e', 'r', 'l', 'o', 'a', 'd', 's', '\030', '\001', ' ', '\003', '(', + '\013', '2', '$', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', + '.', 'D', 'e', 'c', 'l', '.', 'F', 'u', 'n', 'c', 't', 'i', + 'o', 'n', 'D', 'e', 'c', 'l', '.', 'O', 'v', 'e', 'r', 'l', + 'o', 'a', 'd', 'R', '\t', 'o', 'v', 'e', 'r', 'l', 'o', 'a', + 'd', 's', '\022', '\020', '\n', '\003', 'd', 'o', 'c', '\030', '\002', ' ', + '\001', '(', '\t', 'R', '\003', 'd', 'o', 'c', '\032', '\351', '\001', '\n', + '\010', 'O', 'v', 'e', 'r', 'l', 'o', 'a', 'd', '\022', '\037', '\n', + '\013', 'o', 'v', 'e', 'r', 'l', 'o', 'a', 'd', '_', 'i', 'd', + '\030', '\001', ' ', '\001', '(', '\t', 'R', '\n', 'o', 'v', 'e', 'r', + 'l', 'o', 'a', 'd', 'I', 'd', '\022', '&', '\n', '\006', 'p', 'a', + 'r', 'a', 'm', 's', '\030', '\002', ' ', '\003', '(', '\013', '2', '\016', + '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'T', 'y', + 'p', 'e', 'R', '\006', 'p', 'a', 'r', 'a', 'm', 's', '\022', '\037', + '\n', '\013', 't', 'y', 'p', 'e', '_', 'p', 'a', 'r', 'a', 'm', + 's', '\030', '\003', ' ', '\003', '(', '\t', 'R', '\n', 't', 'y', 'p', + 'e', 'P', 'a', 'r', 'a', 'm', 's', '\022', '/', '\n', '\013', 'r', + 'e', 's', 'u', 'l', 't', '_', 't', 'y', 'p', 'e', '\030', '\004', + ' ', '\001', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', 'e', + 'x', 'p', 'r', '.', 'T', 'y', 'p', 'e', 'R', '\n', 'r', 'e', + 's', 'u', 'l', 't', 'T', 'y', 'p', 'e', '\022', '0', '\n', '\024', + 'i', 's', '_', 'i', 'n', 's', 't', 'a', 'n', 'c', 'e', '_', + 'f', 'u', 'n', 'c', 't', 'i', 'o', 'n', '\030', '\005', ' ', '\001', + '(', '\010', 'R', '\022', 'i', 's', 'I', 'n', 's', 't', 'a', 'n', + 'c', 'e', 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', '\022', '\020', + '\n', '\003', 'd', 'o', 'c', '\030', '\006', ' ', '\001', '(', '\t', 'R', + '\003', 'd', 'o', 'c', 'B', '\013', '\n', '\t', 'd', 'e', 'c', 'l', + '_', 'k', 'i', 'n', 'd', '\"', 'j', '\n', '\t', 'R', 'e', 'f', + 'e', 'r', 'e', 'n', 'c', 'e', '\022', '\022', '\n', '\004', 'n', 'a', + 'm', 'e', '\030', '\001', ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', + 'm', 'e', '\022', '\037', '\n', '\013', 'o', 'v', 'e', 'r', 'l', 'o', + 'a', 'd', '_', 'i', 'd', '\030', '\003', ' ', '\003', '(', '\t', 'R', + '\n', 'o', 'v', 'e', 'r', 'l', 'o', 'a', 'd', 'I', 'd', '\022', + '(', '\n', '\005', 'v', 'a', 'l', 'u', 'e', '\030', '\004', ' ', '\001', + '(', '\013', '2', '\022', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'C', 'o', 'n', 's', 't', 'a', 'n', 't', 'R', '\005', + 'v', 'a', 'l', 'u', 'e', 'B', ',', '\n', '\014', 'd', 'e', 'v', + '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', 'B', '\t', 'D', + 'e', 'c', 'l', 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', '\014', + 'c', 'e', 'l', '.', 'd', 'e', 'v', '/', 'e', 'x', 'p', 'r', + '\370', '\001', '\001', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', +}; + +static _upb_DefPool_Init *deps[4] = { + &cel_expr_syntax_proto_upbdefinit, + &google_protobuf_empty_proto_upbdefinit, + &google_protobuf_struct_proto_upbdefinit, + NULL, +}; + +_upb_DefPool_Init cel_expr_checked_proto_upbdefinit = { + deps, + &cel_expr_checked_proto_upb_file_layout, + "cel/expr/checked.proto", + UPB_STRINGVIEW_INIT(descriptor, sizeof(descriptor)), +}; diff --git a/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h b/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h new file mode 100644 index 0000000000000..1b96e152dd401 --- /dev/null +++ b/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h @@ -0,0 +1,97 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/checked.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + + + +#ifndef CEL_EXPR_CHECKED_PROTO_UPB_H__UPBDEFS_H_ +#define CEL_EXPR_CHECKED_PROTO_UPB_H__UPBDEFS_H_ + +#include "upb/reflection/def.h" +#include "upb/reflection/internal/def_pool.h" + +#include "upb/port/def.inc" + +#ifdef __cplusplus +extern "C" { +#endif + +extern _upb_DefPool_Init cel_expr_checked_proto_upbdefinit; + +UPB_INLINE const upb_MessageDef *cel_expr_CheckedExpr_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.CheckedExpr"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_CheckedExpr_ReferenceMapEntry_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.CheckedExpr.ReferenceMapEntry"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_CheckedExpr_TypeMapEntry_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.CheckedExpr.TypeMapEntry"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Type_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Type"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Type_ListType_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Type.ListType"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Type_MapType_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Type.MapType"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Type_FunctionType_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Type.FunctionType"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Type_AbstractType_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Type.AbstractType"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Decl_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Decl"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Decl_IdentDecl_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Decl.IdentDecl"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Decl_FunctionDecl_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Decl.FunctionDecl"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Decl_FunctionDecl_Overload_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Decl.FunctionDecl.Overload"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Reference_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_checked_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Reference"); +} + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port/undef.inc" + +#endif /* CEL_EXPR_CHECKED_PROTO_UPB_H__UPBDEFS_H_ */ diff --git a/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c b/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c new file mode 100644 index 0000000000000..fabadd7ccac02 --- /dev/null +++ b/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c @@ -0,0 +1,283 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/syntax.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + + +#include "upb/reflection/def.h" +#include "cel/expr/syntax.upbdefs.h" +#include "cel/expr/syntax.upb_minitable.h" + +extern _upb_DefPool_Init google_protobuf_duration_proto_upbdefinit; +extern _upb_DefPool_Init google_protobuf_struct_proto_upbdefinit; +extern _upb_DefPool_Init google_protobuf_timestamp_proto_upbdefinit; + +static const char descriptor[2993] = { + '\n', '\025', 'c', 'e', 'l', '/', 'e', 'x', 'p', 'r', '/', 's', + 'y', 'n', 't', 'a', 'x', '.', 'p', 'r', 'o', 't', 'o', '\022', + '\010', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '\032', '\036', 'g', + 'o', 'o', 'g', 'l', 'e', '/', 'p', 'r', 'o', 't', 'o', 'b', + 'u', 'f', '/', 'd', 'u', 'r', 'a', 't', 'i', 'o', 'n', '.', + 'p', 'r', 'o', 't', 'o', '\032', '\034', 'g', 'o', 'o', 'g', 'l', + 'e', '/', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '/', 's', + 't', 'r', 'u', 'c', 't', '.', 'p', 'r', 'o', 't', 'o', '\032', + '\037', 'g', 'o', 'o', 'g', 'l', 'e', '/', 'p', 'r', 'o', 't', + 'o', 'b', 'u', 'f', '/', 't', 'i', 'm', 'e', 's', 't', 'a', + 'm', 'p', '.', 'p', 'r', 'o', 't', 'o', '\"', 'g', '\n', '\n', + 'P', 'a', 'r', 's', 'e', 'd', 'E', 'x', 'p', 'r', '\022', '\"', + '\n', '\004', 'e', 'x', 'p', 'r', '\030', '\002', ' ', '\001', '(', '\013', + '2', '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', + 'E', 'x', 'p', 'r', 'R', '\004', 'e', 'x', 'p', 'r', '\022', '5', + '\n', '\013', 's', 'o', 'u', 'r', 'c', 'e', '_', 'i', 'n', 'f', + 'o', '\030', '\003', ' ', '\001', '(', '\013', '2', '\024', '.', 'c', 'e', + 'l', '.', 'e', 'x', 'p', 'r', '.', 'S', 'o', 'u', 'r', 'c', + 'e', 'I', 'n', 'f', 'o', 'R', '\n', 's', 'o', 'u', 'r', 'c', + 'e', 'I', 'n', 'f', 'o', '\"', '\232', '\013', '\n', '\004', 'E', 'x', + 'p', 'r', '\022', '\016', '\n', '\002', 'i', 'd', '\030', '\002', ' ', '\001', + '(', '\003', 'R', '\002', 'i', 'd', '\022', '3', '\n', '\n', 'c', 'o', + 'n', 's', 't', '_', 'e', 'x', 'p', 'r', '\030', '\003', ' ', '\001', + '(', '\013', '2', '\022', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'C', 'o', 'n', 's', 't', 'a', 'n', 't', 'H', '\000', + 'R', '\t', 'c', 'o', 'n', 's', 't', 'E', 'x', 'p', 'r', '\022', + '5', '\n', '\n', 'i', 'd', 'e', 'n', 't', '_', 'e', 'x', 'p', + 'r', '\030', '\004', ' ', '\001', '(', '\013', '2', '\024', '.', 'c', 'e', + 'l', '.', 'e', 'x', 'p', 'r', '.', 'E', 'x', 'p', 'r', '.', + 'I', 'd', 'e', 'n', 't', 'H', '\000', 'R', '\t', 'i', 'd', 'e', + 'n', 't', 'E', 'x', 'p', 'r', '\022', '8', '\n', '\013', 's', 'e', + 'l', 'e', 'c', 't', '_', 'e', 'x', 'p', 'r', '\030', '\005', ' ', + '\001', '(', '\013', '2', '\025', '.', 'c', 'e', 'l', '.', 'e', 'x', + 'p', 'r', '.', 'E', 'x', 'p', 'r', '.', 'S', 'e', 'l', 'e', + 'c', 't', 'H', '\000', 'R', '\n', 's', 'e', 'l', 'e', 'c', 't', + 'E', 'x', 'p', 'r', '\022', '2', '\n', '\t', 'c', 'a', 'l', 'l', + '_', 'e', 'x', 'p', 'r', '\030', '\006', ' ', '\001', '(', '\013', '2', + '\023', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'E', + 'x', 'p', 'r', '.', 'C', 'a', 'l', 'l', 'H', '\000', 'R', '\010', + 'c', 'a', 'l', 'l', 'E', 'x', 'p', 'r', '\022', '8', '\n', '\t', + 'l', 'i', 's', 't', '_', 'e', 'x', 'p', 'r', '\030', '\007', ' ', + '\001', '(', '\013', '2', '\031', '.', 'c', 'e', 'l', '.', 'e', 'x', + 'p', 'r', '.', 'E', 'x', 'p', 'r', '.', 'C', 'r', 'e', 'a', + 't', 'e', 'L', 'i', 's', 't', 'H', '\000', 'R', '\010', 'l', 'i', + 's', 't', 'E', 'x', 'p', 'r', '\022', '>', '\n', '\013', 's', 't', + 'r', 'u', 'c', 't', '_', 'e', 'x', 'p', 'r', '\030', '\010', ' ', + '\001', '(', '\013', '2', '\033', '.', 'c', 'e', 'l', '.', 'e', 'x', + 'p', 'r', '.', 'E', 'x', 'p', 'r', '.', 'C', 'r', 'e', 'a', + 't', 'e', 'S', 't', 'r', 'u', 'c', 't', 'H', '\000', 'R', '\n', + 's', 't', 'r', 'u', 'c', 't', 'E', 'x', 'p', 'r', '\022', 'M', + '\n', '\022', 'c', 'o', 'm', 'p', 'r', 'e', 'h', 'e', 'n', 's', + 'i', 'o', 'n', '_', 'e', 'x', 'p', 'r', '\030', '\t', ' ', '\001', + '(', '\013', '2', '\034', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'E', 'x', 'p', 'r', '.', 'C', 'o', 'm', 'p', 'r', + 'e', 'h', 'e', 'n', 's', 'i', 'o', 'n', 'H', '\000', 'R', '\021', + 'c', 'o', 'm', 'p', 'r', 'e', 'h', 'e', 'n', 's', 'i', 'o', + 'n', 'E', 'x', 'p', 'r', '\032', '\033', '\n', '\005', 'I', 'd', 'e', + 'n', 't', '\022', '\022', '\n', '\004', 'n', 'a', 'm', 'e', '\030', '\001', + ' ', '\001', '(', '\t', 'R', '\004', 'n', 'a', 'm', 'e', '\032', 'e', + '\n', '\006', 'S', 'e', 'l', 'e', 'c', 't', '\022', '(', '\n', '\007', + 'o', 'p', 'e', 'r', 'a', 'n', 'd', '\030', '\001', ' ', '\001', '(', + '\013', '2', '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', + '.', 'E', 'x', 'p', 'r', 'R', '\007', 'o', 'p', 'e', 'r', 'a', + 'n', 'd', '\022', '\024', '\n', '\005', 'f', 'i', 'e', 'l', 'd', '\030', + '\002', ' ', '\001', '(', '\t', 'R', '\005', 'f', 'i', 'e', 'l', 'd', + '\022', '\033', '\n', '\t', 't', 'e', 's', 't', '_', 'o', 'n', 'l', + 'y', '\030', '\003', ' ', '\001', '(', '\010', 'R', '\010', 't', 'e', 's', + 't', 'O', 'n', 'l', 'y', '\032', 'n', '\n', '\004', 'C', 'a', 'l', + 'l', '\022', '&', '\n', '\006', 't', 'a', 'r', 'g', 'e', 't', '\030', + '\001', ' ', '\001', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', + 'e', 'x', 'p', 'r', '.', 'E', 'x', 'p', 'r', 'R', '\006', 't', + 'a', 'r', 'g', 'e', 't', '\022', '\032', '\n', '\010', 'f', 'u', 'n', + 'c', 't', 'i', 'o', 'n', '\030', '\002', ' ', '\001', '(', '\t', 'R', + '\010', 'f', 'u', 'n', 'c', 't', 'i', 'o', 'n', '\022', '\"', '\n', + '\004', 'a', 'r', 'g', 's', '\030', '\003', ' ', '\003', '(', '\013', '2', + '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'E', + 'x', 'p', 'r', 'R', '\004', 'a', 'r', 'g', 's', '\032', 'c', '\n', + '\n', 'C', 'r', 'e', 'a', 't', 'e', 'L', 'i', 's', 't', '\022', + '*', '\n', '\010', 'e', 'l', 'e', 'm', 'e', 'n', 't', 's', '\030', + '\001', ' ', '\003', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', + 'e', 'x', 'p', 'r', '.', 'E', 'x', 'p', 'r', 'R', '\010', 'e', + 'l', 'e', 'm', 'e', 'n', 't', 's', '\022', ')', '\n', '\020', 'o', + 'p', 't', 'i', 'o', 'n', 'a', 'l', '_', 'i', 'n', 'd', 'i', + 'c', 'e', 's', '\030', '\002', ' ', '\003', '(', '\005', 'R', '\017', 'o', + 'p', 't', 'i', 'o', 'n', 'a', 'l', 'I', 'n', 'd', 'i', 'c', + 'e', 's', '\032', '\253', '\002', '\n', '\014', 'C', 'r', 'e', 'a', 't', + 'e', 'S', 't', 'r', 'u', 'c', 't', '\022', '!', '\n', '\014', 'm', + 'e', 's', 's', 'a', 'g', 'e', '_', 'n', 'a', 'm', 'e', '\030', + '\001', ' ', '\001', '(', '\t', 'R', '\013', 'm', 'e', 's', 's', 'a', + 'g', 'e', 'N', 'a', 'm', 'e', '\022', ';', '\n', '\007', 'e', 'n', + 't', 'r', 'i', 'e', 's', '\030', '\002', ' ', '\003', '(', '\013', '2', + '!', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'E', + 'x', 'p', 'r', '.', 'C', 'r', 'e', 'a', 't', 'e', 'S', 't', + 'r', 'u', 'c', 't', '.', 'E', 'n', 't', 'r', 'y', 'R', '\007', + 'e', 'n', 't', 'r', 'i', 'e', 's', '\032', '\272', '\001', '\n', '\005', + 'E', 'n', 't', 'r', 'y', '\022', '\016', '\n', '\002', 'i', 'd', '\030', + '\001', ' ', '\001', '(', '\003', 'R', '\002', 'i', 'd', '\022', '\035', '\n', + '\t', 'f', 'i', 'e', 'l', 'd', '_', 'k', 'e', 'y', '\030', '\002', + ' ', '\001', '(', '\t', 'H', '\000', 'R', '\010', 'f', 'i', 'e', 'l', + 'd', 'K', 'e', 'y', '\022', ')', '\n', '\007', 'm', 'a', 'p', '_', + 'k', 'e', 'y', '\030', '\003', ' ', '\001', '(', '\013', '2', '\016', '.', + 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'E', 'x', 'p', + 'r', 'H', '\000', 'R', '\006', 'm', 'a', 'p', 'K', 'e', 'y', '\022', + '$', '\n', '\005', 'v', 'a', 'l', 'u', 'e', '\030', '\004', ' ', '\001', + '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'E', 'x', 'p', 'r', 'R', '\005', 'v', 'a', 'l', 'u', + 'e', '\022', '%', '\n', '\016', 'o', 'p', 't', 'i', 'o', 'n', 'a', + 'l', '_', 'e', 'n', 't', 'r', 'y', '\030', '\005', ' ', '\001', '(', + '\010', 'R', '\r', 'o', 'p', 't', 'i', 'o', 'n', 'a', 'l', 'E', + 'n', 't', 'r', 'y', 'B', '\n', '\n', '\010', 'k', 'e', 'y', '_', + 'k', 'i', 'n', 'd', '\032', '\312', '\002', '\n', '\r', 'C', 'o', 'm', + 'p', 'r', 'e', 'h', 'e', 'n', 's', 'i', 'o', 'n', '\022', '\031', + '\n', '\010', 'i', 't', 'e', 'r', '_', 'v', 'a', 'r', '\030', '\001', + ' ', '\001', '(', '\t', 'R', '\007', 'i', 't', 'e', 'r', 'V', 'a', + 'r', '\022', '\033', '\n', '\t', 'i', 't', 'e', 'r', '_', 'v', 'a', + 'r', '2', '\030', '\010', ' ', '\001', '(', '\t', 'R', '\010', 'i', 't', + 'e', 'r', 'V', 'a', 'r', '2', '\022', '-', '\n', '\n', 'i', 't', + 'e', 'r', '_', 'r', 'a', 'n', 'g', 'e', '\030', '\002', ' ', '\001', + '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'E', 'x', 'p', 'r', 'R', '\t', 'i', 't', 'e', 'r', + 'R', 'a', 'n', 'g', 'e', '\022', '\031', '\n', '\010', 'a', 'c', 'c', + 'u', '_', 'v', 'a', 'r', '\030', '\003', ' ', '\001', '(', '\t', 'R', + '\007', 'a', 'c', 'c', 'u', 'V', 'a', 'r', '\022', '+', '\n', '\t', + 'a', 'c', 'c', 'u', '_', 'i', 'n', 'i', 't', '\030', '\004', ' ', + '\001', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', + 'p', 'r', '.', 'E', 'x', 'p', 'r', 'R', '\010', 'a', 'c', 'c', + 'u', 'I', 'n', 'i', 't', '\022', '5', '\n', '\016', 'l', 'o', 'o', + 'p', '_', 'c', 'o', 'n', 'd', 'i', 't', 'i', 'o', 'n', '\030', + '\005', ' ', '\001', '(', '\013', '2', '\016', '.', 'c', 'e', 'l', '.', + 'e', 'x', 'p', 'r', '.', 'E', 'x', 'p', 'r', 'R', '\r', 'l', + 'o', 'o', 'p', 'C', 'o', 'n', 'd', 'i', 't', 'i', 'o', 'n', + '\022', '+', '\n', '\t', 'l', 'o', 'o', 'p', '_', 's', 't', 'e', + 'p', '\030', '\006', ' ', '\001', '(', '\013', '2', '\016', '.', 'c', 'e', + 'l', '.', 'e', 'x', 'p', 'r', '.', 'E', 'x', 'p', 'r', 'R', + '\010', 'l', 'o', 'o', 'p', 'S', 't', 'e', 'p', '\022', '&', '\n', + '\006', 'r', 'e', 's', 'u', 'l', 't', '\030', '\007', ' ', '\001', '(', + '\013', '2', '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', + '.', 'E', 'x', 'p', 'r', 'R', '\006', 'r', 'e', 's', 'u', 'l', + 't', 'B', '\013', '\n', '\t', 'e', 'x', 'p', 'r', '_', 'k', 'i', + 'n', 'd', '\"', '\301', '\003', '\n', '\010', 'C', 'o', 'n', 's', 't', + 'a', 'n', 't', '\022', ';', '\n', '\n', 'n', 'u', 'l', 'l', '_', + 'v', 'a', 'l', 'u', 'e', '\030', '\001', ' ', '\001', '(', '\016', '2', + '\032', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', + 't', 'o', 'b', 'u', 'f', '.', 'N', 'u', 'l', 'l', 'V', 'a', + 'l', 'u', 'e', 'H', '\000', 'R', '\t', 'n', 'u', 'l', 'l', 'V', + 'a', 'l', 'u', 'e', '\022', '\037', '\n', '\n', 'b', 'o', 'o', 'l', + '_', 'v', 'a', 'l', 'u', 'e', '\030', '\002', ' ', '\001', '(', '\010', + 'H', '\000', 'R', '\t', 'b', 'o', 'o', 'l', 'V', 'a', 'l', 'u', + 'e', '\022', '!', '\n', '\013', 'i', 'n', 't', '6', '4', '_', 'v', + 'a', 'l', 'u', 'e', '\030', '\003', ' ', '\001', '(', '\003', 'H', '\000', + 'R', '\n', 'i', 'n', 't', '6', '4', 'V', 'a', 'l', 'u', 'e', + '\022', '#', '\n', '\014', 'u', 'i', 'n', 't', '6', '4', '_', 'v', + 'a', 'l', 'u', 'e', '\030', '\004', ' ', '\001', '(', '\004', 'H', '\000', + 'R', '\013', 'u', 'i', 'n', 't', '6', '4', 'V', 'a', 'l', 'u', + 'e', '\022', '#', '\n', '\014', 'd', 'o', 'u', 'b', 'l', 'e', '_', + 'v', 'a', 'l', 'u', 'e', '\030', '\005', ' ', '\001', '(', '\001', 'H', + '\000', 'R', '\013', 'd', 'o', 'u', 'b', 'l', 'e', 'V', 'a', 'l', + 'u', 'e', '\022', '#', '\n', '\014', 's', 't', 'r', 'i', 'n', 'g', + '_', 'v', 'a', 'l', 'u', 'e', '\030', '\006', ' ', '\001', '(', '\t', + 'H', '\000', 'R', '\013', 's', 't', 'r', 'i', 'n', 'g', 'V', 'a', + 'l', 'u', 'e', '\022', '!', '\n', '\013', 'b', 'y', 't', 'e', 's', + '_', 'v', 'a', 'l', 'u', 'e', '\030', '\007', ' ', '\001', '(', '\014', + 'H', '\000', 'R', '\n', 'b', 'y', 't', 'e', 's', 'V', 'a', 'l', + 'u', 'e', '\022', 'F', '\n', '\016', 'd', 'u', 'r', 'a', 't', 'i', + 'o', 'n', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\010', ' ', '\001', + '(', '\013', '2', '\031', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', + 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'D', 'u', 'r', + 'a', 't', 'i', 'o', 'n', 'B', '\002', '\030', '\001', 'H', '\000', 'R', + '\r', 'd', 'u', 'r', 'a', 't', 'i', 'o', 'n', 'V', 'a', 'l', + 'u', 'e', '\022', 'I', '\n', '\017', 't', 'i', 'm', 'e', 's', 't', + 'a', 'm', 'p', '_', 'v', 'a', 'l', 'u', 'e', '\030', '\t', ' ', + '\001', '(', '\013', '2', '\032', '.', 'g', 'o', 'o', 'g', 'l', 'e', + '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'T', 'i', + 'm', 'e', 's', 't', 'a', 'm', 'p', 'B', '\002', '\030', '\001', 'H', + '\000', 'R', '\016', 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', + 'V', 'a', 'l', 'u', 'e', 'B', '\017', '\n', '\r', 'c', 'o', 'n', + 's', 't', 'a', 'n', 't', '_', 'k', 'i', 'n', 'd', '\"', '\254', + '\006', '\n', '\n', 'S', 'o', 'u', 'r', 'c', 'e', 'I', 'n', 'f', + 'o', '\022', '%', '\n', '\016', 's', 'y', 'n', 't', 'a', 'x', '_', + 'v', 'e', 'r', 's', 'i', 'o', 'n', '\030', '\001', ' ', '\001', '(', + '\t', 'R', '\r', 's', 'y', 'n', 't', 'a', 'x', 'V', 'e', 'r', + 's', 'i', 'o', 'n', '\022', '\032', '\n', '\010', 'l', 'o', 'c', 'a', + 't', 'i', 'o', 'n', '\030', '\002', ' ', '\001', '(', '\t', 'R', '\010', + 'l', 'o', 'c', 'a', 't', 'i', 'o', 'n', '\022', '!', '\n', '\014', + 'l', 'i', 'n', 'e', '_', 'o', 'f', 'f', 's', 'e', 't', 's', + '\030', '\003', ' ', '\003', '(', '\005', 'R', '\013', 'l', 'i', 'n', 'e', + 'O', 'f', 'f', 's', 'e', 't', 's', '\022', 'A', '\n', '\t', 'p', + 'o', 's', 'i', 't', 'i', 'o', 'n', 's', '\030', '\004', ' ', '\003', + '(', '\013', '2', '#', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', '.', 'S', 'o', 'u', 'r', 'c', 'e', 'I', 'n', 'f', 'o', + '.', 'P', 'o', 's', 'i', 't', 'i', 'o', 'n', 's', 'E', 'n', + 't', 'r', 'y', 'R', '\t', 'p', 'o', 's', 'i', 't', 'i', 'o', + 'n', 's', '\022', 'E', '\n', '\013', 'm', 'a', 'c', 'r', 'o', '_', + 'c', 'a', 'l', 'l', 's', '\030', '\005', ' ', '\003', '(', '\013', '2', + '$', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'S', + 'o', 'u', 'r', 'c', 'e', 'I', 'n', 'f', 'o', '.', 'M', 'a', + 'c', 'r', 'o', 'C', 'a', 'l', 'l', 's', 'E', 'n', 't', 'r', + 'y', 'R', '\n', 'm', 'a', 'c', 'r', 'o', 'C', 'a', 'l', 'l', + 's', '\022', '>', '\n', '\n', 'e', 'x', 't', 'e', 'n', 's', 'i', + 'o', 'n', 's', '\030', '\006', ' ', '\003', '(', '\013', '2', '\036', '.', + 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'S', 'o', 'u', + 'r', 'c', 'e', 'I', 'n', 'f', 'o', '.', 'E', 'x', 't', 'e', + 'n', 's', 'i', 'o', 'n', 'R', '\n', 'e', 'x', 't', 'e', 'n', + 's', 'i', 'o', 'n', 's', '\032', '<', '\n', '\016', 'P', 'o', 's', + 'i', 't', 'i', 'o', 'n', 's', 'E', 'n', 't', 'r', 'y', '\022', + '\020', '\n', '\003', 'k', 'e', 'y', '\030', '\001', ' ', '\001', '(', '\003', + 'R', '\003', 'k', 'e', 'y', '\022', '\024', '\n', '\005', 'v', 'a', 'l', + 'u', 'e', '\030', '\002', ' ', '\001', '(', '\005', 'R', '\005', 'v', 'a', + 'l', 'u', 'e', ':', '\002', '8', '\001', '\032', 'M', '\n', '\017', 'M', + 'a', 'c', 'r', 'o', 'C', 'a', 'l', 'l', 's', 'E', 'n', 't', + 'r', 'y', '\022', '\020', '\n', '\003', 'k', 'e', 'y', '\030', '\001', ' ', + '\001', '(', '\003', 'R', '\003', 'k', 'e', 'y', '\022', '$', '\n', '\005', + 'v', 'a', 'l', 'u', 'e', '\030', '\002', ' ', '\001', '(', '\013', '2', + '\016', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'E', + 'x', 'p', 'r', 'R', '\005', 'v', 'a', 'l', 'u', 'e', ':', '\002', + '8', '\001', '\032', '\340', '\002', '\n', '\t', 'E', 'x', 't', 'e', 'n', + 's', 'i', 'o', 'n', '\022', '\016', '\n', '\002', 'i', 'd', '\030', '\001', + ' ', '\001', '(', '\t', 'R', '\002', 'i', 'd', '\022', 'Y', '\n', '\023', + 'a', 'f', 'f', 'e', 'c', 't', 'e', 'd', '_', 'c', 'o', 'm', + 'p', 'o', 'n', 'e', 'n', 't', 's', '\030', '\002', ' ', '\003', '(', + '\016', '2', '(', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', + '.', 'S', 'o', 'u', 'r', 'c', 'e', 'I', 'n', 'f', 'o', '.', + 'E', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', '.', 'C', 'o', + 'm', 'p', 'o', 'n', 'e', 'n', 't', 'R', '\022', 'a', 'f', 'f', + 'e', 'c', 't', 'e', 'd', 'C', 'o', 'm', 'p', 'o', 'n', 'e', + 'n', 't', 's', '\022', '@', '\n', '\007', 'v', 'e', 'r', 's', 'i', + 'o', 'n', '\030', '\003', ' ', '\001', '(', '\013', '2', '&', '.', 'c', + 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'S', 'o', 'u', 'r', + 'c', 'e', 'I', 'n', 'f', 'o', '.', 'E', 'x', 't', 'e', 'n', + 's', 'i', 'o', 'n', '.', 'V', 'e', 'r', 's', 'i', 'o', 'n', + 'R', '\007', 'v', 'e', 'r', 's', 'i', 'o', 'n', '\032', '5', '\n', + '\007', 'V', 'e', 'r', 's', 'i', 'o', 'n', '\022', '\024', '\n', '\005', + 'm', 'a', 'j', 'o', 'r', '\030', '\001', ' ', '\001', '(', '\003', 'R', + '\005', 'm', 'a', 'j', 'o', 'r', '\022', '\024', '\n', '\005', 'm', 'i', + 'n', 'o', 'r', '\030', '\002', ' ', '\001', '(', '\003', 'R', '\005', 'm', + 'i', 'n', 'o', 'r', '\"', 'o', '\n', '\t', 'C', 'o', 'm', 'p', + 'o', 'n', 'e', 'n', 't', '\022', '\031', '\n', '\025', 'C', 'O', 'M', + 'P', 'O', 'N', 'E', 'N', 'T', '_', 'U', 'N', 'S', 'P', 'E', + 'C', 'I', 'F', 'I', 'E', 'D', '\020', '\000', '\022', '\024', '\n', '\020', + 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '_', 'P', 'A', + 'R', 'S', 'E', 'R', '\020', '\001', '\022', '\032', '\n', '\026', 'C', 'O', + 'M', 'P', 'O', 'N', 'E', 'N', 'T', '_', 'T', 'Y', 'P', 'E', + '_', 'C', 'H', 'E', 'C', 'K', 'E', 'R', '\020', '\002', '\022', '\025', + '\n', '\021', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '_', + 'R', 'U', 'N', 'T', 'I', 'M', 'E', '\020', '\003', 'B', '.', '\n', + '\014', 'd', 'e', 'v', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', + 'r', 'B', '\013', 'S', 'y', 'n', 't', 'a', 'x', 'P', 'r', 'o', + 't', 'o', 'P', '\001', 'Z', '\014', 'c', 'e', 'l', '.', 'd', 'e', + 'v', '/', 'e', 'x', 'p', 'r', '\370', '\001', '\001', 'b', '\006', 'p', + 'r', 'o', 't', 'o', '3', +}; + +static _upb_DefPool_Init *deps[4] = { + &google_protobuf_duration_proto_upbdefinit, + &google_protobuf_struct_proto_upbdefinit, + &google_protobuf_timestamp_proto_upbdefinit, + NULL, +}; + +_upb_DefPool_Init cel_expr_syntax_proto_upbdefinit = { + deps, + &cel_expr_syntax_proto_upb_file_layout, + "cel/expr/syntax.proto", + UPB_STRINGVIEW_INIT(descriptor, sizeof(descriptor)), +}; diff --git a/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h b/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h new file mode 100644 index 0000000000000..15276078ce70d --- /dev/null +++ b/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h @@ -0,0 +1,107 @@ +/* This file was generated by upb_generator from the input file: + * + * cel/expr/syntax.proto + * + * Do not edit -- your changes will be discarded when the file is + * regenerated. + * NO CHECKED-IN PROTOBUF GENCODE */ + + + +#ifndef CEL_EXPR_SYNTAX_PROTO_UPB_H__UPBDEFS_H_ +#define CEL_EXPR_SYNTAX_PROTO_UPB_H__UPBDEFS_H_ + +#include "upb/reflection/def.h" +#include "upb/reflection/internal/def_pool.h" + +#include "upb/port/def.inc" + +#ifdef __cplusplus +extern "C" { +#endif + +extern _upb_DefPool_Init cel_expr_syntax_proto_upbdefinit; + +UPB_INLINE const upb_MessageDef *cel_expr_ParsedExpr_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.ParsedExpr"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Expr_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Expr"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Expr_Ident_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Expr.Ident"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Expr_Select_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Expr.Select"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Expr_Call_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Expr.Call"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Expr_CreateList_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Expr.CreateList"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Expr_CreateStruct_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Expr.CreateStruct"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Expr_CreateStruct_Entry_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Expr.CreateStruct.Entry"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Expr_Comprehension_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Expr.Comprehension"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_Constant_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.Constant"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_SourceInfo_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.SourceInfo"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_SourceInfo_PositionsEntry_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.SourceInfo.PositionsEntry"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_SourceInfo_MacroCallsEntry_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.SourceInfo.MacroCallsEntry"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_SourceInfo_Extension_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.SourceInfo.Extension"); +} + +UPB_INLINE const upb_MessageDef *cel_expr_SourceInfo_Extension_Version_getmsgdef(upb_DefPool *s) { + _upb_DefPool_LoadDefInit(s, &cel_expr_syntax_proto_upbdefinit); + return upb_DefPool_FindMessageByName(s, "cel.expr.SourceInfo.Extension.Version"); +} + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#include "upb/port/undef.inc" + +#endif /* CEL_EXPR_SYNTAX_PROTO_UPB_H__UPBDEFS_H_ */ diff --git a/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c b/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c index 59fe53cefb896..90f19ce7c93d9 100644 --- a/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +++ b/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c @@ -13,7 +13,7 @@ extern _upb_DefPool_Init google_protobuf_descriptor_proto_upbdefinit; -static const char descriptor[893] = { +static const char descriptor[898] = { '\n', '\036', 'u', 'd', 'p', 'a', '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '/', 'm', 'i', 'g', 'r', 'a', 't', 'e', '.', 'p', 'r', 'o', 't', 'o', '\022', '\020', 'u', 'd', @@ -84,11 +84,11 @@ static const char descriptor[893] = { 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '.', 'F', 'i', 'l', 'e', 'M', 'i', 'g', 'r', 'a', 't', 'e', 'A', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 'R', '\013', 'f', 'i', 'l', 'e', - 'M', 'i', 'g', 'r', 'a', 't', 'e', 'B', '$', 'Z', '\"', 'g', + 'M', 'i', 'g', 'r', 'a', 't', 'e', 'B', ')', 'Z', '\'', 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', - 'c', 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'a', 'n', - 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', 'b', '\006', 'p', - 'r', 'o', 't', 'o', '3', + 'c', 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'u', 'd', + 'p', 'a', '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', + 'n', 's', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', }; static _upb_DefPool_Init *deps[2] = { diff --git a/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c b/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c index 9aea86bf427a8..22390962c550d 100644 --- a/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +++ b/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c @@ -14,7 +14,7 @@ extern _upb_DefPool_Init udpa_annotations_status_proto_upbdefinit; extern _upb_DefPool_Init google_protobuf_descriptor_proto_upbdefinit; -static const char descriptor[453] = { +static const char descriptor[458] = { '\n', '\037', 'u', 'd', 'p', 'a', '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '/', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'p', 'r', 'o', 't', 'o', '\022', '\020', 'u', @@ -48,11 +48,12 @@ static const char descriptor[453] = { 't', 'i', 'o', 'n', 's', '.', 'F', 'i', 'e', 'l', 'd', 'S', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'A', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 'R', '\010', 's', 'e', 'c', 'u', 'r', - 'i', 't', 'y', 'B', ',', 'Z', '\"', 'g', 'i', 't', 'h', 'u', + 'i', 't', 'y', 'B', '1', 'Z', '\'', 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', 'c', 'f', '/', 'x', - 'd', 's', '/', 'g', 'o', '/', 'a', 'n', 'n', 'o', 't', 'a', - 't', 'i', 'o', 'n', 's', '\272', '\200', '\310', '\321', '\006', '\002', '\010', - '\001', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', + 'd', 's', '/', 'g', 'o', '/', 'u', 'd', 'p', 'a', '/', 'a', + 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '\272', '\200', + '\310', '\321', '\006', '\002', '\010', '\001', 'b', '\006', 'p', 'r', 'o', 't', + 'o', '3', }; static _upb_DefPool_Init *deps[3] = { diff --git a/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c b/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c index 8c6bc924b0cbc..2a6f0f7d94510 100644 --- a/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +++ b/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c @@ -13,7 +13,7 @@ extern _upb_DefPool_Init google_protobuf_descriptor_proto_upbdefinit; -static const char descriptor[196] = { +static const char descriptor[201] = { '\n', ' ', 'u', 'd', 'p', 'a', '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '/', 's', 'e', 'n', 's', 'i', 't', 'i', 'v', 'e', '.', 'p', 'r', 'o', 't', 'o', '\022', '\020', @@ -26,11 +26,11 @@ static const char descriptor[196] = { '.', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '.', 'F', 'i', 'e', 'l', 'd', 'O', 'p', 't', 'i', 'o', 'n', 's', '\030', '\367', '\266', '\301', '$', ' ', '\001', '(', '\010', 'R', '\t', 's', 'e', 'n', - 's', 'i', 't', 'i', 'v', 'e', 'B', '$', 'Z', '\"', 'g', 'i', + 's', 'i', 't', 'i', 'v', 'e', 'B', ')', 'Z', '\'', 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', 'c', - 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'a', 'n', 'n', - 'o', 't', 'a', 't', 'i', 'o', 'n', 's', 'b', '\006', 'p', 'r', - 'o', 't', 'o', '3', + 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'u', 'd', 'p', + 'a', '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', + 's', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', }; static _upb_DefPool_Init *deps[2] = { diff --git a/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c b/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c index f741cc0268524..16c7a9a4622be 100644 --- a/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +++ b/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c @@ -13,7 +13,7 @@ extern _upb_DefPool_Init google_protobuf_descriptor_proto_upbdefinit; -static const char descriptor[483] = { +static const char descriptor[488] = { '\n', '\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', '\022', '\020', 'u', 'd', 'p', @@ -50,11 +50,11 @@ static const char descriptor[483] = { '.', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '.', 'S', 't', 'a', 't', 'u', 's', 'A', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 'R', '\n', 'f', 'i', 'l', 'e', 'S', - 't', 'a', 't', 'u', 's', 'B', '$', 'Z', '\"', 'g', 'i', 't', + 't', 'a', 't', 'u', 's', 'B', ')', 'Z', '\'', 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', 'c', 'f', - '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'a', 'n', 'n', 'o', - 't', 'a', 't', 'i', 'o', 'n', 's', 'b', '\006', 'p', 'r', 'o', - 't', 'o', '3', + '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'u', 'd', 'p', 'a', + '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', + 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', }; static _upb_DefPool_Init *deps[2] = { diff --git a/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c b/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c index fa39166088ecc..dd3e583855713 100644 --- a/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +++ b/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c @@ -13,7 +13,7 @@ extern _upb_DefPool_Init google_protobuf_descriptor_proto_upbdefinit; -static const char descriptor[317] = { +static const char descriptor[322] = { '\n', '!', 'u', 'd', 'p', 'a', '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '/', 'v', 'e', 'r', 's', 'i', 'o', 'n', 'i', 'n', 'g', '.', 'p', 'r', 'o', 't', 'o', '\022', @@ -36,11 +36,11 @@ static const char descriptor[317] = { 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '.', 'V', 'e', 'r', 's', 'i', 'o', 'n', 'i', 'n', 'g', 'A', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 'R', '\n', 'v', 'e', 'r', - 's', 'i', 'o', 'n', 'i', 'n', 'g', 'B', '$', 'Z', '\"', 'g', + 's', 'i', 'o', 'n', 'i', 'n', 'g', 'B', ')', 'Z', '\'', 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', - 'c', 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'a', 'n', - 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', 'b', '\006', 'p', - 'r', 'o', 't', 'o', '3', + 'c', 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'u', 'd', + 'p', 'a', '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', + 'n', 's', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', }; static _upb_DefPool_Init *deps[2] = { diff --git a/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c b/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c index ad5e00fa640b7..cb939f8b417b2 100644 --- a/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +++ b/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c @@ -11,45 +11,40 @@ #include "xds/type/matcher/v3/cel.upbdefs.h" #include "xds/type/matcher/v3/cel.upb_minitable.h" -extern _upb_DefPool_Init xds_annotations_v3_status_proto_upbdefinit; extern _upb_DefPool_Init xds_type_v3_cel_proto_upbdefinit; extern _upb_DefPool_Init validate_validate_proto_upbdefinit; -static const char descriptor[356] = { +static const char descriptor[315] = { '\n', '\035', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', 'c', 'h', 'e', 'r', '/', 'v', '3', '/', 'c', 'e', 'l', '.', 'p', 'r', 'o', 't', 'o', '\022', '\023', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', - 'r', '.', 'v', '3', '\032', '\037', 'x', 'd', 's', '/', 'a', 'n', - 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '/', 'v', '3', - '/', 's', 't', 'a', 't', 'u', 's', '.', 'p', 'r', 'o', 't', - 'o', '\032', '\025', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', - 'v', '3', '/', 'c', 'e', 'l', '.', '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', '\"', 's', '\n', '\n', 'C', 'e', 'l', 'M', 'a', 't', 'c', - 'h', 'e', 'r', '\022', 'C', '\n', '\n', 'e', 'x', 'p', 'r', '_', - 'm', 'a', 't', 'c', 'h', '\030', '\001', ' ', '\001', '(', '\013', '2', - '\032', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'v', - '3', '.', 'C', 'e', 'l', 'E', 'x', 'p', 'r', 'e', 's', 's', - 'i', 'o', 'n', 'B', '\010', '\372', 'B', '\005', '\212', '\001', '\002', '\020', - '\001', 'R', '\t', 'e', 'x', 'p', 'r', 'M', 'a', 't', 'c', 'h', - '\022', ' ', '\n', '\013', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', - 'i', 'o', 'n', '\030', '\002', ' ', '\001', '(', '\t', 'R', '\013', 'd', - 'e', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', 'B', '`', - '\n', '\036', 'c', 'o', 'm', '.', 'g', 'i', 't', 'h', 'u', 'b', - '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', - 't', 'c', 'h', 'e', 'r', '.', 'v', '3', 'B', '\010', 'C', 'e', - 'l', 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', '*', 'g', 'i', - 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', 'c', - 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'x', 'd', 's', - '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', 'c', 'h', 'e', - 'r', '/', 'v', '3', '\322', '\306', '\244', '\341', '\006', '\002', '\010', '\001', - 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', + 'r', '.', 'v', '3', '\032', '\025', 'x', 'd', 's', '/', 't', 'y', + 'p', 'e', '/', 'v', '3', '/', 'c', 'e', 'l', '.', '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', '\"', 's', '\n', '\n', 'C', 'e', 'l', 'M', + 'a', 't', 'c', 'h', 'e', 'r', '\022', 'C', '\n', '\n', 'e', 'x', + 'p', 'r', '_', 'm', 'a', 't', 'c', 'h', '\030', '\001', ' ', '\001', + '(', '\013', '2', '\032', '.', 'x', 'd', 's', '.', 't', 'y', 'p', + 'e', '.', 'v', '3', '.', 'C', 'e', 'l', 'E', 'x', 'p', 'r', + 'e', 's', 's', 'i', 'o', 'n', 'B', '\010', '\372', 'B', '\005', '\212', + '\001', '\002', '\020', '\001', 'R', '\t', 'e', 'x', 'p', 'r', 'M', 'a', + 't', 'c', 'h', '\022', ' ', '\n', '\013', 'd', 'e', 's', 'c', 'r', + 'i', 'p', 't', 'i', 'o', 'n', '\030', '\002', ' ', '\001', '(', '\t', + 'R', '\013', 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', + 'n', 'B', 'X', '\n', '\036', 'c', 'o', 'm', '.', 'g', 'i', 't', + 'h', 'u', 'b', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', + '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', 'B', + '\010', 'C', 'e', 'l', 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', + '*', 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', + 'c', 'n', 'c', 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', + 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', + 'c', 'h', 'e', 'r', '/', 'v', '3', 'b', '\006', 'p', 'r', 'o', + 't', 'o', '3', }; -static _upb_DefPool_Init *deps[4] = { - &xds_annotations_v3_status_proto_upbdefinit, +static _upb_DefPool_Init *deps[3] = { &xds_type_v3_cel_proto_upbdefinit, &validate_validate_proto_upbdefinit, NULL, diff --git a/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c b/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c index 178f55a9a4f84..5ff67b11bace9 100644 --- a/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +++ b/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c @@ -11,33 +11,27 @@ #include "xds/type/matcher/v3/http_inputs.upbdefs.h" #include "xds/type/matcher/v3/http_inputs.upb_minitable.h" -extern _upb_DefPool_Init xds_annotations_v3_status_proto_upbdefinit; - -static const char descriptor[237] = { +static const char descriptor[196] = { '\n', '%', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', 'c', 'h', 'e', 'r', '/', 'v', '3', '/', 'h', 't', 't', 'p', '_', 'i', 'n', 'p', 'u', 't', 's', '.', 'p', 'r', 'o', 't', 'o', '\022', '\023', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', - '\032', '\037', 'x', 'd', 's', '/', 'a', 'n', 'n', 'o', 't', 'a', - 't', 'i', 'o', 'n', 's', '/', 'v', '3', '/', 's', 't', 'a', - 't', 'u', 's', '.', 'p', 'r', 'o', 't', 'o', '\"', '\035', '\n', - '\033', 'H', 't', 't', 'p', 'A', 't', 't', 'r', 'i', 'b', 'u', - 't', 'e', 's', 'C', 'e', 'l', 'M', 'a', 't', 'c', 'h', 'I', - 'n', 'p', 'u', 't', 'B', 'g', '\n', '\036', 'c', 'o', 'm', '.', - 'g', 'i', 't', 'h', 'u', 'b', '.', 'x', 'd', 's', '.', 't', - 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', - 'v', '3', 'B', '\017', 'H', 't', 't', 'p', 'I', 'n', 'p', 'u', - 't', 's', 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', '*', 'g', - 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', - 'c', 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'x', 'd', - 's', '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', 'c', 'h', - 'e', 'r', '/', 'v', '3', '\322', '\306', '\244', '\341', '\006', '\002', '\010', - '\001', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', + '\"', '\035', '\n', '\033', 'H', 't', 't', 'p', 'A', 't', 't', 'r', + 'i', 'b', 'u', 't', 'e', 's', 'C', 'e', 'l', 'M', 'a', 't', + 'c', 'h', 'I', 'n', 'p', 'u', 't', 'B', '_', '\n', '\036', 'c', + 'o', 'm', '.', 'g', 'i', 't', 'h', 'u', 'b', '.', 'x', 'd', + 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', + 'e', 'r', '.', 'v', '3', 'B', '\017', 'H', 't', 't', 'p', 'I', + 'n', 'p', 'u', 't', 's', 'P', 'r', 'o', 't', 'o', 'P', '\001', + 'Z', '*', 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', + '/', 'c', 'n', 'c', 'f', '/', 'x', 'd', 's', '/', 'g', 'o', + '/', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', 'a', + 't', 'c', 'h', 'e', 'r', '/', 'v', '3', 'b', '\006', 'p', 'r', + 'o', 't', 'o', '3', }; -static _upb_DefPool_Init *deps[2] = { - &xds_annotations_v3_status_proto_upbdefinit, +static _upb_DefPool_Init *deps[1] = { NULL, }; diff --git a/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c b/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c index 1a53d758223ab..faeb6451cd169 100644 --- a/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +++ b/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c @@ -11,211 +11,208 @@ #include "xds/type/matcher/v3/matcher.upbdefs.h" #include "xds/type/matcher/v3/matcher.upb_minitable.h" -extern _upb_DefPool_Init xds_annotations_v3_status_proto_upbdefinit; extern _upb_DefPool_Init xds_core_v3_extension_proto_upbdefinit; extern _upb_DefPool_Init xds_type_matcher_v3_string_proto_upbdefinit; extern _upb_DefPool_Init validate_validate_proto_upbdefinit; -static const char descriptor[2330] = { +static const char descriptor[2324] = { '\n', '!', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', 'c', 'h', 'e', 'r', '/', 'v', '3', '/', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'p', 'r', 'o', 't', 'o', '\022', '\023', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', - 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '\032', '\037', 'x', 'd', - 's', '/', 'a', 'n', 'n', 'o', 't', 'a', 't', 'i', 'o', 'n', - 's', '/', 'v', '3', '/', 's', 't', 'a', 't', 'u', 's', '.', - 'p', 'r', 'o', 't', 'o', '\032', '\033', 'x', 'd', 's', '/', 'c', - 'o', 'r', 'e', '/', 'v', '3', '/', 'e', 'x', 't', 'e', 'n', - 's', 'i', 'o', 'n', '.', 'p', 'r', 'o', 't', 'o', '\032', ' ', - 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', - 'c', 'h', 'e', 'r', '/', 'v', '3', '/', 's', 't', 'r', 'i', - 'n', 'g', '.', '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', '\"', '\200', '\020', - '\n', '\007', 'M', 'a', 't', 'c', 'h', 'e', 'r', '\022', 'M', '\n', - '\014', 'm', 'a', 't', 'c', 'h', 'e', 'r', '_', 'l', 'i', 's', - 't', '\030', '\001', ' ', '\001', '(', '\013', '2', '(', '.', 'x', 'd', - 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', - 'e', 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', - 'r', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'L', 'i', 's', - 't', 'H', '\000', 'R', '\013', 'm', 'a', 't', 'c', 'h', 'e', 'r', - 'L', 'i', 's', 't', '\022', 'M', '\n', '\014', 'm', 'a', 't', 'c', - 'h', 'e', 'r', '_', 't', 'r', 'e', 'e', '\030', '\002', ' ', '\001', - '(', '\013', '2', '(', '.', 'x', 'd', 's', '.', 't', 'y', 'p', - 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', - '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', - 'c', 'h', 'e', 'r', 'T', 'r', 'e', 'e', 'H', '\000', 'R', '\013', - 'm', 'a', 't', 'c', 'h', 'e', 'r', 'T', 'r', 'e', 'e', '\022', - 'D', '\n', '\013', 'o', 'n', '_', 'n', 'o', '_', 'm', 'a', 't', - 'c', 'h', '\030', '\003', ' ', '\001', '(', '\013', '2', '$', '.', 'x', - 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', - 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', - 'e', 'r', '.', 'O', 'n', 'M', 'a', 't', 'c', 'h', 'R', '\t', - 'o', 'n', 'N', 'o', 'M', 'a', 't', 'c', 'h', '\032', '\221', '\001', - '\n', '\007', 'O', 'n', 'M', 'a', 't', 'c', 'h', '\022', '8', '\n', - '\007', 'm', 'a', 't', 'c', 'h', 'e', 'r', '\030', '\001', ' ', '\001', - '(', '\013', '2', '\034', '.', 'x', 'd', 's', '.', 't', 'y', 'p', - 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', - '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'H', '\000', 'R', '\007', - 'm', 'a', 't', 'c', 'h', 'e', 'r', '\022', ';', '\n', '\006', 'a', - 'c', 't', 'i', 'o', 'n', '\030', '\002', ' ', '\001', '(', '\013', '2', - '!', '.', 'x', 'd', 's', '.', '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', 'H', '\000', - 'R', '\006', 'a', 'c', 't', 'i', 'o', 'n', 'B', '\017', '\n', '\010', - 'o', 'n', '_', 'm', 'a', 't', 'c', 'h', '\022', '\003', '\370', 'B', - '\001', '\032', '\266', '\010', '\n', '\013', 'M', 'a', 't', 'c', 'h', 'e', - 'r', 'L', 'i', 's', 't', '\022', '[', '\n', '\010', 'm', 'a', 't', - 'c', 'h', 'e', 'r', 's', '\030', '\001', ' ', '\003', '(', '\013', '2', - '5', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', - 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', - 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', 'c', 'h', 'e', - 'r', 'L', 'i', 's', 't', '.', 'F', 'i', 'e', 'l', 'd', 'M', - 'a', 't', 'c', 'h', 'e', 'r', 'B', '\010', '\372', 'B', '\005', '\222', - '\001', '\002', '\010', '\001', 'R', '\010', 'm', 'a', 't', 'c', 'h', 'e', - 'r', 's', '\032', '\221', '\006', '\n', '\t', 'P', 'r', 'e', 'd', 'i', - 'c', 'a', 't', 'e', '\022', 'o', '\n', '\020', 's', 'i', 'n', 'g', - 'l', 'e', '_', 'p', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', - '\030', '\001', ' ', '\001', '(', '\013', '2', 'B', '.', 'x', 'd', 's', - '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', - 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', - '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'L', 'i', 's', 't', - '.', 'P', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '.', 'S', - 'i', 'n', 'g', 'l', 'e', 'P', 'r', 'e', 'd', 'i', 'c', 'a', - 't', 'e', 'H', '\000', 'R', '\017', 's', 'i', 'n', 'g', 'l', 'e', - 'P', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '\022', 'a', '\n', - '\n', 'o', 'r', '_', 'm', 'a', 't', 'c', 'h', 'e', 'r', '\030', - '\002', ' ', '\001', '(', '\013', '2', '@', '.', 'x', 'd', 's', '.', + 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '\032', '\033', 'x', 'd', + 's', '/', 'c', 'o', 'r', 'e', '/', 'v', '3', '/', 'e', 'x', + 't', 'e', 'n', 's', 'i', 'o', 'n', '.', 'p', 'r', 'o', 't', + 'o', '\032', ' ', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', + 'm', 'a', 't', 'c', 'h', 'e', 'r', '/', 'v', '3', '/', 's', + 't', 'r', 'i', 'n', 'g', '.', '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', + '\"', '\233', '\020', '\n', '\007', 'M', 'a', 't', 'c', 'h', 'e', 'r', + '\022', 'M', '\n', '\014', 'm', 'a', 't', 'c', 'h', 'e', 'r', '_', + 'l', 'i', 's', 't', '\030', '\001', ' ', '\001', '(', '\013', '2', '(', + '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', + 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', 't', + 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', + 'L', 'i', 's', 't', 'H', '\000', 'R', '\013', 'm', 'a', 't', 'c', + 'h', 'e', 'r', 'L', 'i', 's', 't', '\022', 'M', '\n', '\014', 'm', + 'a', 't', 'c', 'h', 'e', 'r', '_', 't', 'r', 'e', 'e', '\030', + '\002', ' ', '\001', '(', '\013', '2', '(', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', - 'M', 'a', 't', 'c', 'h', 'e', 'r', 'L', 'i', 's', 't', '.', - 'P', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '.', 'P', 'r', - 'e', 'd', 'i', 'c', 'a', 't', 'e', 'L', 'i', 's', 't', 'H', - '\000', 'R', '\t', 'o', 'r', 'M', 'a', 't', 'c', 'h', 'e', 'r', - '\022', 'c', '\n', '\013', 'a', 'n', 'd', '_', 'm', 'a', 't', 'c', - 'h', 'e', 'r', '\030', '\003', ' ', '\001', '(', '\013', '2', '@', '.', + 'M', 'a', 't', 'c', 'h', 'e', 'r', 'T', 'r', 'e', 'e', 'H', + '\000', 'R', '\013', 'm', 'a', 't', 'c', 'h', 'e', 'r', 'T', 'r', + 'e', 'e', '\022', 'D', '\n', '\013', 'o', 'n', '_', 'n', 'o', '_', + 'm', 'a', 't', 'c', 'h', '\030', '\003', ' ', '\001', '(', '\013', '2', + '$', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', + 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', + 't', 'c', 'h', 'e', 'r', '.', 'O', 'n', 'M', 'a', 't', 'c', + 'h', 'R', '\t', 'o', 'n', 'N', 'o', 'M', 'a', 't', 'c', 'h', + '\032', '\266', '\001', '\n', '\007', 'O', 'n', 'M', 'a', 't', 'c', 'h', + '\022', '8', '\n', '\007', 'm', 'a', 't', 'c', 'h', 'e', 'r', '\030', + '\001', ' ', '\001', '(', '\013', '2', '\034', '.', 'x', 'd', 's', '.', + 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', + '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'H', + '\000', 'R', '\007', 'm', 'a', 't', 'c', 'h', 'e', 'r', '\022', ';', + '\n', '\006', 'a', 'c', 't', 'i', 'o', 'n', '\030', '\002', ' ', '\001', + '(', '\013', '2', '!', '.', 'x', 'd', 's', '.', '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', 'H', '\000', 'R', '\006', 'a', 'c', 't', 'i', 'o', 'n', '\022', + '#', '\n', '\r', 'k', 'e', 'e', 'p', '_', 'm', 'a', 't', 'c', + 'h', 'i', 'n', 'g', '\030', '\003', ' ', '\001', '(', '\010', 'R', '\014', + 'k', 'e', 'e', 'p', 'M', 'a', 't', 'c', 'h', 'i', 'n', 'g', + 'B', '\017', '\n', '\010', 'o', 'n', '_', 'm', 'a', 't', 'c', 'h', + '\022', '\003', '\370', 'B', '\001', '\032', '\266', '\010', '\n', '\013', 'M', 'a', + 't', 'c', 'h', 'e', 'r', 'L', 'i', 's', 't', '\022', '[', '\n', + '\010', 'm', 'a', 't', 'c', 'h', 'e', 'r', 's', '\030', '\001', ' ', + '\003', '(', '\013', '2', '5', '.', 'x', 'd', 's', '.', 't', 'y', + 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', + '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', + 't', 'c', 'h', 'e', 'r', 'L', 'i', 's', 't', '.', 'F', 'i', + 'e', 'l', 'd', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'B', '\010', + '\372', 'B', '\005', '\222', '\001', '\002', '\010', '\001', 'R', '\010', 'm', 'a', + 't', 'c', 'h', 'e', 'r', 's', '\032', '\221', '\006', '\n', '\t', 'P', + 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '\022', 'o', '\n', '\020', + 's', 'i', 'n', 'g', 'l', 'e', '_', 'p', 'r', 'e', 'd', 'i', + 'c', 'a', 't', 'e', '\030', '\001', ' ', '\001', '(', '\013', '2', 'B', + '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', + 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', 't', + 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', + 'L', 'i', 's', 't', '.', 'P', 'r', 'e', 'd', 'i', 'c', 'a', + 't', 'e', '.', 'S', 'i', 'n', 'g', 'l', 'e', 'P', 'r', 'e', + 'd', 'i', 'c', 'a', 't', 'e', 'H', '\000', 'R', '\017', 's', 'i', + 'n', 'g', 'l', 'e', 'P', 'r', 'e', 'd', 'i', 'c', 'a', 't', + 'e', '\022', 'a', '\n', '\n', 'o', 'r', '_', 'm', 'a', 't', 'c', + 'h', 'e', 'r', '\030', '\002', ' ', '\001', '(', '\013', '2', '@', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'L', 'i', 's', 't', '.', 'P', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '.', 'P', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', 'L', - 'i', 's', 't', 'H', '\000', 'R', '\n', 'a', 'n', 'd', 'M', 'a', - 't', 'c', 'h', 'e', 'r', '\022', 'U', '\n', '\013', 'n', 'o', 't', - '_', 'm', 'a', 't', 'c', 'h', 'e', 'r', '\030', '\004', ' ', '\001', - '(', '\013', '2', '2', '.', 'x', 'd', 's', '.', 't', 'y', 'p', - 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', - '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', - 'c', 'h', 'e', 'r', 'L', 'i', 's', 't', '.', 'P', 'r', 'e', - 'd', 'i', 'c', 'a', 't', 'e', 'H', '\000', 'R', '\n', 'n', 'o', - 't', 'M', 'a', 't', 'c', 'h', 'e', 'r', '\032', '\363', '\001', '\n', - '\017', 'S', 'i', 'n', 'g', 'l', 'e', 'P', 'r', 'e', 'd', 'i', - 'c', 'a', 't', 'e', '\022', 'A', '\n', '\005', 'i', 'n', 'p', 'u', - 't', '\030', '\001', ' ', '\001', '(', '\013', '2', '!', '.', 'x', 'd', - 's', '.', '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', 'B', '\010', '\372', 'B', '\005', '\212', - '\001', '\002', '\020', '\001', 'R', '\005', 'i', 'n', 'p', 'u', 't', '\022', - 'E', '\n', '\013', 'v', 'a', 'l', 'u', 'e', '_', 'm', 'a', 't', - 'c', 'h', '\030', '\002', ' ', '\001', '(', '\013', '2', '\"', '.', 'x', - 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', - 'h', 'e', 'r', '.', 'v', '3', '.', 'S', 't', 'r', 'i', 'n', - 'g', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'H', '\000', 'R', '\n', - 'v', 'a', 'l', 'u', 'e', 'M', 'a', 't', 'c', 'h', '\022', 'F', - '\n', '\014', 'c', 'u', 's', 't', 'o', 'm', '_', 'm', 'a', 't', - 'c', 'h', '\030', '\003', ' ', '\001', '(', '\013', '2', '!', '.', 'x', - 'd', 's', '.', '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', 'H', '\000', 'R', '\013', 'c', - 'u', 's', 't', 'o', 'm', 'M', 'a', 't', 'c', 'h', 'B', '\016', - '\n', '\007', 'm', 'a', 't', 'c', 'h', 'e', 'r', '\022', '\003', '\370', - 'B', '\001', '\032', 'k', '\n', '\r', 'P', 'r', 'e', 'd', 'i', 'c', - 'a', 't', 'e', 'L', 'i', 's', 't', '\022', 'Z', '\n', '\t', 'p', - 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '\030', '\001', ' ', '\003', + 'i', 's', 't', 'H', '\000', 'R', '\t', 'o', 'r', 'M', 'a', 't', + 'c', 'h', 'e', 'r', '\022', 'c', '\n', '\013', 'a', 'n', 'd', '_', + 'm', 'a', 't', 'c', 'h', 'e', 'r', '\030', '\003', ' ', '\001', '(', + '\013', '2', '@', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', + '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', + 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', 'c', + 'h', 'e', 'r', 'L', 'i', 's', 't', '.', 'P', 'r', 'e', 'd', + 'i', 'c', 'a', 't', 'e', '.', 'P', 'r', 'e', 'd', 'i', 'c', + 'a', 't', 'e', 'L', 'i', 's', 't', 'H', '\000', 'R', '\n', 'a', + 'n', 'd', 'M', 'a', 't', 'c', 'h', 'e', 'r', '\022', 'U', '\n', + '\013', 'n', 'o', 't', '_', 'm', 'a', 't', 'c', 'h', 'e', 'r', + '\030', '\004', ' ', '\001', '(', '\013', '2', '2', '.', 'x', 'd', 's', + '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', + 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', + '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'L', 'i', 's', 't', + '.', 'P', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', 'H', '\000', + 'R', '\n', 'n', 'o', 't', 'M', 'a', 't', 'c', 'h', 'e', 'r', + '\032', '\363', '\001', '\n', '\017', 'S', 'i', 'n', 'g', 'l', 'e', 'P', + 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '\022', 'A', '\n', '\005', + 'i', 'n', 'p', 'u', 't', '\030', '\001', ' ', '\001', '(', '\013', '2', + '!', '.', 'x', 'd', 's', '.', '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', 'B', '\010', + '\372', 'B', '\005', '\212', '\001', '\002', '\020', '\001', 'R', '\005', 'i', 'n', + 'p', 'u', 't', '\022', 'E', '\n', '\013', 'v', 'a', 'l', 'u', 'e', + '_', 'm', 'a', 't', 'c', 'h', '\030', '\002', ' ', '\001', '(', '\013', + '2', '\"', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', + 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'S', + 't', 'r', 'i', 'n', 'g', 'M', 'a', 't', 'c', 'h', 'e', 'r', + 'H', '\000', 'R', '\n', 'v', 'a', 'l', 'u', 'e', 'M', 'a', 't', + 'c', 'h', '\022', 'F', '\n', '\014', 'c', 'u', 's', 't', 'o', 'm', + '_', 'm', 'a', 't', 'c', 'h', '\030', '\003', ' ', '\001', '(', '\013', + '2', '!', '.', 'x', 'd', 's', '.', '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', 'H', + '\000', 'R', '\013', 'c', 'u', 's', 't', 'o', 'm', 'M', 'a', 't', + 'c', 'h', 'B', '\016', '\n', '\007', 'm', 'a', 't', 'c', 'h', 'e', + 'r', '\022', '\003', '\370', 'B', '\001', '\032', 'k', '\n', '\r', 'P', 'r', + 'e', 'd', 'i', 'c', 'a', 't', 'e', 'L', 'i', 's', 't', '\022', + 'Z', '\n', '\t', 'p', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', + '\030', '\001', ' ', '\003', '(', '\013', '2', '2', '.', 'x', 'd', 's', + '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', + 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', + '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'L', 'i', 's', 't', + '.', 'P', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', 'B', '\010', + '\372', 'B', '\005', '\222', '\001', '\002', '\010', '\002', 'R', '\t', 'p', 'r', + 'e', 'd', 'i', 'c', 'a', 't', 'e', 'B', '\021', '\n', '\n', 'm', + 'a', 't', 'c', 'h', '_', 't', 'y', 'p', 'e', '\022', '\003', '\370', + 'B', '\001', '\032', '\265', '\001', '\n', '\014', 'F', 'i', 'e', 'l', 'd', + 'M', 'a', 't', 'c', 'h', 'e', 'r', '\022', 'Z', '\n', '\t', 'p', + 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '\030', '\001', ' ', '\001', '(', '\013', '2', '2', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'L', 'i', 's', 't', '.', 'P', 'r', 'e', - 'd', 'i', 'c', 'a', 't', 'e', 'B', '\010', '\372', 'B', '\005', '\222', - '\001', '\002', '\010', '\002', 'R', '\t', 'p', 'r', 'e', 'd', 'i', 'c', - 'a', 't', 'e', 'B', '\021', '\n', '\n', 'm', 'a', 't', 'c', 'h', - '_', 't', 'y', 'p', 'e', '\022', '\003', '\370', 'B', '\001', '\032', '\265', - '\001', '\n', '\014', 'F', 'i', 'e', 'l', 'd', 'M', 'a', 't', 'c', - 'h', 'e', 'r', '\022', 'Z', '\n', '\t', 'p', 'r', 'e', 'd', 'i', - 'c', 'a', 't', 'e', '\030', '\001', ' ', '\001', '(', '\013', '2', '2', - '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', - 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', 't', - 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', - 'L', 'i', 's', 't', '.', 'P', 'r', 'e', 'd', 'i', 'c', 'a', - 't', 'e', 'B', '\010', '\372', 'B', '\005', '\212', '\001', '\002', '\020', '\001', - 'R', '\t', 'p', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '\022', - 'I', '\n', '\010', 'o', 'n', '_', 'm', 'a', 't', 'c', 'h', '\030', - '\002', ' ', '\001', '(', '\013', '2', '$', '.', 'x', 'd', 's', '.', - 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', - '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', - 'O', 'n', 'M', 'a', 't', 'c', 'h', 'B', '\010', '\372', 'B', '\005', - '\212', '\001', '\002', '\020', '\001', 'R', '\007', 'o', 'n', 'M', 'a', 't', - 'c', 'h', '\032', '\251', '\004', '\n', '\013', 'M', 'a', 't', 'c', 'h', - 'e', 'r', 'T', 'r', 'e', 'e', '\022', 'A', '\n', '\005', 'i', 'n', - 'p', 'u', 't', '\030', '\001', ' ', '\001', '(', '\013', '2', '!', '.', - 'x', 'd', 's', '.', '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', 'B', '\010', '\372', 'B', - '\005', '\212', '\001', '\002', '\020', '\001', 'R', '\005', 'i', 'n', 'p', 'u', - 't', '\022', '[', '\n', '\017', 'e', 'x', 'a', 'c', 't', '_', 'm', - 'a', 't', 'c', 'h', '_', 'm', 'a', 'p', '\030', '\002', ' ', '\001', - '(', '\013', '2', '1', '.', 'x', 'd', 's', '.', 't', 'y', 'p', + 'd', 'i', 'c', 'a', 't', 'e', 'B', '\010', '\372', 'B', '\005', '\212', + '\001', '\002', '\020', '\001', 'R', '\t', 'p', 'r', 'e', 'd', 'i', 'c', + 'a', 't', 'e', '\022', 'I', '\n', '\010', 'o', 'n', '_', 'm', 'a', + 't', 'c', 'h', '\030', '\002', ' ', '\001', '(', '\013', '2', '$', '.', + 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', + 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', + 'h', 'e', 'r', '.', 'O', 'n', 'M', 'a', 't', 'c', 'h', 'B', + '\010', '\372', 'B', '\005', '\212', '\001', '\002', '\020', '\001', 'R', '\007', 'o', + 'n', 'M', 'a', 't', 'c', 'h', '\032', '\251', '\004', '\n', '\013', 'M', + 'a', 't', 'c', 'h', 'e', 'r', 'T', 'r', 'e', 'e', '\022', 'A', + '\n', '\005', 'i', 'n', 'p', 'u', 't', '\030', '\001', ' ', '\001', '(', + '\013', '2', '!', '.', 'x', 'd', 's', '.', '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', + 'B', '\010', '\372', 'B', '\005', '\212', '\001', '\002', '\020', '\001', 'R', '\005', + 'i', 'n', 'p', 'u', 't', '\022', '[', '\n', '\017', 'e', 'x', 'a', + 'c', 't', '_', 'm', 'a', 't', 'c', 'h', '_', 'm', 'a', 'p', + '\030', '\002', ' ', '\001', '(', '\013', '2', '1', '.', 'x', 'd', 's', + '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', + 'r', '.', 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', + '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'T', 'r', 'e', 'e', + '.', 'M', 'a', 't', 'c', 'h', 'M', 'a', 'p', 'H', '\000', 'R', + '\r', 'e', 'x', 'a', 'c', 't', 'M', 'a', 't', 'c', 'h', 'M', + 'a', 'p', '\022', ']', '\n', '\020', 'p', 'r', 'e', 'f', 'i', 'x', + '_', 'm', 'a', 't', 'c', 'h', '_', 'm', 'a', 'p', '\030', '\003', + ' ', '\001', '(', '\013', '2', '1', '.', 'x', 'd', 's', '.', 't', + 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', + 'v', '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', + 'a', 't', 'c', 'h', 'e', 'r', 'T', 'r', 'e', 'e', '.', 'M', + 'a', 't', 'c', 'h', 'M', 'a', 'p', 'H', '\000', 'R', '\016', 'p', + 'r', 'e', 'f', 'i', 'x', 'M', 'a', 't', 'c', 'h', 'M', 'a', + 'p', '\022', 'F', '\n', '\014', 'c', 'u', 's', 't', 'o', 'm', '_', + 'm', 'a', 't', 'c', 'h', '\030', '\004', ' ', '\001', '(', '\013', '2', + '!', '.', 'x', 'd', 's', '.', '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', 'H', '\000', + 'R', '\013', 'c', 'u', 's', 't', 'o', 'm', 'M', 'a', 't', 'c', + 'h', '\032', '\300', '\001', '\n', '\010', 'M', 'a', 't', 'c', 'h', 'M', + 'a', 'p', '\022', 'V', '\n', '\003', 'm', 'a', 'p', '\030', '\001', ' ', + '\003', '(', '\013', '2', ':', '.', 'x', 'd', 's', '.', 't', 'y', + 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', + '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', + 't', 'c', 'h', 'e', 'r', 'T', 'r', 'e', 'e', '.', 'M', 'a', + 't', 'c', 'h', 'M', 'a', 'p', '.', 'M', 'a', 'p', 'E', 'n', + 't', 'r', 'y', 'B', '\010', '\372', 'B', '\005', '\232', '\001', '\002', '\010', + '\001', 'R', '\003', 'm', 'a', 'p', '\032', '\\', '\n', '\010', 'M', 'a', + 'p', 'E', 'n', 't', 'r', 'y', '\022', '\020', '\n', '\003', 'k', 'e', + 'y', '\030', '\001', ' ', '\001', '(', '\t', 'R', '\003', 'k', 'e', 'y', + '\022', ':', '\n', '\005', 'v', 'a', 'l', 'u', 'e', '\030', '\002', ' ', + '\001', '(', '\013', '2', '$', '.', 'x', 'd', 's', '.', 't', 'y', + 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', + '3', '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'O', 'n', + 'M', 'a', 't', 'c', 'h', 'R', '\005', 'v', 'a', 'l', 'u', 'e', + ':', '\002', '8', '\001', 'B', '\020', '\n', '\t', 't', 'r', 'e', 'e', + '_', 't', 'y', 'p', 'e', '\022', '\003', '\370', 'B', '\001', 'B', '\016', + '\n', '\014', 'm', 'a', 't', 'c', 'h', 'e', 'r', '_', 't', 'y', + 'p', 'e', 'B', '\\', '\n', '\036', 'c', 'o', 'm', '.', 'g', 'i', + 't', 'h', 'u', 'b', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', - '.', 'M', 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', - 'c', 'h', 'e', 'r', 'T', 'r', 'e', 'e', '.', 'M', 'a', 't', - 'c', 'h', 'M', 'a', 'p', 'H', '\000', 'R', '\r', 'e', 'x', 'a', - 'c', 't', 'M', 'a', 't', 'c', 'h', 'M', 'a', 'p', '\022', ']', - '\n', '\020', 'p', 'r', 'e', 'f', 'i', 'x', '_', 'm', 'a', 't', - 'c', 'h', '_', 'm', 'a', 'p', '\030', '\003', ' ', '\001', '(', '\013', - '2', '1', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', - 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', - 'a', 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', 'c', 'h', - 'e', 'r', 'T', 'r', 'e', 'e', '.', 'M', 'a', 't', 'c', 'h', - 'M', 'a', 'p', 'H', '\000', 'R', '\016', 'p', 'r', 'e', 'f', 'i', - 'x', 'M', 'a', 't', 'c', 'h', 'M', 'a', 'p', '\022', 'F', '\n', - '\014', 'c', 'u', 's', 't', 'o', 'm', '_', 'm', 'a', 't', 'c', - 'h', '\030', '\004', ' ', '\001', '(', '\013', '2', '!', '.', 'x', 'd', - 's', '.', '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', 'H', '\000', 'R', '\013', 'c', 'u', - 's', 't', 'o', 'm', 'M', 'a', 't', 'c', 'h', '\032', '\300', '\001', - '\n', '\010', 'M', 'a', 't', 'c', 'h', 'M', 'a', 'p', '\022', 'V', - '\n', '\003', 'm', 'a', 'p', '\030', '\001', ' ', '\003', '(', '\013', '2', - ':', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', - 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', - 't', 'c', 'h', 'e', 'r', '.', 'M', 'a', 't', 'c', 'h', 'e', - 'r', 'T', 'r', 'e', 'e', '.', 'M', 'a', 't', 'c', 'h', 'M', - 'a', 'p', '.', 'M', 'a', 'p', 'E', 'n', 't', 'r', 'y', 'B', - '\010', '\372', 'B', '\005', '\232', '\001', '\002', '\010', '\001', 'R', '\003', 'm', - 'a', 'p', '\032', '\\', '\n', '\010', 'M', 'a', 'p', 'E', 'n', 't', - 'r', 'y', '\022', '\020', '\n', '\003', 'k', 'e', 'y', '\030', '\001', ' ', - '\001', '(', '\t', 'R', '\003', 'k', 'e', 'y', '\022', ':', '\n', '\005', - 'v', 'a', 'l', 'u', 'e', '\030', '\002', ' ', '\001', '(', '\013', '2', - '$', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', - 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'M', 'a', - 't', 'c', 'h', 'e', 'r', '.', 'O', 'n', 'M', 'a', 't', 'c', - 'h', 'R', '\005', 'v', 'a', 'l', 'u', 'e', ':', '\002', '8', '\001', - 'B', '\020', '\n', '\t', 't', 'r', 'e', 'e', '_', 't', 'y', 'p', - 'e', '\022', '\003', '\370', 'B', '\001', ':', '\010', '\322', '\306', '\244', '\341', - '\006', '\002', '\010', '\001', 'B', '\016', '\n', '\014', 'm', 'a', 't', 'c', - 'h', 'e', 'r', '_', 't', 'y', 'p', 'e', 'B', '\\', '\n', '\036', - 'c', 'o', 'm', '.', 'g', 'i', 't', 'h', 'u', 'b', '.', 'x', - 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', - 'h', 'e', 'r', '.', 'v', '3', 'B', '\014', 'M', 'a', 't', 'c', - 'h', 'e', 'r', 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', '*', - 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', - 'n', 'c', 'f', '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'x', - 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', 'c', - 'h', 'e', 'r', '/', 'v', '3', 'b', '\006', 'p', 'r', 'o', 't', - 'o', '3', + 'B', '\014', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'P', 'r', 'o', + 't', 'o', 'P', '\001', 'Z', '*', 'g', 'i', 't', 'h', 'u', 'b', + '.', 'c', 'o', 'm', '/', 'c', 'n', 'c', 'f', '/', 'x', 'd', + 's', '/', 'g', 'o', '/', 'x', 'd', 's', '/', 't', 'y', 'p', + 'e', '/', 'm', 'a', 't', 'c', 'h', 'e', 'r', '/', 'v', '3', + 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', }; -static _upb_DefPool_Init *deps[5] = { - &xds_annotations_v3_status_proto_upbdefinit, +static _upb_DefPool_Init *deps[4] = { &xds_core_v3_extension_proto_upbdefinit, &xds_type_matcher_v3_string_proto_upbdefinit, &validate_validate_proto_upbdefinit, diff --git a/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c b/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c index 9d5f11090c70f..31f73eeb1d47d 100644 --- a/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +++ b/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c @@ -11,63 +11,72 @@ #include "xds/type/matcher/v3/string.upbdefs.h" #include "xds/type/matcher/v3/string.upb_minitable.h" +extern _upb_DefPool_Init xds_core_v3_extension_proto_upbdefinit; extern _upb_DefPool_Init xds_type_matcher_v3_regex_proto_upbdefinit; extern _upb_DefPool_Init validate_validate_proto_upbdefinit; -static const char descriptor[593] = { +static const char descriptor[683] = { '\n', ' ', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', 'c', 'h', 'e', 'r', '/', 'v', '3', '/', 's', 't', 'r', 'i', 'n', 'g', '.', 'p', 'r', 'o', 't', 'o', '\022', '\023', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', - 'c', 'h', 'e', 'r', '.', 'v', '3', '\032', '\037', 'x', 'd', 's', - '/', 't', 'y', 'p', 'e', '/', 'm', 'a', 't', 'c', 'h', 'e', - 'r', '/', 'v', '3', '/', 'r', 'e', 'g', 'e', 'x', '.', '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', '\"', '\231', '\002', '\n', '\r', 'S', 't', - 'r', 'i', 'n', 'g', 'M', 'a', 't', 'c', 'h', 'e', 'r', '\022', - '\026', '\n', '\005', 'e', 'x', 'a', 'c', 't', '\030', '\001', ' ', '\001', - '(', '\t', 'H', '\000', 'R', '\005', 'e', 'x', 'a', 'c', 't', '\022', - '!', '\n', '\006', 'p', 'r', 'e', 'f', 'i', 'x', '\030', '\002', ' ', - '\001', '(', '\t', 'B', '\007', '\372', 'B', '\004', 'r', '\002', '\020', '\001', - 'H', '\000', 'R', '\006', 'p', 'r', 'e', 'f', 'i', 'x', '\022', '!', - '\n', '\006', 's', 'u', 'f', 'f', 'i', 'x', '\030', '\003', ' ', '\001', + 'c', 'h', 'e', 'r', '.', 'v', '3', '\032', '\033', 'x', 'd', 's', + '/', 'c', 'o', 'r', 'e', '/', 'v', '3', '/', 'e', 'x', 't', + 'e', 'n', 's', 'i', 'o', 'n', '.', 'p', 'r', 'o', 't', 'o', + '\032', '\037', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', + 'a', 't', 'c', 'h', 'e', 'r', '/', 'v', '3', '/', 'r', 'e', + 'g', 'e', 'x', '.', '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', '\"', '\326', + '\002', '\n', '\r', 'S', 't', 'r', 'i', 'n', 'g', 'M', 'a', 't', + 'c', 'h', 'e', 'r', '\022', '\026', '\n', '\005', 'e', 'x', 'a', 'c', + 't', '\030', '\001', ' ', '\001', '(', '\t', 'H', '\000', 'R', '\005', 'e', + 'x', 'a', 'c', 't', '\022', '!', '\n', '\006', 'p', 'r', 'e', 'f', + 'i', 'x', '\030', '\002', ' ', '\001', '(', '\t', 'B', '\007', '\372', 'B', + '\004', 'r', '\002', '\020', '\001', 'H', '\000', 'R', '\006', 'p', 'r', 'e', + 'f', 'i', 'x', '\022', '!', '\n', '\006', 's', 'u', 'f', 'f', 'i', + 'x', '\030', '\003', ' ', '\001', '(', '\t', 'B', '\007', '\372', 'B', '\004', + 'r', '\002', '\020', '\001', 'H', '\000', 'R', '\006', 's', 'u', 'f', 'f', + 'i', 'x', '\022', 'L', '\n', '\n', 's', 'a', 'f', 'e', '_', 'r', + 'e', 'g', 'e', 'x', '\030', '\005', ' ', '\001', '(', '\013', '2', '!', + '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', + 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'R', 'e', 'g', + 'e', 'x', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'B', '\010', '\372', + 'B', '\005', '\212', '\001', '\002', '\020', '\001', 'H', '\000', 'R', '\t', 's', + 'a', 'f', 'e', 'R', 'e', 'g', 'e', 'x', '\022', '%', '\n', '\010', + 'c', 'o', 'n', 't', 'a', 'i', 'n', 's', '\030', '\007', ' ', '\001', '(', '\t', 'B', '\007', '\372', 'B', '\004', 'r', '\002', '\020', '\001', 'H', - '\000', 'R', '\006', 's', 'u', 'f', 'f', 'i', 'x', '\022', 'L', '\n', - '\n', 's', 'a', 'f', 'e', '_', 'r', 'e', 'g', 'e', 'x', '\030', - '\005', ' ', '\001', '(', '\013', '2', '!', '.', 'x', 'd', 's', '.', - 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', - '.', 'v', '3', '.', 'R', 'e', 'g', 'e', 'x', 'M', 'a', 't', - 'c', 'h', 'e', 'r', 'B', '\010', '\372', 'B', '\005', '\212', '\001', '\002', - '\020', '\001', 'H', '\000', 'R', '\t', 's', 'a', 'f', 'e', 'R', 'e', - 'g', 'e', 'x', '\022', '%', '\n', '\010', 'c', 'o', 'n', 't', 'a', - 'i', 'n', 's', '\030', '\007', ' ', '\001', '(', '\t', 'B', '\007', '\372', - 'B', '\004', 'r', '\002', '\020', '\001', 'H', '\000', 'R', '\010', 'c', 'o', - 'n', 't', 'a', 'i', 'n', 's', '\022', '\037', '\n', '\013', 'i', 'g', - 'n', 'o', 'r', 'e', '_', 'c', 'a', 's', 'e', '\030', '\006', ' ', - '\001', '(', '\010', 'R', '\n', 'i', 'g', 'n', 'o', 'r', 'e', 'C', - 'a', 's', 'e', 'B', '\024', '\n', '\r', 'm', 'a', 't', 'c', 'h', - '_', 'p', 'a', 't', 't', 'e', 'r', 'n', '\022', '\003', '\370', 'B', - '\001', '\"', ']', '\n', '\021', 'L', 'i', 's', 't', 'S', 't', 'r', - 'i', 'n', 'g', 'M', 'a', 't', 'c', 'h', 'e', 'r', '\022', 'H', - '\n', '\010', 'p', 'a', 't', 't', 'e', 'r', 'n', 's', '\030', '\001', - ' ', '\003', '(', '\013', '2', '\"', '.', 'x', 'd', 's', '.', 't', - 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', - 'v', '3', '.', 'S', 't', 'r', 'i', 'n', 'g', 'M', 'a', 't', - 'c', 'h', 'e', 'r', 'B', '\010', '\372', 'B', '\005', '\222', '\001', '\002', - '\010', '\001', 'R', '\010', 'p', 'a', 't', 't', 'e', 'r', 'n', 's', - 'B', '[', '\n', '\036', 'c', 'o', 'm', '.', 'g', 'i', 't', 'h', - 'u', 'b', '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', - 'm', 'a', 't', 'c', 'h', 'e', 'r', '.', 'v', '3', 'B', '\013', - 'S', 't', 'r', 'i', 'n', 'g', 'P', 'r', 'o', 't', 'o', 'P', - '\001', 'Z', '*', 'g', 'i', 't', 'h', 'u', 'b', '.', 'c', 'o', - 'm', '/', 'c', 'n', 'c', 'f', '/', 'x', 'd', 's', '/', 'g', - 'o', '/', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'm', - 'a', 't', 'c', 'h', 'e', 'r', '/', 'v', '3', 'b', '\006', 'p', - 'r', 'o', 't', 'o', '3', + '\000', 'R', '\010', 'c', 'o', 'n', 't', 'a', 'i', 'n', 's', '\022', + ';', '\n', '\006', 'c', 'u', 's', 't', 'o', 'm', '\030', '\010', ' ', + '\001', '(', '\013', '2', '!', '.', 'x', 'd', 's', '.', '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', 'H', '\000', 'R', '\006', 'c', 'u', 's', 't', 'o', 'm', + '\022', '\037', '\n', '\013', 'i', 'g', 'n', 'o', 'r', 'e', '_', 'c', + 'a', 's', 'e', '\030', '\006', ' ', '\001', '(', '\010', 'R', '\n', 'i', + 'g', 'n', 'o', 'r', 'e', 'C', 'a', 's', 'e', 'B', '\024', '\n', + '\r', 'm', 'a', 't', 'c', 'h', '_', 'p', 'a', 't', 't', 'e', + 'r', 'n', '\022', '\003', '\370', 'B', '\001', '\"', ']', '\n', '\021', 'L', + 'i', 's', 't', 'S', 't', 'r', 'i', 'n', 'g', 'M', 'a', 't', + 'c', 'h', 'e', 'r', '\022', 'H', '\n', '\010', 'p', 'a', 't', 't', + 'e', 'r', 'n', 's', '\030', '\001', ' ', '\003', '(', '\013', '2', '\"', + '.', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'm', 'a', + 't', 'c', 'h', 'e', 'r', '.', 'v', '3', '.', 'S', 't', 'r', + 'i', 'n', 'g', 'M', 'a', 't', 'c', 'h', 'e', 'r', 'B', '\010', + '\372', 'B', '\005', '\222', '\001', '\002', '\010', '\001', 'R', '\010', 'p', 'a', + 't', 't', 'e', 'r', 'n', 's', 'B', '[', '\n', '\036', 'c', 'o', + 'm', '.', 'g', 'i', 't', 'h', 'u', 'b', '.', 'x', 'd', 's', + '.', 't', 'y', 'p', 'e', '.', 'm', 'a', 't', 'c', 'h', 'e', + 'r', '.', 'v', '3', 'B', '\013', 'S', 't', 'r', 'i', 'n', 'g', + 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', '*', 'g', 'i', 't', + 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', 'c', 'f', + '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'x', 'd', 's', '/', + 't', 'y', 'p', 'e', '/', 'm', 'a', 't', 'c', 'h', 'e', 'r', + '/', 'v', '3', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', }; -static _upb_DefPool_Init *deps[3] = { +static _upb_DefPool_Init *deps[4] = { + &xds_core_v3_extension_proto_upbdefinit, &xds_type_matcher_v3_regex_proto_upbdefinit, &validate_validate_proto_upbdefinit, NULL, diff --git a/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c b/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c index 0b39e0e4b5615..4e98c7208dfdb 100644 --- a/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +++ b/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c @@ -13,11 +13,13 @@ extern _upb_DefPool_Init google_api_expr_v1alpha1_checked_proto_upbdefinit; extern _upb_DefPool_Init google_api_expr_v1alpha1_syntax_proto_upbdefinit; +extern _upb_DefPool_Init cel_expr_checked_proto_upbdefinit; +extern _upb_DefPool_Init cel_expr_syntax_proto_upbdefinit; extern _upb_DefPool_Init google_protobuf_wrappers_proto_upbdefinit; extern _upb_DefPool_Init xds_annotations_v3_status_proto_upbdefinit; extern _upb_DefPool_Init validate_validate_proto_upbdefinit; -static const char descriptor[646] = { +static const char descriptor[863] = { '\n', '\025', 'x', 'd', 's', '/', 't', 'y', 'p', 'e', '/', 'v', '3', '/', 'c', 'e', 'l', '.', 'p', 'r', 'o', 't', 'o', '\022', '\013', 'x', 'd', 's', '.', 't', 'y', 'p', 'e', '.', 'v', '3', @@ -27,56 +29,76 @@ static const char descriptor[646] = { 'r', 'o', 't', 'o', '\032', '%', 'g', 'o', 'o', 'g', 'l', 'e', '/', 'a', 'p', 'i', '/', 'e', 'x', 'p', 'r', '/', 'v', '1', 'a', 'l', 'p', 'h', 'a', '1', '/', 's', 'y', 'n', 't', 'a', - 'x', '.', 'p', 'r', 'o', 't', 'o', '\032', '\036', 'g', 'o', 'o', - 'g', 'l', 'e', '/', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', - '/', 'w', 'r', 'a', 'p', 'p', 'e', 'r', 's', '.', 'p', 'r', - 'o', 't', 'o', '\032', '\037', 'x', 'd', 's', '/', 'a', 'n', 'n', - 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '/', 'v', '3', '/', - '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', '\"', '\273', '\001', '\n', '\r', 'C', 'e', 'l', 'E', 'x', 'p', - 'r', 'e', 's', 's', 'i', 'o', 'n', '\022', 'G', '\n', '\013', 'p', - 'a', 'r', 's', 'e', 'd', '_', 'e', 'x', 'p', 'r', '\030', '\001', - ' ', '\001', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', - 'e', '.', 'a', 'p', 'i', '.', 'e', 'x', 'p', 'r', '.', 'v', - '1', 'a', 'l', 'p', 'h', 'a', '1', '.', 'P', 'a', 'r', 's', - 'e', 'd', 'E', 'x', 'p', 'r', 'H', '\000', 'R', '\n', 'p', 'a', - 'r', 's', 'e', 'd', 'E', 'x', 'p', 'r', '\022', 'J', '\n', '\014', - 'c', 'h', 'e', 'c', 'k', 'e', 'd', '_', 'e', 'x', 'p', 'r', - '\030', '\002', ' ', '\001', '(', '\013', '2', '%', '.', 'g', 'o', 'o', - 'g', 'l', 'e', '.', 'a', 'p', 'i', '.', 'e', 'x', 'p', 'r', - '.', 'v', '1', 'a', 'l', 'p', 'h', 'a', '1', '.', 'C', 'h', - 'e', 'c', 'k', 'e', 'd', 'E', 'x', 'p', 'r', 'H', '\000', 'R', - '\013', 'c', 'h', 'e', 'c', 'k', 'e', 'd', 'E', 'x', 'p', 'r', - 'B', '\025', '\n', '\016', 'e', 'x', 'p', 'r', '_', 's', 'p', 'e', - 'c', 'i', 'f', 'i', 'e', 'r', '\022', '\003', '\370', 'B', '\001', '\"', - '\236', '\001', '\n', '\020', 'C', 'e', 'l', 'E', 'x', 't', 'r', 'a', - 'c', 't', 'S', 't', 'r', 'i', 'n', 'g', '\022', 'G', '\n', '\014', - 'e', 'x', 'p', 'r', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', - '\030', '\001', ' ', '\001', '(', '\013', '2', '\032', '.', 'x', 'd', 's', - '.', 't', 'y', 'p', 'e', '.', 'v', '3', '.', 'C', 'e', 'l', - 'E', 'x', 'p', 'r', 'e', 's', 's', 'i', 'o', 'n', 'B', '\010', - '\372', 'B', '\005', '\212', '\001', '\002', '\020', '\001', 'R', '\013', 'e', 'x', - 'p', 'r', 'E', 'x', 't', 'r', 'a', 'c', 't', '\022', 'A', '\n', - '\r', 'd', 'e', 'f', 'a', 'u', 'l', 't', '_', 'v', 'a', 'l', - 'u', 'e', '\030', '\002', ' ', '\001', '(', '\013', '2', '\034', '.', 'g', - 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', 'b', - 'u', 'f', '.', 'S', 't', 'r', 'i', 'n', 'g', 'V', 'a', 'l', - 'u', 'e', 'R', '\014', 'd', 'e', 'f', 'a', 'u', 'l', 't', 'V', - 'a', 'l', 'u', 'e', 'B', 'P', '\n', '\026', 'c', 'o', 'm', '.', - 'g', 'i', 't', 'h', 'u', 'b', '.', 'x', 'd', 's', '.', 't', - 'y', 'p', 'e', '.', 'v', '3', 'B', '\010', 'C', 'e', 'l', 'P', - 'r', 'o', 't', 'o', 'P', '\001', 'Z', '\"', 'g', 'i', 't', 'h', - 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', 'c', 'f', '/', - 'x', 'd', 's', '/', 'g', 'o', '/', 'x', 'd', 's', '/', 't', - 'y', 'p', 'e', '/', 'v', '3', '\322', '\306', '\244', '\341', '\006', '\002', - '\010', '\001', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', + 'x', '.', 'p', 'r', 'o', 't', 'o', '\032', '\026', 'c', 'e', 'l', + '/', 'e', 'x', 'p', 'r', '/', 'c', 'h', 'e', 'c', 'k', 'e', + 'd', '.', 'p', 'r', 'o', 't', 'o', '\032', '\025', 'c', 'e', 'l', + '/', 'e', 'x', 'p', 'r', '/', 's', 'y', 'n', 't', 'a', 'x', + '.', 'p', 'r', 'o', 't', 'o', '\032', '\036', 'g', 'o', 'o', 'g', + 'l', 'e', '/', 'p', 'r', 'o', 't', 'o', 'b', 'u', 'f', '/', + 'w', 'r', 'a', 'p', 'p', 'e', 'r', 's', '.', 'p', 'r', 'o', + 't', 'o', '\032', '\037', 'x', 'd', 's', '/', 'a', 'n', 'n', 'o', + 't', 'a', 't', 'i', 'o', 'n', 's', '/', 'v', '3', '/', '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', + '\"', '\345', '\002', '\n', '\r', 'C', 'e', 'l', 'E', 'x', 'p', 'r', + 'e', 's', 's', 'i', 'o', 'n', '\022', 'K', '\n', '\013', 'p', 'a', + 'r', 's', 'e', 'd', '_', 'e', 'x', 'p', 'r', '\030', '\001', ' ', + '\001', '(', '\013', '2', '$', '.', 'g', 'o', 'o', 'g', 'l', 'e', + '.', 'a', 'p', 'i', '.', 'e', 'x', 'p', 'r', '.', 'v', '1', + 'a', 'l', 'p', 'h', 'a', '1', '.', 'P', 'a', 'r', 's', 'e', + 'd', 'E', 'x', 'p', 'r', 'B', '\002', '\030', '\001', 'H', '\000', 'R', + '\n', 'p', 'a', 'r', 's', 'e', 'd', 'E', 'x', 'p', 'r', '\022', + 'N', '\n', '\014', 'c', 'h', 'e', 'c', 'k', 'e', 'd', '_', 'e', + 'x', 'p', 'r', '\030', '\002', ' ', '\001', '(', '\013', '2', '%', '.', + 'g', 'o', 'o', 'g', 'l', 'e', '.', 'a', 'p', 'i', '.', 'e', + 'x', 'p', 'r', '.', 'v', '1', 'a', 'l', 'p', 'h', 'a', '1', + '.', 'C', 'h', 'e', 'c', 'k', 'e', 'd', 'E', 'x', 'p', 'r', + 'B', '\002', '\030', '\001', 'H', '\000', 'R', '\013', 'c', 'h', 'e', 'c', + 'k', 'e', 'd', 'E', 'x', 'p', 'r', '\022', '<', '\n', '\017', 'c', + 'e', 'l', '_', 'e', 'x', 'p', 'r', '_', 'p', 'a', 'r', 's', + 'e', 'd', '\030', '\003', ' ', '\001', '(', '\013', '2', '\024', '.', 'c', + 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'P', 'a', 'r', 's', + 'e', 'd', 'E', 'x', 'p', 'r', 'R', '\r', 'c', 'e', 'l', 'E', + 'x', 'p', 'r', 'P', 'a', 'r', 's', 'e', 'd', '\022', '?', '\n', + '\020', 'c', 'e', 'l', '_', 'e', 'x', 'p', 'r', '_', 'c', 'h', + 'e', 'c', 'k', 'e', 'd', '\030', '\004', ' ', '\001', '(', '\013', '2', + '\025', '.', 'c', 'e', 'l', '.', 'e', 'x', 'p', 'r', '.', 'C', + 'h', 'e', 'c', 'k', 'e', 'd', 'E', 'x', 'p', 'r', 'R', '\016', + 'c', 'e', 'l', 'E', 'x', 'p', 'r', 'C', 'h', 'e', 'c', 'k', + 'e', 'd', '\022', '&', '\n', '\017', 'c', 'e', 'l', '_', 'e', 'x', + 'p', 'r', '_', 's', 't', 'r', 'i', 'n', 'g', '\030', '\005', ' ', + '\001', '(', '\t', 'R', '\r', 'c', 'e', 'l', 'E', 'x', 'p', 'r', + 'S', 't', 'r', 'i', 'n', 'g', 'B', '\020', '\n', '\016', 'e', 'x', + 'p', 'r', '_', 's', 'p', 'e', 'c', 'i', 'f', 'i', 'e', 'r', + '\"', '\236', '\001', '\n', '\020', 'C', 'e', 'l', 'E', 'x', 't', 'r', + 'a', 'c', 't', 'S', 't', 'r', 'i', 'n', 'g', '\022', 'G', '\n', + '\014', 'e', 'x', 'p', 'r', '_', 'e', 'x', 't', 'r', 'a', 'c', + 't', '\030', '\001', ' ', '\001', '(', '\013', '2', '\032', '.', 'x', 'd', + 's', '.', 't', 'y', 'p', 'e', '.', 'v', '3', '.', 'C', 'e', + 'l', 'E', 'x', 'p', 'r', 'e', 's', 's', 'i', 'o', 'n', 'B', + '\010', '\372', 'B', '\005', '\212', '\001', '\002', '\020', '\001', 'R', '\013', 'e', + 'x', 'p', 'r', 'E', 'x', 't', 'r', 'a', 'c', 't', '\022', 'A', + '\n', '\r', 'd', 'e', 'f', 'a', 'u', 'l', 't', '_', 'v', 'a', + 'l', 'u', 'e', '\030', '\002', ' ', '\001', '(', '\013', '2', '\034', '.', + 'g', 'o', 'o', 'g', 'l', 'e', '.', 'p', 'r', 'o', 't', 'o', + 'b', 'u', 'f', '.', 'S', 't', 'r', 'i', 'n', 'g', 'V', 'a', + 'l', 'u', 'e', 'R', '\014', 'd', 'e', 'f', 'a', 'u', 'l', 't', + 'V', 'a', 'l', 'u', 'e', 'B', 'P', '\n', '\026', 'c', 'o', 'm', + '.', 'g', 'i', 't', 'h', 'u', 'b', '.', 'x', 'd', 's', '.', + 't', 'y', 'p', 'e', '.', 'v', '3', 'B', '\010', 'C', 'e', 'l', + 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', '\"', 'g', 'i', 't', + 'h', 'u', 'b', '.', 'c', 'o', 'm', '/', 'c', 'n', 'c', 'f', + '/', 'x', 'd', 's', '/', 'g', 'o', '/', 'x', 'd', 's', '/', + 't', 'y', 'p', 'e', '/', 'v', '3', '\322', '\306', '\244', '\341', '\006', + '\002', '\010', '\001', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3', }; -static _upb_DefPool_Init *deps[6] = { +static _upb_DefPool_Init *deps[8] = { &google_api_expr_v1alpha1_checked_proto_upbdefinit, &google_api_expr_v1alpha1_syntax_proto_upbdefinit, + &cel_expr_checked_proto_upbdefinit, + &cel_expr_syntax_proto_upbdefinit, &google_protobuf_wrappers_proto_upbdefinit, &xds_annotations_v3_status_proto_upbdefinit, &validate_validate_proto_upbdefinit, diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 8c61f861b4e3c..ab0810e07fa89 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -183,6 +183,8 @@ 'src/core/ext/transport/chttp2/transport/writing.cc', 'src/core/ext/transport/inproc/inproc_transport.cc', 'src/core/ext/transport/inproc/legacy_inproc_transport.cc', + 'src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c', + 'src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c', 'src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c', 'src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c', 'src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c', @@ -357,6 +359,8 @@ 'src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c', 'src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c', 'src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c', + 'src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c', + 'src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c', 'src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c', 'src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c', 'src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c', diff --git a/templates/CMakeLists.txt.template b/templates/CMakeLists.txt.template index 760ff8bcf7dd8..fcb4b8fa244ca 100644 --- a/templates/CMakeLists.txt.template +++ b/templates/CMakeLists.txt.template @@ -27,8 +27,6 @@ proto_re = re.compile('(.*)\\.proto') lib_map = {lib.name: lib for lib in libs} - third_party_proto_prefixes = {lib.proto_prefix for lib in external_proto_libraries} - gpr_libs = ['gpr'] grpc_libs = ['grpc', 'grpc_unsecure'] grpcxx_libs = ['grpc++', 'grpc++_unsecure'] @@ -36,9 +34,11 @@ def third_party_proto_import_path(path): """Removes third_party prefix to match ProtoBuf's relative import path.""" - for prefix in third_party_proto_prefixes: - if path.startswith(prefix): - return path[len(prefix):] + for lib in external_proto_libraries: + if path.startswith(lib.proto_prefix): + path = path[len(lib.proto_prefix):] + path = path.removeprefix(lib.strip_path_prefix) + break return path def proto_replace_ext(filename, ext): diff --git a/templates/MODULE.bazel.inja b/templates/MODULE.bazel.inja index 7e8a655bff600..031a73b7e379b 100644 --- a/templates/MODULE.bazel.inja +++ b/templates/MODULE.bazel.inja @@ -57,7 +57,7 @@ bazel_dep(name = "re2", version = "2024-07-02.bcr.1", repo_name = "com_googlesou bazel_dep(name = "rules_apple", version = "3.16.0", repo_name = "build_bazel_rules_apple") bazel_dep(name = "rules_cc", version = "0.1.1") bazel_dep(name = "rules_proto", version = "7.0.2") -bazel_dep(name = "xds", version = "0.0.0-20240423-555b57e", repo_name = "com_github_cncf_xds") # mismatched 20231116 +bazel_dep(name = "xds", version = "0.0.0-20251210-ee656c7", repo_name = "com_github_cncf_xds") bazel_dep(name = "zlib", version = "1.3.1.bcr.5") # Development dependencies diff --git a/templates/tools/dockerfile/git_config.include b/templates/tools/dockerfile/git_config.include index 60e1629863953..c934655d2cd08 100644 --- a/templates/tools/dockerfile/git_config.include +++ b/templates/tools/dockerfile/git_config.include @@ -1,22 +1,4 @@ -# TODO: simplify the list of third_party modules list -# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories -# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule RUN git config --global protocol.file.allow always && \ git config --global --add safe.directory /var/local/jenkins/grpc && \ git config --global --add safe.directory /var/local/jenkins/grpc/.git && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2 && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib + git config --global --add safe.directory '/var/local/jenkins/grpc/.git/modules/third_party/*' diff --git a/test/distrib/bazel/test_single_bazel_version.sh b/test/distrib/bazel/test_single_bazel_version.sh index cca36e25c2a01..e1eae42da7031 100755 --- a/test/distrib/bazel/test_single_bazel_version.sh +++ b/test/distrib/bazel/test_single_bazel_version.sh @@ -62,6 +62,12 @@ EXCLUDED_TARGETS=( "-//third_party/toolchains/rbe_windows_vs2022_bazel7/..." "-//third_party/toolchains:rbe_windows_default_toolchain_suite" + # A bunch of stuff in the CEL repo doesn't seem to work right in this + # context. But we only use protos from here, and the rest of the + # build won't work if this doesn't, so it doesn't seem necessary to + # test it here. + "-//third_party/cel-spec/..." + # Exclude bazelified tests as they contain some bazel hackery "-//tools/bazelify_tests/..." diff --git a/third_party/README.md b/third_party/README.md index 64a8693292108..4ca5128622068 100644 --- a/third_party/README.md +++ b/third_party/README.md @@ -153,7 +153,7 @@ rm -rf third_party/utf8_range cp -r third_party/protobuf/third_party/utf8_range third_party/utf8_range/ ``` -### Updating third_party/envoy-api +### Updating third_party/envoy-api or third_party/xds or third_party/cel-spec Apart from the above steps, please run `tools/codegen/core/gen_upb_api.sh` to regenerate upb files. diff --git a/third_party/cel-spec b/third_party/cel-spec new file mode 160000 index 0000000000000..9f069b3ee58b0 --- /dev/null +++ b/third_party/cel-spec @@ -0,0 +1 @@ +Subproject commit 9f069b3ee58b02d6f6736c5ebd6587075c1a1b22 diff --git a/third_party/xds b/third_party/xds index 3a472e524827f..ee656c7534f5d 160000 --- a/third_party/xds +++ b/third_party/xds @@ -1 +1 @@ -Subproject commit 3a472e524827f72d1ad621c4983dd5af54c46776 +Subproject commit ee656c7534f5d7dc23d44dd611689568f72017a6 diff --git a/tools/artifact_gen/extract_metadata_from_bazel_xml.cc b/tools/artifact_gen/extract_metadata_from_bazel_xml.cc index 3d0ce7fbb2148..d4ca9fb955d8b 100644 --- a/tools/artifact_gen/extract_metadata_from_bazel_xml.cc +++ b/tools/artifact_gen/extract_metadata_from_bazel_xml.cc @@ -436,6 +436,7 @@ class ArtifactGen { {"@com_google_googleapis//", ""}, {"@com_github_cncf_xds//", ""}, {"@com_envoyproxy_protoc_gen_validate//", ""}, + {"@dev_cel//", "proto/"}, {"@envoy_api//", ""}, {"@opencensus_proto//", ""}, }; diff --git a/tools/artifact_gen/gen_upb_api_from_bazel.cc b/tools/artifact_gen/gen_upb_api_from_bazel.cc index 90a6776804e2b..e56f2cde00129 100644 --- a/tools/artifact_gen/gen_upb_api_from_bazel.cc +++ b/tools/artifact_gen/gen_upb_api_from_bazel.cc @@ -173,6 +173,7 @@ std::pair GetExternalLink(const std::string& file) { {"@com_google_googleapis//", ""}, {"@com_github_cncf_xds//", ""}, {"@com_envoyproxy_protoc_gen_validate//", ""}, + {"@dev_cel//", "proto/"}, {"@envoy_api//", ""}, {"@opencensus_proto//", ""}, }; @@ -191,12 +192,20 @@ std::string GetBazelBinRootPath( std::string name_part = std::filesystem::path(file).stem().string(); // For upb generated files, we need to strip two extensions. name_part = std::filesystem::path(name_part).stem().string(); - return absl::StrCat( kBazelBinRoot, "external/", absl::StrReplaceAll(elink.first, {{"@", ""}, {"//", ""}}), "/src/google/protobuf/_virtual_imports/", name_part, "_proto/", file); } + if (elink.first == "@dev_cel//") { + std::string name_part = std::filesystem::path(file).stem().string(); + // For upb generated files, we need to strip two extensions. + name_part = std::filesystem::path(name_part).stem().string(); + return absl::StrCat( + kBazelBinRoot, "external/", + absl::StrReplaceAll(elink.first, {{"@", ""}, {"//", ""}}), + "/proto/cel/expr/_virtual_imports/", name_part, "_proto/", file); + } if (absl::StartsWith(elink.first, "@")) { return absl::StrCat( kBazelBinRoot, "external/", diff --git a/tools/bazelify_tests/dockerimage_current_versions.bzl b/tools/bazelify_tests/dockerimage_current_versions.bzl index 15bfc6ccb8094..af242b168b74a 100644 --- a/tools/bazelify_tests/dockerimage_current_versions.bzl +++ b/tools/bazelify_tests/dockerimage_current_versions.bzl @@ -67,13 +67,13 @@ DOCKERIMAGE_CURRENT_VERSIONS = { "tools/dockerfile/grpc_artifact_manylinux2014_aarch64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_manylinux2014_aarch64@sha256:9d6f150da39d1b16269d601010876d3f8a2138121db289abad40fdaf7fad287b", "tools/dockerfile/grpc_artifact_manylinux2014_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_manylinux2014_x64@sha256:0f1e61a35200df7ddbe8626e353b634ab831ab556860ff85d55b650617c5385b", "tools/dockerfile/grpc_artifact_manylinux2014_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_manylinux2014_x86@sha256:b8d3242fc9402ed55cf2fe20d13be7491141e793bc76c12e6452c8cb072624cf", - "tools/dockerfile/grpc_artifact_python_linux_armv7.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_linux_armv7@sha256:bca9679ec579aac202f57ce59c3390618052385ca9ed2b125541b37b604cc8b9", - "tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_aarch64@sha256:81794e9c482771722ac7596e2e41d0c20e151365510149b290164cd579e4504c", - "tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x64@sha256:399ece2f021854bcd3b1deea6639fd5d1038f50e7e646c4c646b58135917f977", - "tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x86@sha256:82accaf8514e324d88086da2b54f0f7a048bdf5b969c11ca4e506f5c7f56679e", - "tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_aarch64@sha256:60cb5603ae8c075e06c7f1a24dd1caf4467c836920f4f2b4f9b614340f0b651f", - "tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_x64@sha256:341e2299e4ccf6d018a4bcd03c93d429a07372b521615a372d29197de360fd6c", - "tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_x86@sha256:98c512247de84d255ec70ccb8eeffd163f938523a66edd7a8f3eb50b0ec000a1", + "tools/dockerfile/grpc_artifact_python_linux_armv7.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_linux_armv7@sha256:457f85d820e2b826e7e464923993a686c6061e8245748c5f87ccad00320818fd", + "tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_aarch64@sha256:51720dc8fb11a0af49f9d2cd632473ab9cbea63cfcfd829bbccd0d0e9547d159", + "tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x64@sha256:83048ba2b61e02dddb849c7323ef2dcfbb78d908bc11c784701afca9c57bf52d", + "tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x86@sha256:508ed0ec9cb222f7e4ea92e81aa09637ba843b844502011dbcd3c6a0a8d222db", + "tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_aarch64@sha256:b9e13deba7745fc00f1e4cd1c86bd298deed1a99a942d5a3cb77af980f989135", + "tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_x64@sha256:0b6cca047f280a341898c0f38c9e65ce41f3f431f35d01e05cb7e5b225ec75a9", + "tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_x86@sha256:a4dd61a51da7b87af95b83b6af8977e83bafea7472852edb681d5b0f00d711af", "tools/dockerfile/interoptest/grpc_interop_aspnetcore.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_interop_aspnetcore@sha256:aedf6ba703f9e73bb072fedb6805c96c4db255e6917d22353383d287455f4e14", "tools/dockerfile/interoptest/grpc_interop_cxx.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_interop_cxx@sha256:3e6016519cc5d5b5fcd67eb570d6d56da739164dbc7604f55d914ef7546fdad5", "tools/dockerfile/interoptest/grpc_interop_dart.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_interop_dart@sha256:0500c2bc2d7f4241b92089df75e82608f22b3ff4274382307c837c8828a730ef", diff --git a/tools/buildgen/extract_metadata_from_bazel_xml.py b/tools/buildgen/extract_metadata_from_bazel_xml.py index 0c2904cfa8b43..3bf4693051b6a 100755 --- a/tools/buildgen/extract_metadata_from_bazel_xml.py +++ b/tools/buildgen/extract_metadata_from_bazel_xml.py @@ -53,27 +53,26 @@ class ExternalProtoLibrary: Fields: - destination(int): The relative path of this proto library should be. Preferably, it should match the submodule path. - - proto_prefix(str): The prefix to remove in order to insure the proto import - is correct. For more info, see description of + - proto_prefix(str): The prefix to remove in order to insure the proto + import is correct. For more info, see description of https://github.com/grpc/grpc/pull/25272. - - urls(List[str]): Following 3 fields should be filled by build metadata from - Bazel. - - hash(str): The hash of the downloaded archive - - strip_prefix(str): The path to be stripped from the extracted directory, see - http_archive in Bazel. + - strip_path_prefix(str): Prefix to strip off of path after the + proto_prefix to get to the proto import path. + - urls(List[str]): Download URL, same as in http_archive in Bazel. + - hash(str): The hash of the downloaded archive, same as in http_archive + in Bazel. + - strip_prefix(str): The path to be stripped from the extracted directory, + see http_archive in Bazel. """ - def __init__( - self, destination, proto_prefix, urls=None, hash="", strip_prefix="" - ): + def __init__(self, destination, proto_prefix, strip_path_prefix=""): self.destination = destination self.proto_prefix = proto_prefix - if urls is None: - self.urls = [] - else: - self.urls = urls - self.hash = hash - self.strip_prefix = strip_prefix + self.strip_path_prefix = strip_path_prefix + # These are filled in later by _parse_http_archives(). + self.urls = [] + self.hash = "" + self.strip_prefix = "" EXTERNAL_PROTO_LIBRARIES = { @@ -96,6 +95,11 @@ def __init__( destination="third_party/opencensus-proto/src", proto_prefix="third_party/opencensus-proto/src/", ), + "dev_cel": ExternalProtoLibrary( + destination="third_party/cel-spec", + proto_prefix="third_party/cel-spec/", + strip_path_prefix="proto/", + ), } # We want to get a list of source files for some external libraries @@ -610,6 +614,7 @@ def _expand_upb_proto_library_rules(bazel_rules): ("@com_google_googleapis//", ""), ("@com_github_cncf_xds//", ""), ("@com_envoyproxy_protoc_gen_validate//", ""), + ("@dev_cel//", "proto/"), ("@envoy_api//", ""), ("@opencensus_proto//", ""), ] diff --git a/tools/buildgen/plugins/check_attrs.py b/tools/buildgen/plugins/check_attrs.py index 6d051f364660c..4d892ead84a05 100644 --- a/tools/buildgen/plugins/check_attrs.py +++ b/tools/buildgen/plugins/check_attrs.py @@ -97,6 +97,7 @@ def subset_of(values): "external_proto_library": { "destination": anything(), "proto_prefix": anything(), + "strip_path_prefix": anything(), "urls": anything(), "hash": anything(), "strip_prefix": anything(), diff --git a/tools/dockerfile/grpc_artifact_python_linux_armv7.current_version b/tools/dockerfile/grpc_artifact_python_linux_armv7.current_version index cfb58c39f9160..5f76181aa7d1e 100644 --- a/tools/dockerfile/grpc_artifact_python_linux_armv7.current_version +++ b/tools/dockerfile/grpc_artifact_python_linux_armv7.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_linux_armv7:0b5a74f5351498119185228584791fd088ade9eb@sha256:bca9679ec579aac202f57ce59c3390618052385ca9ed2b125541b37b604cc8b9 \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_linux_armv7:6179c3c4fd4666eebbd5d217f8de90a610dbb00f@sha256:457f85d820e2b826e7e464923993a686c6061e8245748c5f87ccad00320818fd \ No newline at end of file diff --git a/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile b/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile index 8b6a81026fcb5..22b3aa53d3ba2 100644 --- a/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile +++ b/tools/dockerfile/grpc_artifact_python_linux_armv7/Dockerfile @@ -20,28 +20,10 @@ FROM dockcross/linux-armv7 # Configure git early so the cache reused by other py build based on the same image. -# TODO: simplify the list of third_party modules list -# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories -# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule RUN git config --global protocol.file.allow always && \ git config --global --add safe.directory /var/local/jenkins/grpc && \ git config --global --add safe.directory /var/local/jenkins/grpc/.git && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2 && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib + git config --global --add safe.directory '/var/local/jenkins/grpc/.git/modules/third_party/*' RUN apt update && apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev \ diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version b/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version index a15d82db2eba3..036f3fb57fe62 100644 --- a/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version +++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_aarch64:ad7664316cd8ff8a2adee63b7972b182c7b19320@sha256:81794e9c482771722ac7596e2e41d0c20e151365510149b290164cd579e4504c \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_aarch64:a9e91dc1e8b25be0cff89d17f5b29e1042648953@sha256:51720dc8fb11a0af49f9d2cd632473ab9cbea63cfcfd829bbccd0d0e9547d159 \ No newline at end of file diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile b/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile index 99d30a3974fa0..5f165cfa6ef6f 100644 --- a/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile +++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_aarch64/Dockerfile @@ -16,28 +16,10 @@ FROM quay.io/pypa/manylinux2014_aarch64:2025.07.14-1 -# TODO: simplify the list of third_party modules list -# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories -# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule RUN git config --global protocol.file.allow always && \ git config --global --add safe.directory /var/local/jenkins/grpc && \ git config --global --add safe.directory /var/local/jenkins/grpc/.git && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2 && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib + git config --global --add safe.directory '/var/local/jenkins/grpc/.git/modules/third_party/*' #================= # Install ccache diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version b/tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version index 4c8212fad6028..88c8d5afd3184 100644 --- a/tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version +++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x64:10b29025dcbdedb91544d4efbcb9e7ed438da71d@sha256:399ece2f021854bcd3b1deea6639fd5d1038f50e7e646c4c646b58135917f977 \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x64:b9c15b9de17b109592c4d02de2e5c587f29c233b@sha256:83048ba2b61e02dddb849c7323ef2dcfbb78d908bc11c784701afca9c57bf52d \ No newline at end of file diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile b/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile index c932ae2c5aa27..9d066d08fa850 100644 --- a/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile +++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_x64/Dockerfile @@ -18,28 +18,10 @@ FROM quay.io/pypa/manylinux2014_x86_64:2025.07.14-5 -# TODO: simplify the list of third_party modules list -# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories -# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule RUN git config --global protocol.file.allow always && \ git config --global --add safe.directory /var/local/jenkins/grpc && \ git config --global --add safe.directory /var/local/jenkins/grpc/.git && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2 && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib + git config --global --add safe.directory '/var/local/jenkins/grpc/.git/modules/third_party/*' #================= # Install ccache diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version b/tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version index fdbe0450f5761..44b98d82d1c29 100644 --- a/tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version +++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_x86.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x86:33dc49e2fc062d52112ea69a76af00313fc057e3@sha256:82accaf8514e324d88086da2b54f0f7a048bdf5b969c11ca4e506f5c7f56679e +us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_manylinux2014_x86:6c51506974f8e91e3e58d6052e94b317976f7038@sha256:508ed0ec9cb222f7e4ea92e81aa09637ba843b844502011dbcd3c6a0a8d222db \ No newline at end of file diff --git a/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile b/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile index cec45ab747d96..3230037ebb3b8 100644 --- a/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile +++ b/tools/dockerfile/grpc_artifact_python_manylinux2014_x86/Dockerfile @@ -18,28 +18,10 @@ FROM quay.io/pypa/manylinux2014_i686:2025.07.14-5 -# TODO: simplify the list of third_party modules list -# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories -# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule RUN git config --global protocol.file.allow always && \ git config --global --add safe.directory /var/local/jenkins/grpc && \ git config --global --add safe.directory /var/local/jenkins/grpc/.git && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2 && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib + git config --global --add safe.directory '/var/local/jenkins/grpc/.git/modules/third_party/*' #================= # Install ccache diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64.current_version b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64.current_version index 64644770a40a3..064f8c3d0f4a2 100644 --- a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64.current_version +++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_aarch64:5aa6672c884b44354960d4e66e5457a358330a66@sha256:60cb5603ae8c075e06c7f1a24dd1caf4467c836920f4f2b4f9b614340f0b651f +us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_aarch64:9b77b553e72cf8501d1fb3f362e7ae8445862346@sha256:b9e13deba7745fc00f1e4cd1c86bd298deed1a99a942d5a3cb77af980f989135 \ No newline at end of file diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64/Dockerfile b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64/Dockerfile index c30366a7e8ffe..98deaaf8ed14d 100644 --- a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64/Dockerfile +++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_aarch64/Dockerfile @@ -16,28 +16,10 @@ FROM quay.io/pypa/musllinux_1_2_aarch64:2025.07.27-1 -# TODO: simplify the list of third_party modules list -# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories -# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule RUN git config --global protocol.file.allow always && \ git config --global --add safe.directory /var/local/jenkins/grpc && \ git config --global --add safe.directory /var/local/jenkins/grpc/.git && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2 && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib + git config --global --add safe.directory '/var/local/jenkins/grpc/.git/modules/third_party/*' # Preinstall zstd and hiredis for ccache to avoid *_FROM_INTERNET downloads. diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64.current_version b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64.current_version index cdc4c46711949..a1c9590417302 100644 --- a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64.current_version +++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_x64:03861b53923fe397946c149a11e4a0e8f31ce404@sha256:341e2299e4ccf6d018a4bcd03c93d429a07372b521615a372d29197de360fd6c +us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_x64:2ce9160b1ddba3c7ebc2ec7f40265290a74b001f@sha256:0b6cca047f280a341898c0f38c9e65ce41f3f431f35d01e05cb7e5b225ec75a9 \ No newline at end of file diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64/Dockerfile b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64/Dockerfile index 763b20dcd6744..3425a0a0d856a 100644 --- a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64/Dockerfile +++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x64/Dockerfile @@ -16,28 +16,10 @@ FROM quay.io/pypa/musllinux_1_2_x86_64:2025.07.25-1 -# TODO: simplify the list of third_party modules list -# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories -# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule RUN git config --global protocol.file.allow always && \ git config --global --add safe.directory /var/local/jenkins/grpc && \ git config --global --add safe.directory /var/local/jenkins/grpc/.git && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2 && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib + git config --global --add safe.directory '/var/local/jenkins/grpc/.git/modules/third_party/*' # Preinstall zstd and hiredis for ccache to avoid *_FROM_INTERNET downloads. diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86.current_version b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86.current_version index 017878214b312..139838fc8cc61 100644 --- a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86.current_version +++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_x86:a19f9601d86f8cae3642369882a4b1704122f45f@sha256:98c512247de84d255ec70ccb8eeffd163f938523a66edd7a8f3eb50b0ec000a1 +us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_python_musllinux_1_2_x86:f03c40dbc42f6769ce4227c53566e797ba66104c@sha256:a4dd61a51da7b87af95b83b6af8977e83bafea7472852edb681d5b0f00d711af \ No newline at end of file diff --git a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86/Dockerfile b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86/Dockerfile index 121f2c59486dc..5d11b3d283430 100644 --- a/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86/Dockerfile +++ b/tools/dockerfile/grpc_artifact_python_musllinux_1_2_x86/Dockerfile @@ -16,28 +16,10 @@ FROM quay.io/pypa/musllinux_1_2_i686:2025.07.27-1 -# TODO: simplify the list of third_party modules list -# NOTE: git>=2.46 allows leading paths like third_party/* to include all subdirectories -# current docker base images use git versions lower than 2.46 and hence require separate configs for each submodule RUN git config --global protocol.file.allow always && \ git config --global --add safe.directory /var/local/jenkins/grpc && \ git config --global --add safe.directory /var/local/jenkins/grpc/.git && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/abseil-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/benchmark && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/bloaty && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/boringssl-with-bazel && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/cares/cares && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/envoy-api && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googleapis && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/googletest && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opencensus-proto && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/opentelemetry-cpp && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protobuf && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/protoc-gen-validate && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/re2 && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/xds && \ - git config --global --add safe.directory /var/local/jenkins/grpc/.git/modules/third_party/zlib + git config --global --add safe.directory '/var/local/jenkins/grpc/.git/modules/third_party/*' # Preinstall zstd and hiredis for ccache to avoid *_FROM_INTERNET downloads. diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 44236420e0e54..95bb96122aecb 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -1443,6 +1443,12 @@ src/core/ext/transport/inproc/inproc_transport.cc \ src/core/ext/transport/inproc/inproc_transport.h \ src/core/ext/transport/inproc/legacy_inproc_transport.cc \ src/core/ext/transport/inproc/legacy_inproc_transport.h \ +src/core/ext/upb-gen/cel/expr/checked.upb.h \ +src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c \ +src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h \ +src/core/ext/upb-gen/cel/expr/syntax.upb.h \ +src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c \ +src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h \ src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h \ src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c \ src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h \ @@ -1965,6 +1971,10 @@ src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h \ src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h \ src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c \ src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h \ +src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c \ +src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h \ +src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c \ +src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h \ src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c \ src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h \ src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 2cbf6c1d222f5..180999583e611 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -1276,6 +1276,12 @@ src/core/ext/transport/inproc/inproc_transport.cc \ src/core/ext/transport/inproc/inproc_transport.h \ src/core/ext/transport/inproc/legacy_inproc_transport.cc \ src/core/ext/transport/inproc/legacy_inproc_transport.h \ +src/core/ext/upb-gen/cel/expr/checked.upb.h \ +src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c \ +src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h \ +src/core/ext/upb-gen/cel/expr/syntax.upb.h \ +src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c \ +src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h \ src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h \ src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c \ src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h \ @@ -1798,6 +1804,10 @@ src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h \ src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h \ src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c \ src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h \ +src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c \ +src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h \ +src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c \ +src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h \ src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c \ src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h \ src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c \ diff --git a/tools/run_tests/sanity/check_bazel_workspace.py b/tools/run_tests/sanity/check_bazel_workspace.py index 6fce83e835ae2..230b3482ee0fe 100755 --- a/tools/run_tests/sanity/check_bazel_workspace.py +++ b/tools/run_tests/sanity/check_bazel_workspace.py @@ -68,6 +68,7 @@ "com_google_googleapis", "com_google_libprotobuf_mutator", "com_github_cncf_xds", + "dev_cel", "google_cloud_cpp", "rules_shell", "rules_java", diff --git a/tools/run_tests/sanity/check_submodules.sh b/tools/run_tests/sanity/check_submodules.sh index 049daa0c73a6c..6b46a7a38b9c8 100755 --- a/tools/run_tests/sanity/check_submodules.sh +++ b/tools/run_tests/sanity/check_submodules.sh @@ -30,6 +30,7 @@ third_party/benchmark 12235e24652fc7f809373e7c11a5f73c5763fc4c third_party/bloaty 60209eb1ccc34d5deefb002d1b7f37545204f7f2 third_party/boringssl-with-bazel c63fadbde60a2224c22189d14c4001bbd2a3a629 third_party/cares/cares d3a507e920e7af18a5efb7f9f1d8044ed4750013 +third_party/cel-spec 9f069b3ee58b02d6f6736c5ebd6587075c1a1b22 third_party/envoy-api 6ef568cf4a67362849911d1d2a546fd9f35db2ff third_party/googleapis 2193a2bfcecb92b92aad7a4d81baa428cafd7dfd third_party/googletest 52eb8108c5bdec04579160ae17225d66034bd723 @@ -39,7 +40,7 @@ third_party/opentelemetry-cpp ced79860f8c8a091a2eabfee6d47783f828a9b59 third_party/protobuf 74211c0dfc2777318ab53c2cd2c317a2ef9012de third_party/protoc-gen-validate 7b06248484ceeaa947e93ca2747eccf336a88ecc third_party/re2 0c5616df9c0aaa44c9440d87422012423d91c7d1 -third_party/xds 3a472e524827f72d1ad621c4983dd5af54c46776 +third_party/xds ee656c7534f5d7dc23d44dd611689568f72017a6 third_party/zlib f1f503da85d52e56aae11557b4d79a42bcaa2b86 EOF From c8e1fe111170882745fa8398dbaad722eda4e699 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 2 Feb 2026 10:59:36 -0800 Subject: [PATCH 46/67] Extend expiry dates for several gRPC experiments. The expiry dates for multiple experiments in experiments.yaml are updated from February 2026 to May 2026. PiperOrigin-RevId: 864433030 --- src/core/lib/experiments/experiments.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index 7f1f35b31019b..ac9a2f0194b9c 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -43,7 +43,7 @@ # state of each experiment. - name: buffer_list_deletion_prep description: Gate the removal of old TCP timestamp collection mechanism. - expiry: 2026/02/01 + expiry: 2026/05/01 owner: ctiller@google.com test_tags: [core_end2end_test] - name: call_tracer_in_transport @@ -64,12 +64,12 @@ test_tags: [] - name: chaotic_good_connect_deadline description: Use the deadline from the connect args in chaotic good connector - expiry: 2026/02/01 + expiry: 2026/05/01 owner: ctiller@google.com test_tags: [core_end2end_test] - name: chaotic_good_framing_layer description: Enable the chaotic good framing layer. - expiry: 2026/02/01 + expiry: 2026/05/01 owner: ctiller@google.com test_tags: [core_end2end_test] allow_in_fuzzing_config: false @@ -200,17 +200,17 @@ test_tags: [] - name: multiping description: Allow more than one ping to be in flight at a time by default. - expiry: 2026/02/01 + expiry: 2026/05/01 owner: ctiller@google.com test_tags: [flow_control_test] - name: otel_export_telemetry_domains description: Export telemetry domains in OpenTelemetry metrics. - expiry: 2026/02/01 + expiry: 2026/05/01 owner: ctiller@google.com test_tags: [core_end2end_test] - name: pick_first_ignore_empty_updates description: Ignore empty resolutions in pick_first - expiry: 2026/02/02 + expiry: 2026/05/02 owner: ctiller@google.com - name: pick_first_ready_to_connecting description: @@ -262,7 +262,7 @@ allow_in_fuzzing_config: true - name: promise_based_inproc_transport description: Use promises for the in-process transport. - expiry: 2026/02/01 + expiry: 2026/05/01 owner: ctiller@google.com test_tags: [] allow_in_fuzzing_config: false # experiment currently crashes if enabled @@ -275,7 +275,7 @@ allow_in_fuzzing_config: true - name: retry_in_callv3 description: Support retries with call-v3 - expiry: 2026/02/01 + expiry: 2026/05/01 owner: ctiller@google.com test_tags: [core_end2end_test] - name: return_preexisting_errors @@ -378,6 +378,6 @@ test_tags: [] - name: unconstrained_max_quota_buffer_size description: Discard the cap on the max free pool size for one memory allocator - expiry: 2026/02/01 + expiry: 2026/05/01 owner: ctiller@google.com test_tags: [resource_quota_test] From 97c86829614bd547c948322ae4648a464527c122 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Mon, 2 Feb 2026 17:19:31 -0800 Subject: [PATCH 47/67] Internal change PiperOrigin-RevId: 864589994 --- BUILD | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BUILD b/BUILD index e1a12dd19f898..bbee4af2c448b 100644 --- a/BUILD +++ b/BUILD @@ -41,6 +41,8 @@ package( exports_files([ "LICENSE", "etc/roots.pem", + "copy.bara.sky", + "copybara.METADATA", ]) exports_files( From ed8d8d1d06e7411d30f7f0367da8cc27bf1f90de Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap Date: Mon, 2 Feb 2026 21:16:40 -0800 Subject: [PATCH 48/67] [PH2][CPPE2E] Partially enable grpclb_end2end_test PiperOrigin-RevId: 864671662 --- test/cpp/end2end/BUILD | 1 + test/cpp/end2end/grpclb_end2end_test.cc | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index cec94ab4e0c84..e4c9761f01a02 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -1004,6 +1004,7 @@ grpc_cc_test( shard_count = 20, tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", "cpp_lb_end2end_test", "no_windows", ], # TODO(jtattermusch): fix test on windows diff --git a/test/cpp/end2end/grpclb_end2end_test.cc b/test/cpp/end2end/grpclb_end2end_test.cc index eec212dac143a..a764c0dcb2fdd 100644 --- a/test/cpp/end2end/grpclb_end2end_test.cc +++ b/test/cpp/end2end/grpclb_end2end_test.cc @@ -933,6 +933,7 @@ TEST_F(GrpclbEnd2endTest, } TEST_F(GrpclbEnd2endTest, UsePickFirstChildPolicy) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const size_t kNumBackends = 2; const size_t kNumRpcs = kNumBackends * 2; CreateBackends(kNumBackends); @@ -970,6 +971,7 @@ TEST_F(GrpclbEnd2endTest, UsePickFirstChildPolicy) { } TEST_F(GrpclbEnd2endTest, SwapChildPolicy) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const size_t kNumBackends = 2; const size_t kNumRpcs = kNumBackends * 2; CreateBackends(kNumBackends); @@ -1032,6 +1034,7 @@ TEST_F(GrpclbEnd2endTest, SameBackendListedMultipleTimes) { } TEST_F(GrpclbEnd2endTest, InitiallyEmptyServerlist) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); CreateBackends(1); SetNextResolutionDefaultBalancer(); // First response is an empty serverlist. RPCs should fail. @@ -1294,6 +1297,7 @@ TEST_F(GrpclbEnd2endTest, ServiceNameFromLbPolicyConfig) { TEST_F(GrpclbEnd2endTest, NewBalancerAddressNotUsedIfOriginalStreamDoesNotFail) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); CreateBackends(3); // Default balancer sends backend 0. SendBalancerResponse(BuildResponseForBackends({backends_[0]->port()}, {})); @@ -1572,6 +1576,7 @@ TEST_F(GrpclbEnd2endTest, DropAll) { } TEST_F(GrpclbEnd2endTest, ClientLoadReporting) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const size_t kNumBackends = 3; CreateBackends(kNumBackends); balancer_->service().set_client_load_reporting_interval_seconds(3); @@ -1611,6 +1616,7 @@ TEST_F(GrpclbEnd2endTest, ClientLoadReporting) { } TEST_F(GrpclbEnd2endTest, LoadReportingWithBalancerRestart) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const size_t kNumBackends = 4; const size_t kNumBackendsFirstPass = 2; const size_t kNumBackendsSecondPass = kNumBackends - kNumBackendsFirstPass; @@ -1668,6 +1674,7 @@ TEST_F(GrpclbEnd2endTest, LoadReportingWithBalancerRestart) { } TEST_F(GrpclbEnd2endTest, LoadReportingWithDrops) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const size_t kNumBackends = 3; const size_t kNumRpcsPerAddress = 3; const int kNumDropRateLimiting = 2; From 2d8125dd55d15cc3bfc4e081622f3db77ac87cac Mon Sep 17 00:00:00 2001 From: Aananth V Date: Tue, 3 Feb 2026 01:51:05 -0800 Subject: [PATCH 49/67] Add new experiment to run CQ callbacks on Call EventEngine (#41537) Closes #41537 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41537 from AananthV:cq_experiment 62e04c76bedbf03e734b243a79615847ff122633 PiperOrigin-RevId: 864760567 --- bazel/experiments.bzl | 4 ++++ src/core/lib/experiments/experiments.cc | 24 +++++++++++++++++++++++ src/core/lib/experiments/experiments.h | 9 +++++++++ src/core/lib/experiments/experiments.yaml | 5 +++++ src/core/lib/experiments/rollouts.yaml | 2 ++ 5 files changed, 44 insertions(+) diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl index f277ca745494f..a08ea4497bb68 100644 --- a/bazel/experiments.bzl +++ b/bazel/experiments.bzl @@ -70,6 +70,7 @@ EXPERIMENT_ENABLES = { "track_zero_copy_allocations_in_resource_quota": "track_zero_copy_allocations_in_resource_quota", "tsi_frame_protector_without_locks": "tsi_frame_protector_without_locks", "unconstrained_max_quota_buffer_size": "unconstrained_max_quota_buffer_size", + "use_call_event_engine_in_completion_queue": "use_call_event_engine_in_completion_queue", } EXPERIMENT_POLLERS = [ @@ -107,6 +108,7 @@ EXPERIMENTS = { "secure_endpoint_offload_large_reads", "secure_endpoint_offload_large_writes", "subchannel_connection_scaling", + "use_call_event_engine_in_completion_queue", ], "cpp_end2end_test": [ "error_flatten", @@ -219,6 +221,7 @@ EXPERIMENTS = { "secure_endpoint_offload_large_reads", "secure_endpoint_offload_large_writes", "subchannel_connection_scaling", + "use_call_event_engine_in_completion_queue", ], "cpp_end2end_test": [ "error_flatten", @@ -331,6 +334,7 @@ EXPERIMENTS = { "secure_endpoint_offload_large_reads", "secure_endpoint_offload_large_writes", "subchannel_connection_scaling", + "use_call_event_engine_in_completion_queue", ], "cpp_end2end_test": [ "error_flatten", diff --git a/src/core/lib/experiments/experiments.cc b/src/core/lib/experiments/experiments.cc index 31daf043120f9..41c1b49ff4947 100644 --- a/src/core/lib/experiments/experiments.cc +++ b/src/core/lib/experiments/experiments.cc @@ -246,6 +246,10 @@ const char* const description_unconstrained_max_quota_buffer_size = "Discard the cap on the max free pool size for one memory allocator"; const char* const additional_constraints_unconstrained_max_quota_buffer_size = "{}"; +const char* const description_use_call_event_engine_in_completion_queue = + "Use the call event engine to run callbacks in completion queue."; +const char* const + additional_constraints_use_call_event_engine_in_completion_queue = "{}"; } // namespace namespace grpc_core { @@ -418,6 +422,10 @@ const ExperimentMetadata g_experiment_metadata[] = { description_unconstrained_max_quota_buffer_size, additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, false, true}, + {"use_call_event_engine_in_completion_queue", + description_use_call_event_engine_in_completion_queue, + additional_constraints_use_call_event_engine_in_completion_queue, nullptr, + 0, false, true}, }; } // namespace grpc_core @@ -647,6 +655,10 @@ const char* const description_unconstrained_max_quota_buffer_size = "Discard the cap on the max free pool size for one memory allocator"; const char* const additional_constraints_unconstrained_max_quota_buffer_size = "{}"; +const char* const description_use_call_event_engine_in_completion_queue = + "Use the call event engine to run callbacks in completion queue."; +const char* const + additional_constraints_use_call_event_engine_in_completion_queue = "{}"; } // namespace namespace grpc_core { @@ -819,6 +831,10 @@ const ExperimentMetadata g_experiment_metadata[] = { description_unconstrained_max_quota_buffer_size, additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, false, true}, + {"use_call_event_engine_in_completion_queue", + description_use_call_event_engine_in_completion_queue, + additional_constraints_use_call_event_engine_in_completion_queue, nullptr, + 0, false, true}, }; } // namespace grpc_core @@ -1048,6 +1064,10 @@ const char* const description_unconstrained_max_quota_buffer_size = "Discard the cap on the max free pool size for one memory allocator"; const char* const additional_constraints_unconstrained_max_quota_buffer_size = "{}"; +const char* const description_use_call_event_engine_in_completion_queue = + "Use the call event engine to run callbacks in completion queue."; +const char* const + additional_constraints_use_call_event_engine_in_completion_queue = "{}"; } // namespace namespace grpc_core { @@ -1220,6 +1240,10 @@ const ExperimentMetadata g_experiment_metadata[] = { description_unconstrained_max_quota_buffer_size, additional_constraints_unconstrained_max_quota_buffer_size, nullptr, 0, false, true}, + {"use_call_event_engine_in_completion_queue", + description_use_call_event_engine_in_completion_queue, + additional_constraints_use_call_event_engine_in_completion_queue, nullptr, + 0, false, true}, }; } // namespace grpc_core diff --git a/src/core/lib/experiments/experiments.h b/src/core/lib/experiments/experiments.h index c91ddd01a294f..d3fdc86624c52 100644 --- a/src/core/lib/experiments/experiments.h +++ b/src/core/lib/experiments/experiments.h @@ -131,6 +131,7 @@ inline bool IsTrackWritesInResourceQuotaEnabled() { return false; } inline bool IsTrackZeroCopyAllocationsInResourceQuotaEnabled() { return false; } inline bool IsTsiFrameProtectorWithoutLocksEnabled() { return false; } inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; } +inline bool IsUseCallEventEngineInCompletionQueueEnabled() { return false; } #elif defined(GPR_WINDOWS) inline bool IsBufferListDeletionPrepEnabled() { return false; } @@ -207,6 +208,7 @@ inline bool IsTrackWritesInResourceQuotaEnabled() { return false; } inline bool IsTrackZeroCopyAllocationsInResourceQuotaEnabled() { return false; } inline bool IsTsiFrameProtectorWithoutLocksEnabled() { return false; } inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; } +inline bool IsUseCallEventEngineInCompletionQueueEnabled() { return false; } #else inline bool IsBufferListDeletionPrepEnabled() { return false; } @@ -283,6 +285,7 @@ inline bool IsTrackWritesInResourceQuotaEnabled() { return false; } inline bool IsTrackZeroCopyAllocationsInResourceQuotaEnabled() { return false; } inline bool IsTsiFrameProtectorWithoutLocksEnabled() { return false; } inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; } +inline bool IsUseCallEventEngineInCompletionQueueEnabled() { return false; } #endif #else @@ -340,6 +343,7 @@ enum ExperimentIds { kExperimentIdTrackZeroCopyAllocationsInResourceQuota, kExperimentIdTsiFrameProtectorWithoutLocks, kExperimentIdUnconstrainedMaxQuotaBufferSize, + kExperimentIdUseCallEventEngineInCompletionQueue, kNumExperiments }; #define GRPC_EXPERIMENT_IS_INCLUDED_BUFFER_LIST_DELETION_PREP @@ -557,6 +561,11 @@ inline bool IsTsiFrameProtectorWithoutLocksEnabled() { inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return IsExperimentEnabled(); } +#define GRPC_EXPERIMENT_IS_INCLUDED_USE_CALL_EVENT_ENGINE_IN_COMPLETION_QUEUE +inline bool IsUseCallEventEngineInCompletionQueueEnabled() { + return IsExperimentEnabled< + kExperimentIdUseCallEventEngineInCompletionQueue>(); +} extern const ExperimentMetadata g_experiment_metadata[kNumExperiments]; diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index ac9a2f0194b9c..ac54771b83cc7 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -381,3 +381,8 @@ expiry: 2026/05/01 owner: ctiller@google.com test_tags: [resource_quota_test] +- name: use_call_event_engine_in_completion_queue + description: Use the call event engine to run callbacks in completion queue. + expiry: 2026/06/01 + owner: aananthv@google.com + test_tags: ["core_end2end_test"] diff --git a/src/core/lib/experiments/rollouts.yaml b/src/core/lib/experiments/rollouts.yaml index 8033973e781c0..45e913dcfc69a 100644 --- a/src/core/lib/experiments/rollouts.yaml +++ b/src/core/lib/experiments/rollouts.yaml @@ -116,3 +116,5 @@ default: false - name: unconstrained_max_quota_buffer_size default: false +- name: use_call_event_engine_in_completion_queue + default: false From ccf8f0988dba7af08b3abe9299bc2d22e982c4db Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Tue, 3 Feb 2026 05:10:54 -0800 Subject: [PATCH 50/67] [interop] Add grpc-java 1.76.1 and 1.77.0 to client_matrix.py (#41081) Closes #41081 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41081 from ejona86:java-1.77.0 05de3bf8e3ff49931eaefbcadb7d0a611312ff99 PiperOrigin-RevId: 864823869 --- tools/interop_matrix/client_matrix.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/interop_matrix/client_matrix.py b/tools/interop_matrix/client_matrix.py index ffc01ad33779f..d3a5ebe23cbef 100644 --- a/tools/interop_matrix/client_matrix.py +++ b/tools/interop_matrix/client_matrix.py @@ -480,7 +480,8 @@ def __init__(self, patch=[], runtimes=[], testcases_file=None): ("v1.73.0", ReleaseInfo()), ("v1.74.0", ReleaseInfo()), ("v1.75.0", ReleaseInfo()), - ("v1.76.0", ReleaseInfo()), + ("v1.76.1", ReleaseInfo()), + ("v1.77.0", ReleaseInfo()), ] ), "python": OrderedDict( From 6432abbe46ef2436dd8d5c3f68036bb021a23bd4 Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap Date: Tue, 3 Feb 2026 05:47:16 -0800 Subject: [PATCH 51/67] [PH2][CPPE2E] Partially enable client_lb_end2end_test PiperOrigin-RevId: 864834539 --- test/cpp/end2end/BUILD | 1 + test/cpp/end2end/client_lb_end2end_test.cc | 25 ++++++++++++++++++++++ test/cpp/end2end/end2end_test_utils.h | 6 ++++++ 3 files changed, 32 insertions(+) diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index e4c9761f01a02..be3a417b3b74b 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -824,6 +824,7 @@ grpc_cc_test( flaky = True, # TODO(b/151315347) tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", "cpp_lb_end2end_test", # b/117575949. "grpc:no-internal-poller", diff --git a/test/cpp/end2end/client_lb_end2end_test.cc b/test/cpp/end2end/client_lb_end2end_test.cc index 8e376d97747f3..0d4b731fd56fe 100644 --- a/test/cpp/end2end/client_lb_end2end_test.cc +++ b/test/cpp/end2end/client_lb_end2end_test.cc @@ -1605,6 +1605,7 @@ TEST_F(RoundRobinTest, ProcessPending) { } TEST_F(RoundRobinTest, Updates) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); // Start servers. const int kNumServers = 3; StartServers(kNumServers); @@ -1934,6 +1935,7 @@ TEST_F(RoundRobinTest, ReportsLatestStatusInTransientFailure) { } TEST_F(RoundRobinTest, DoesNotFailRpcsUponDisconnection) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); // Start connection injector. ConnectionAttemptInjector injector; // Start server. @@ -1993,6 +1995,7 @@ TEST_F(RoundRobinTest, DoesNotFailRpcsUponDisconnection) { } TEST_F(RoundRobinTest, SingleReconnect) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug (flake)"); const int kNumServers = 3; StartServers(kNumServers); const auto ports = GetServersPorts(); @@ -2048,6 +2051,7 @@ TEST_F(RoundRobinTest, SingleReconnect) { // If health checking is required by client but health checking service // is not running on the server, the channel should be treated as healthy. TEST_F(RoundRobinTest, ServersHealthCheckingUnimplementedTreatedAsHealthy) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); StartServers(1); // Single server ChannelArguments args; args.SetServiceConfigJSON( @@ -2062,6 +2066,7 @@ TEST_F(RoundRobinTest, ServersHealthCheckingUnimplementedTreatedAsHealthy) { } TEST_F(RoundRobinTest, HealthChecking) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); EnableDefaultHealthCheckService(true); // Start servers. const int kNumServers = 3; @@ -2149,6 +2154,7 @@ TEST_F(RoundRobinTest, HealthChecking) { } TEST_F(RoundRobinTest, HealthCheckingHandlesSubchannelFailure) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); EnableDefaultHealthCheckService(true); // Start servers. const int kNumServers = 3; @@ -2176,6 +2182,7 @@ TEST_F(RoundRobinTest, HealthCheckingHandlesSubchannelFailure) { } TEST_F(RoundRobinTest, WithHealthCheckingInhibitPerChannel) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); EnableDefaultHealthCheckService(true); // Start server. const int kNumServers = 1; @@ -2222,6 +2229,7 @@ TEST_F(RoundRobinTest, WithHealthCheckingInhibitPerChannel) { } TEST_F(RoundRobinTest, HealthCheckingServiceNamePerChannel) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); EnableDefaultHealthCheckService(true); // Start server. const int kNumServers = 1; @@ -2275,6 +2283,7 @@ TEST_F(RoundRobinTest, HealthCheckingServiceNamePerChannel) { TEST_F(RoundRobinTest, HealthCheckingServiceNameChangesAfterSubchannelsCreated) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); EnableDefaultHealthCheckService(true); // Start server. const int kNumServers = 1; @@ -2302,6 +2311,7 @@ TEST_F(RoundRobinTest, } TEST_F(RoundRobinTest, HealthCheckingRetryOnStreamEnd) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); // Start servers. const int kNumServers = 2; CreateServers(kNumServers); @@ -2613,6 +2623,7 @@ ClientLbInterceptTrailingMetadataTest* ClientLbInterceptTrailingMetadataTest::current_test_instance_ = nullptr; TEST_F(ClientLbInterceptTrailingMetadataTest, StatusOk) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); StartServers(1); FakeResolverResponseGeneratorWrapper response_generator; auto channel = @@ -2629,6 +2640,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, StatusOk) { } TEST_F(ClientLbInterceptTrailingMetadataTest, StatusFailed) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); StartServers(1); FakeResolverResponseGeneratorWrapper response_generator; auto channel = @@ -2650,6 +2662,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, StatusFailed) { TEST_F(ClientLbInterceptTrailingMetadataTest, StatusCancelledWithoutStartingRecvTrailingMetadata) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); StartServers(1); FakeResolverResponseGeneratorWrapper response_generator; auto channel = @@ -2673,6 +2686,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, } TEST_F(ClientLbInterceptTrailingMetadataTest, InterceptsRetriesDisabled) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const int kNumServers = 1; const int kNumRpcs = 10; StartServers(kNumServers); @@ -2701,6 +2715,8 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, InterceptsRetriesDisabled) { } TEST_F(ClientLbInterceptTrailingMetadataTest, InterceptsRetriesEnabled) { + SKIP_RETRY_TEST_FOR_PH2( + "TODO (tjagtap) [PH2][P5][Retry] Test with Retry-PH2 feature"); const int kNumServers = 1; const int kNumRpcs = 10; StartServers(kNumServers); @@ -2743,6 +2759,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, InterceptsRetriesEnabled) { } TEST_F(ClientLbInterceptTrailingMetadataTest, Valid) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); RunPerRpcMetricReportingTest(OrcaLoadReportBuilder() .SetApplicationUtilization(0.25) .SetCpuUtilization(0.5) @@ -2772,6 +2789,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, Valid) { } TEST_F(ClientLbInterceptTrailingMetadataTest, NegativeValues) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); RunPerRpcMetricReportingTest(OrcaLoadReportBuilder() .SetApplicationUtilization(-0.3) .SetCpuUtilization(-0.1) @@ -2789,6 +2807,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, NegativeValues) { } TEST_F(ClientLbInterceptTrailingMetadataTest, AboveOneUtilization) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); RunPerRpcMetricReportingTest(OrcaLoadReportBuilder() .SetApplicationUtilization(1.9) .SetCpuUtilization(1.1) @@ -2806,6 +2825,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, AboveOneUtilization) { } TEST_F(ClientLbInterceptTrailingMetadataTest, BackendMetricDataMerge) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const int kNumServers = 1; const int kNumRpcs = 10; StartServers(kNumServers); @@ -3029,6 +3049,7 @@ class OobBackendMetricTest : public ClientLbEnd2endTest { OobBackendMetricTest* OobBackendMetricTest::current_test_instance_ = nullptr; TEST_F(OobBackendMetricTest, Basic) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); StartServers(1); // Set initial backend metric data on server. constexpr char kMetricName[] = "foo"; @@ -3274,6 +3295,7 @@ class WeightedRoundRobinTest : public ClientLbEnd2endTest { }; TEST_F(WeightedRoundRobinTest, CallAndServerMetric) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const int kNumServers = 3; StartServers(kNumServers); // Report server metrics that should give 6:4:3 WRR picks. @@ -3318,6 +3340,7 @@ TEST_F(WeightedRoundRobinTest, CallAndServerMetric) { // all of its subchannels every time it saw an update, thus causing the // WRR policy to re-enter the blackout period for that address. TEST_F(WeightedRoundRobinTest, WithOutlierDetection) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const int kBlackoutPeriodSeconds = 10; const int kNumServers = 3; StartServers(kNumServers); @@ -3382,6 +3405,7 @@ INSTANTIATE_TEST_SUITE_P(WeightedRoundRobin, WeightedRoundRobinParamTest, kServiceConfigOob)); TEST_P(WeightedRoundRobinParamTest, Basic) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const int kNumServers = 3; StartServers(kNumServers); // Report server metrics that should give 1:2:4 WRR picks. @@ -3485,6 +3509,7 @@ class ConnectionScalingTest : public ClientLbEnd2endTest { // ResourceQuota changes land) TEST_F(ConnectionScalingTest, SingleConnection) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); const int kMaxConcurrentStreams = 3; // Start a server with MAX_CONCURRENT_STREAMS set. StartServers(1, {}, nullptr, diff --git a/test/cpp/end2end/end2end_test_utils.h b/test/cpp/end2end/end2end_test_utils.h index 121f7df8b8402..2ddb1bcb17320 100644 --- a/test/cpp/end2end/end2end_test_utils.h +++ b/test/cpp/end2end/end2end_test_utils.h @@ -71,6 +71,12 @@ inline void ApplyCommonChannelArguments(ChannelArguments& args) { if (grpc_core::IsPromiseBasedHttp2ClientTransportEnabled()) \ GTEST_SKIP() << (message); +// Retry for PH2 will be implemented separately, after the PH2 Client and Server +// rollout starts. +#define SKIP_RETRY_TEST_FOR_PH2(message) \ + if (grpc_core::IsPromiseBasedHttp2ClientTransportEnabled()) \ + GTEST_SKIP() << (message); + } // namespace testing } // namespace grpc From 288e355a33dfadf40284f4b61540636c0863646f Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap Date: Tue, 3 Feb 2026 05:57:13 -0800 Subject: [PATCH 52/67] [PH2][CPPE2E] Enable server_load_reporting_end2end_test PiperOrigin-RevId: 864836877 --- test/cpp/end2end/BUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index be3a417b3b74b..f8cdb48cd0f7d 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -1200,6 +1200,7 @@ grpc_cc_test( ], tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", # TODO(b/264692543): Re-enable after fixing "grpc:broken-internally", "no_test_ios", From 11af2c2cec3b4afede7552c84a4d18afb16daf06 Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap Date: Tue, 3 Feb 2026 06:52:25 -0800 Subject: [PATCH 53/67] [PH2][CPPE2E] Partially enable orca_service_end2end_test PiperOrigin-RevId: 864856597 --- test/cpp/end2end/BUILD | 1 + test/cpp/end2end/orca_service_end2end_test.cc | 1 + 2 files changed, 2 insertions(+) diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index f8cdb48cd0f7d..19b1db895b7c9 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -1554,6 +1554,7 @@ grpc_cc_test( ], tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", ], deps = [ ":end2end_test_utils", diff --git a/test/cpp/end2end/orca_service_end2end_test.cc b/test/cpp/end2end/orca_service_end2end_test.cc index 8a8ad8bd4bcfa..328505404481c 100644 --- a/test/cpp/end2end/orca_service_end2end_test.cc +++ b/test/cpp/end2end/orca_service_end2end_test.cc @@ -157,6 +157,7 @@ class OrcaServiceEnd2endTest : public ::testing::Test { }; TEST_F(OrcaServiceEnd2endTest, Basic) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug (Timeout)"); constexpr char kMetricName1[] = "foo"; constexpr char kMetricName2[] = "bar"; constexpr char kMetricName3[] = "baz"; From 2a8947f3e1d28bdc42b18ba638a43138e0f53ebd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 21:59:13 +0530 Subject: [PATCH 54/67] Bump the github-actions group with 3 updates (#41522) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the github-actions group with 3 updates: [actions/cache](https://github.com/actions/cache), [styfle/cancel-workflow-action](https://github.com/styfle/cancel-workflow-action) and [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request). Updates `actions/cache` from 5.0.1 to 5.0.3
Release notes

Sourced from actions/cache's releases.

v5.0.3

What's Changed

Full Changelog: https://github.com/actions/cache/compare/v5...v5.0.3

v.5.0.2

v5.0.2

What's Changed

When creating cache entries, 429s returned from the cache service will not be retried.

Changelog

Sourced from actions/cache's changelog.

Releases

How to prepare a release

[!NOTE]
Relevant for maintainers with write access only.

  1. Switch to a new branch from main.
  2. Run npm test to ensure all tests are passing.
  3. Update the version in https://github.com/actions/cache/blob/main/package.json.
  4. Run npm run build to update the compiled files.
  5. Update this https://github.com/actions/cache/blob/main/RELEASES.md with the new version and changes in the ## Changelog section.
  6. Run licensed cache to update the license report.
  7. Run licensed status and resolve any warnings by updating the https://github.com/actions/cache/blob/main/.licensed.yml file with the exceptions.
  8. Commit your changes and push your branch upstream.
  9. Open a pull request against main and get it reviewed and merged.
  10. Draft a new release https://github.com/actions/cache/releases use the same version number used in package.json
    1. Create a new tag with the version number.
    2. Auto generate release notes and update them to match the changes you made in RELEASES.md.
    3. Toggle the set as the latest release option.
    4. Publish the release.
  11. Navigate to https://github.com/actions/cache/actions/workflows/release-new-action-version.yml
    1. There should be a workflow run queued with the same version number.
    2. Approve the run to publish the new version and update the major tags for this action.

Changelog

5.0.3

5.0.2

  • Bump @actions/cache to v5.0.3 #1692

5.0.1

  • Update @azure/storage-blob to ^12.29.1 via @actions/cache@5.0.1 #1685

5.0.0

[!IMPORTANT] actions/cache@v5 runs on the Node.js 24 runtime and requires a minimum Actions Runner version of 2.327.1. If you are using self-hosted runners, ensure they are updated before upgrading.

4.3.0

  • Bump @actions/cache to v4.1.0

... (truncated)

Commits

Updates `styfle/cancel-workflow-action` from 0.12.1 to 0.13.0
Release notes

Sourced from styfle/cancel-workflow-action's releases.

0.13.0

Minor changes

Credits

Huge thanks to @​epicgames-mokeeffe for helping!

Commits

Updates `peter-evans/create-pull-request` from 8.0.0 to 8.1.0
Release notes

Sourced from peter-evans/create-pull-request's releases.

Create Pull Request v8.1.0

What's Changed

New Contributors

Full Changelog: https://github.com/peter-evans/create-pull-request/compare/v8.0.0...v8.1.0

Commits
  • c0f553f feat: add @​octokit/plugin-retry to handle retriable server errors (#4298)
  • 7000124 fix: Handle remote prune failures gracefully (#4295)
  • 34aa40e build: update distribution (#4289)
  • 641099d build(deps-dev): bump undici from 6.22.0 to 6.23.0 (#4284)
  • 2271f1d build(deps-dev): bump the npm group with 2 updates (#4274)
  • 437c31a build(deps): bump the github-actions group with 2 updates (#4273)
  • 0979079 docs: update readme
  • 5b751cd README.md: bump given GitHub actions to their latest versions (#4265)
  • See full diff in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/pr-auto-fix.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-auto-fix.yaml b/.github/workflows/pr-auto-fix.yaml index 051f97d24407b..423d4354eaf32 100644 --- a/.github/workflows/pr-auto-fix.yaml +++ b/.github/workflows/pr-auto-fix.yaml @@ -22,7 +22,7 @@ jobs: with: format: YYYYWWd - name: Cache bazel - uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 env: cache-name: bazel-cache with: @@ -38,7 +38,7 @@ jobs: # Cancel current runs if they're still running # (saves processing on fast pushes) - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 + uses: styfle/cancel-workflow-action@3155a141048f8f89c06b4cdae32e7853e97536bc # 0.13.0 with: access_token: ${{ github.token }} # Allow opt-out for some users @@ -89,7 +89,7 @@ jobs: run: ANDROID_NDK_HOME= ${{ github.workspace }}/tools/distrib/sanitize.sh # Report back with a PR if things are broken - name: Create Pull Request - uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0 + uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0 with: delete-branch: true branch-suffix: short-commit-hash From df68c75f4a47087dea167d18d2ccd79329bee27e Mon Sep 17 00:00:00 2001 From: FidelSch Date: Tue, 3 Feb 2026 08:40:34 -0800 Subject: [PATCH 55/67] Fixed formatting of Commit Access criteria in CONTRIBUTING.md (#40916) Reformat criteria for Commit Access and related responsibilities into a bulleted list for better readability. I suspect this was the original intended format Closes #40916 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/40916 from FidelSch:patch-1 30c8260597f765d6aced614501e679c633c75843 PiperOrigin-RevId: 864895989 --- CONTRIBUTING.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5cca44f708ac5..43efe784c3ea5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -124,15 +124,14 @@ How to get your contributions merged smoothly and quickly. ## Obtaining Commit Access -We grant Commit Access to contributors based on the following criteria: * -Sustained contribution to the gRPC project. * Deep understanding of the areas -contributed to, and good consideration of various reliability, usability and -performance tradeoffs. * Contributions demonstrate that obtaining Commit Access -will significantly reduce friction for the contributors or others. - -In addition to submitting PRs, a Contributor with Commit Access can: * Review -PRs and merge once other checks and criteria pass. * Triage bugs and PRs and -assign appropriate labels and reviewers. +We grant Commit Access to contributors based on the following criteria: +- Sustained contribution to the gRPC project. +- Deep understanding of the areas contributed to, and good consideration of various reliability, usability and performance tradeoffs. +- Contributions demonstrate that obtaining Commit Access will significantly reduce friction for the contributors or others. + +In addition to submitting PRs, a Contributor with Commit Access can: +- Review PRs and merge once other checks and criteria pass. +- Triage bugs and PRs and assign appropriate labels and reviewers. ### Obtaining Commit Access without Code Contributions From ffef4dc3e999e87d5afc58b3dee83fc0868a6d9d Mon Sep 17 00:00:00 2001 From: Alexandre Detiste Date: Tue, 3 Feb 2026 17:12:13 +0000 Subject: [PATCH 56/67] remove Python2 support (#37589) lang: Python Closes #37589 PiperOrigin-RevId: 864907267 --- examples/python/cancellation/client.py | 4 ---- examples/python/cancellation/search.py | 4 ---- examples/python/cancellation/server.py | 4 ---- examples/python/compression/client.py | 4 ---- examples/python/compression/server.py | 4 ---- examples/python/debug/debug_server.py | 4 ---- examples/python/debug/get_stats.py | 4 ---- examples/python/debug/send_message.py | 4 ---- examples/python/errors/client.py | 2 -- examples/python/helloworld/greeter_client.py | 2 -- .../python/helloworld/greeter_client_with_options.py | 2 -- .../interceptors/default_value/greeter_client.py | 2 -- .../python/interceptors/headers/greeter_client.py | 2 -- examples/python/metadata/metadata_client.py | 2 -- examples/python/metadata/metadata_server.py | 2 -- examples/python/no_codegen/greeter_client.py | 2 -- examples/python/xds/client.py | 2 -- src/python/grpcio_tests/tests/admin/admin_test.py | 4 ---- .../tests/channelz/_channelz_servicer_test.py | 4 ---- src/python/grpcio_tests/tests/csds/csds_test.py | 7 ------- .../tests/health_check/_health_servicer_test.py | 12 +----------- .../tests/interop/_insecure_intraop_test.py | 4 ---- .../tests/interop/_secure_intraop_test.py | 4 ---- .../tests/reflection/_reflection_servicer_test.py | 4 ---- .../grpcio_tests/tests/status/_grpc_status_test.py | 4 ---- tools/run_tests/python_utils/watch_dirs.py | 2 +- 26 files changed, 2 insertions(+), 93 deletions(-) diff --git a/examples/python/cancellation/client.py b/examples/python/cancellation/client.py index ce9b94b55c17b..00cb1b0199110 100644 --- a/examples/python/cancellation/client.py +++ b/examples/python/cancellation/client.py @@ -13,10 +13,6 @@ # limitations under the License. """An example of cancelling requests in gRPC.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - import argparse import logging import signal diff --git a/examples/python/cancellation/search.py b/examples/python/cancellation/search.py index 3ceb9fefbc85e..bfdd77bd1129f 100644 --- a/examples/python/cancellation/search.py +++ b/examples/python/cancellation/search.py @@ -13,10 +13,6 @@ # limitations under the License. """A search algorithm over the space of all bytestrings.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - import base64 import hashlib import itertools diff --git a/examples/python/cancellation/server.py b/examples/python/cancellation/server.py index d2db0b24227d8..e72fc9886b492 100644 --- a/examples/python/cancellation/server.py +++ b/examples/python/cancellation/server.py @@ -13,10 +13,6 @@ # limitations under the License. """An example of cancelling requests in gRPC.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - import argparse from concurrent import futures import logging diff --git a/examples/python/compression/client.py b/examples/python/compression/client.py index 166739f7e10f5..738af74efd19b 100644 --- a/examples/python/compression/client.py +++ b/examples/python/compression/client.py @@ -13,10 +13,6 @@ # limitations under the License. """An example of compression on the client side with gRPC.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - import argparse import logging diff --git a/examples/python/compression/server.py b/examples/python/compression/server.py index 2661481475b07..2f720d1fd5863 100644 --- a/examples/python/compression/server.py +++ b/examples/python/compression/server.py @@ -13,10 +13,6 @@ # limitations under the License. """An example of compression on the server side with gRPC.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - import argparse from concurrent import futures import logging diff --git a/examples/python/debug/debug_server.py b/examples/python/debug/debug_server.py index 0fd31e303a1f1..f3b746108b390 100644 --- a/examples/python/debug/debug_server.py +++ b/examples/python/debug/debug_server.py @@ -13,10 +13,6 @@ # limitations under the License. """The Python example of utilizing Channelz feature.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - import argparse from concurrent import futures import logging diff --git a/examples/python/debug/get_stats.py b/examples/python/debug/get_stats.py index ce2ac7db110ca..31fef67d2dc67 100644 --- a/examples/python/debug/get_stats.py +++ b/examples/python/debug/get_stats.py @@ -13,10 +13,6 @@ # limitations under the License. """Poll statistics from the server.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - import argparse import logging diff --git a/examples/python/debug/send_message.py b/examples/python/debug/send_message.py index 056c1b8d6fb41..2a0e6db525b51 100644 --- a/examples/python/debug/send_message.py +++ b/examples/python/debug/send_message.py @@ -13,10 +13,6 @@ # limitations under the License. """Send multiple greeting messages to the backend.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - import argparse import logging diff --git a/examples/python/errors/client.py b/examples/python/errors/client.py index 94c5a5ba731c5..ad750d3391289 100644 --- a/examples/python/errors/client.py +++ b/examples/python/errors/client.py @@ -13,8 +13,6 @@ # limitations under the License. """This example handles rich error status in client-side.""" -from __future__ import print_function - import logging from google.rpc import error_details_pb2 diff --git a/examples/python/helloworld/greeter_client.py b/examples/python/helloworld/greeter_client.py index 33fc52be36103..6283fc699d0c9 100644 --- a/examples/python/helloworld/greeter_client.py +++ b/examples/python/helloworld/greeter_client.py @@ -13,8 +13,6 @@ # limitations under the License. """The Python implementation of the GRPC helloworld.Greeter client.""" -from __future__ import print_function - import logging import grpc diff --git a/examples/python/helloworld/greeter_client_with_options.py b/examples/python/helloworld/greeter_client_with_options.py index c40fea9d2b2b5..f58f3e99fa16b 100644 --- a/examples/python/helloworld/greeter_client_with_options.py +++ b/examples/python/helloworld/greeter_client_with_options.py @@ -13,8 +13,6 @@ # limitations under the License. """gRPC Python helloworld.Greeter client with channel options and call timeout parameters.""" -from __future__ import print_function - import logging import grpc diff --git a/examples/python/interceptors/default_value/greeter_client.py b/examples/python/interceptors/default_value/greeter_client.py index d3fc5baf0edad..90dc54a4147ed 100644 --- a/examples/python/interceptors/default_value/greeter_client.py +++ b/examples/python/interceptors/default_value/greeter_client.py @@ -13,8 +13,6 @@ # limitations under the License. """The Python implementation of the gRPC helloworld.Greeter client.""" -from __future__ import print_function - import logging import default_value_client_interceptor diff --git a/examples/python/interceptors/headers/greeter_client.py b/examples/python/interceptors/headers/greeter_client.py index 351e3dcb092f3..7193369696644 100644 --- a/examples/python/interceptors/headers/greeter_client.py +++ b/examples/python/interceptors/headers/greeter_client.py @@ -13,8 +13,6 @@ # limitations under the License. """The Python implementation of the GRPC helloworld.Greeter client.""" -from __future__ import print_function - import logging import grpc diff --git a/examples/python/metadata/metadata_client.py b/examples/python/metadata/metadata_client.py index d1f01cce6f087..432ffea84e423 100644 --- a/examples/python/metadata/metadata_client.py +++ b/examples/python/metadata/metadata_client.py @@ -13,8 +13,6 @@ # limitations under the License. """Example gRPC client that gets/sets metadata (HTTP2 headers)""" -from __future__ import print_function - import logging import grpc diff --git a/examples/python/metadata/metadata_server.py b/examples/python/metadata/metadata_server.py index 8340ff632b402..7f03c0b5827e1 100644 --- a/examples/python/metadata/metadata_server.py +++ b/examples/python/metadata/metadata_server.py @@ -13,8 +13,6 @@ # limitations under the License. """Example gRPC server that gets/sets metadata (HTTP2 headers)""" -from __future__ import print_function - from concurrent import futures import logging diff --git a/examples/python/no_codegen/greeter_client.py b/examples/python/no_codegen/greeter_client.py index 47f1bca7358f0..3fe83dc7fc9ef 100644 --- a/examples/python/no_codegen/greeter_client.py +++ b/examples/python/no_codegen/greeter_client.py @@ -19,8 +19,6 @@ Several APIs used in this example are in an experimental state. """ -from __future__ import print_function - import logging import grpc diff --git a/examples/python/xds/client.py b/examples/python/xds/client.py index 4a56573eeee47..b029f1d6f43ca 100644 --- a/examples/python/xds/client.py +++ b/examples/python/xds/client.py @@ -13,8 +13,6 @@ # limitations under the License. """The Python implementation of the GRPC helloworld.Greeter client.""" -from __future__ import print_function - import argparse import logging diff --git a/src/python/grpcio_tests/tests/admin/admin_test.py b/src/python/grpcio_tests/tests/admin/admin_test.py index 9ca46dd8831fa..b011cd072ffc5 100644 --- a/src/python/grpcio_tests/tests/admin/admin_test.py +++ b/src/python/grpcio_tests/tests/admin/admin_test.py @@ -15,7 +15,6 @@ from concurrent.futures import ThreadPoolExecutor import logging -import sys import unittest import grpc @@ -26,9 +25,6 @@ from grpc_csds import csds_pb2_grpc -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class TestAdmin(unittest.TestCase): def setUp(self): self._server = grpc.server(ThreadPoolExecutor()) diff --git a/src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py b/src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py index 761dc99b214e1..6d3ba7d2ed226 100644 --- a/src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py +++ b/src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py @@ -14,7 +14,6 @@ """Tests of grpc_channelz.v1.channelz.""" from concurrent import futures -import sys import unittest import grpc @@ -92,9 +91,6 @@ def _close_channel_server_pairs(pairs): pair.channel.close() -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class ChannelzServicerTest(unittest.TestCase): def _send_successful_unary_unary(self, idx): _, r = ( diff --git a/src/python/grpcio_tests/tests/csds/csds_test.py b/src/python/grpcio_tests/tests/csds/csds_test.py index 5a882b2d67928..906b9b9abac4d 100644 --- a/src/python/grpcio_tests/tests/csds/csds_test.py +++ b/src/python/grpcio_tests/tests/csds/csds_test.py @@ -17,7 +17,6 @@ import logging import os import queue -import sys import time import unittest @@ -57,9 +56,6 @@ """ -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class TestCsds(unittest.TestCase): def setUp(self): os.environ["GRPC_XDS_BOOTSTRAP_CONFIG"] = _DUMMY_BOOTSTRAP_FILE @@ -127,9 +123,6 @@ def test_no_lds_found(self): dummy_channel.close() -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class TestCsdsStream(TestCsds): def get_xds_config_dump(self): if not hasattr(self, "request_queue"): diff --git a/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py b/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py index 31580892e8163..867fd286da75d 100644 --- a/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py +++ b/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py @@ -15,7 +15,6 @@ import logging import queue -import sys import threading import time import unittest @@ -40,10 +39,7 @@ def _consume_responses(response_iterator, response_queue): response_queue.put(response) -class BaseWatchTests(object): - @unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" - ) +class BaseWatchTests: class WatchTests(unittest.TestCase): def start_server(self, non_blocking=False, thread_pool=None): self._thread_pool = thread_pool @@ -266,9 +262,6 @@ def test_graceful_shutdown(self): self.assertTrue(response_queue.empty()) -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class HealthServicerTest(BaseWatchTests.WatchTests): def setUp(self): self._thread_pool = thread_pool.RecordingThreadPool(max_workers=None) @@ -309,9 +302,6 @@ def test_health_service_name(self): self.assertEqual(health.SERVICE_NAME, "grpc.health.v1.Health") -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class HealthServicerBackwardsCompatibleWatchTest(BaseWatchTests.WatchTests): def setUp(self): super(HealthServicerBackwardsCompatibleWatchTest, self).start_server( diff --git a/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py b/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py index bb8ada4c58fee..16f7bdfe110aa 100644 --- a/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py +++ b/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py @@ -13,7 +13,6 @@ # limitations under the License. """Insecure client-server interoperability as a unit test.""" -import sys import unittest import grpc @@ -25,9 +24,6 @@ from tests.unit import test_common -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class InsecureIntraopTest( _intraop_test_case.IntraopTestCase, unittest.TestCase ): diff --git a/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py b/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py index 3572dabbc121d..c2272776315aa 100644 --- a/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py +++ b/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py @@ -13,7 +13,6 @@ # limitations under the License. """Secure client-server interoperability as a unit test.""" -import sys import unittest import grpc @@ -27,9 +26,6 @@ _SERVER_HOST_OVERRIDE = "foo.test.google.fr" -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class SecureIntraopTest(_intraop_test_case.IntraopTestCase, unittest.TestCase): def setUp(self): self.server = test_common.test_server() diff --git a/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py index 810b56f20fba1..4f6e051907bcc 100644 --- a/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py +++ b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py @@ -13,7 +13,6 @@ # limitations under the License. """Tests of grpc_reflection.v1alpha.reflection.""" -import sys import unittest from google.protobuf import descriptor_pb2 @@ -55,9 +54,6 @@ def _file_descriptor_to_proto(descriptor): return proto.SerializeToString() -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class ReflectionServicerTest(unittest.TestCase): def setUp(self): self._server = test_common.test_server() diff --git a/src/python/grpcio_tests/tests/status/_grpc_status_test.py b/src/python/grpcio_tests/tests/status/_grpc_status_test.py index 27c2e23a160cb..0340ac9b121f3 100644 --- a/src/python/grpcio_tests/tests/status/_grpc_status_test.py +++ b/src/python/grpcio_tests/tests/status/_grpc_status_test.py @@ -29,7 +29,6 @@ import logging import traceback -import sys import grpc from grpc_status import rpc_status @@ -121,9 +120,6 @@ def service(self, handler_call_details): return None -@unittest.skipIf( - sys.version_info[0] < 3, "ProtoBuf descriptor has moved on from Python2" -) class StatusTest(unittest.TestCase): def setUp(self): self._server = test_common.test_server() diff --git a/tools/run_tests/python_utils/watch_dirs.py b/tools/run_tests/python_utils/watch_dirs.py index 7d1a3be43d38d..28609053d8c68 100755 --- a/tools/run_tests/python_utils/watch_dirs.py +++ b/tools/run_tests/python_utils/watch_dirs.py @@ -17,7 +17,7 @@ import time -class DirWatcher(object): +class DirWatcher: """Helper to watch a (set) of directories for modifications.""" def __init__(self, paths): From 0db32135b27c2fc9329ed2d2dba3cb96acb973d4 Mon Sep 17 00:00:00 2001 From: Ashesh Vidyut Date: Tue, 3 Feb 2026 17:22:01 +0000 Subject: [PATCH 57/67] [Python] Fixes issue #31706 - Removes pytype: disable=pyi-error (#41480) ### Description Fixes issue #31706, removes `pytype: disable=pyi-error` ### Testing CI Closes #41480 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41480 from asheshvidyut:fix/issue/31706 85a70c7fe97d899ad01d18ada44e27c20bf9cabb PiperOrigin-RevId: 864910687 --- src/python/grpcio/grpc/_channel.py | 12 ++++++------ src/python/grpcio/grpc/_server.py | 12 ++++++------ src/python/grpcio/grpc/_utilities.py | 4 ++-- .../_csm_observability_plugin.py | 2 -- .../grpc_observability/_open_census_exporter.py | 2 +- .../_open_telemetry_observability.py | 2 -- .../grpc_observability/_open_telemetry_plugin.py | 1 - 7 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/python/grpcio/grpc/_channel.py b/src/python/grpcio/grpc/_channel.py index 0e65270a71d9f..3f6daf6a68f05 100644 --- a/src/python/grpcio/grpc/_channel.py +++ b/src/python/grpcio/grpc/_channel.py @@ -34,11 +34,11 @@ Union, ) -import grpc # pytype: disable=pyi-error -from grpc import _common # pytype: disable=pyi-error -from grpc import _compression # pytype: disable=pyi-error -from grpc import _grpcio_metadata # pytype: disable=pyi-error -from grpc import _observability # pytype: disable=pyi-error +import grpc +from grpc import _common +from grpc import _compression +from grpc import _grpcio_metadata +from grpc import _observability from grpc._cython import cygrpc from grpc._typing import ChannelArgumentType from grpc._typing import DeserializingFunction @@ -48,7 +48,7 @@ from grpc._typing import ResponseType from grpc._typing import SerializingFunction from grpc._typing import UserTag -import grpc.experimental # pytype: disable=pyi-error +import grpc.experimental _LOGGER = logging.getLogger(__name__) diff --git a/src/python/grpcio/grpc/_server.py b/src/python/grpcio/grpc/_server.py index eef084b4d68b8..715514dba5723 100644 --- a/src/python/grpcio/grpc/_server.py +++ b/src/python/grpcio/grpc/_server.py @@ -39,11 +39,11 @@ Union, ) -import grpc # pytype: disable=pyi-error -from grpc import _common # pytype: disable=pyi-error -from grpc import _compression # pytype: disable=pyi-error -from grpc import _interceptor # pytype: disable=pyi-error -from grpc import _observability # pytype: disable=pyi-error +import grpc +from grpc import _common +from grpc import _compression +from grpc import _interceptor +from grpc import _observability from grpc._cython import cygrpc from grpc._typing import ArityAgnosticMethodHandler from grpc._typing import ChannelArgumentType @@ -593,7 +593,7 @@ def _call_behavior( request_deserializer: Optional[DeserializingFunction], send_response_callback: Optional[Callable[[ResponseType], None]] = None, ) -> Tuple[Union[ResponseType, Iterator[ResponseType]], bool]: - from grpc import _create_servicer_context # pytype: disable=pyi-error + from grpc import _create_servicer_context with _create_servicer_context( rpc_event, state, request_deserializer diff --git a/src/python/grpcio/grpc/_utilities.py b/src/python/grpcio/grpc/_utilities.py index 5551f7da572e1..908880a7fc6f7 100644 --- a/src/python/grpcio/grpc/_utilities.py +++ b/src/python/grpcio/grpc/_utilities.py @@ -19,8 +19,8 @@ import time from typing import Callable, Dict, Optional, Sequence -import grpc # pytype: disable=pyi-error -from grpc import _common # pytype: disable=pyi-error +import grpc +from grpc import _common from grpc._typing import DoneCallbackType _LOGGER = logging.getLogger(__name__) diff --git a/src/python/grpcio_csm_observability/grpc_csm_observability/_csm_observability_plugin.py b/src/python/grpcio_csm_observability/grpc_csm_observability/_csm_observability_plugin.py index b473b260b7d63..8995446d958fb 100644 --- a/src/python/grpcio_csm_observability/grpc_csm_observability/_csm_observability_plugin.py +++ b/src/python/grpcio_csm_observability/grpc_csm_observability/_csm_observability_plugin.py @@ -21,8 +21,6 @@ from grpc_observability._open_telemetry_plugin import OpenTelemetryLabelInjector from grpc_observability._open_telemetry_plugin import OpenTelemetryPlugin from grpc_observability._open_telemetry_plugin import OpenTelemetryPluginOption - -# pytype: disable=pyi-error from opentelemetry.metrics import MeterProvider from opentelemetry.resourcedetector.gcp_resource_detector import ( GoogleCloudResourceDetector, diff --git a/src/python/grpcio_observability/grpc_observability/_open_census_exporter.py b/src/python/grpcio_observability/grpc_observability/_open_census_exporter.py index f37b4521eb3a4..8561a803c5876 100644 --- a/src/python/grpcio_observability/grpc_observability/_open_census_exporter.py +++ b/src/python/grpcio_observability/grpc_observability/_open_census_exporter.py @@ -17,7 +17,7 @@ from typing import List, Mapping, Optional, Tuple from google.rpc import code_pb2 -from grpc_observability import _observability # pytype: disable=pyi-error +from grpc_observability import _observability from grpc_observability import _observability_config from grpc_observability import _views from opencensus.common.transports import async_ diff --git a/src/python/grpcio_observability/grpc_observability/_open_telemetry_observability.py b/src/python/grpcio_observability/grpc_observability/_open_telemetry_observability.py index 038cec85a413f..d796d418b1da5 100644 --- a/src/python/grpcio_observability/grpc_observability/_open_telemetry_observability.py +++ b/src/python/grpcio_observability/grpc_observability/_open_telemetry_observability.py @@ -18,8 +18,6 @@ from typing import Any, AnyStr, Dict, Iterable, List, Optional, Set, Union import grpc - -# pytype: disable=pyi-error from grpc_observability import _cyobservability from grpc_observability import _observability from grpc_observability import _open_telemetry_measures diff --git a/src/python/grpcio_observability/grpc_observability/_open_telemetry_plugin.py b/src/python/grpcio_observability/grpc_observability/_open_telemetry_plugin.py index 44ecab175530a..4844f267484e3 100644 --- a/src/python/grpcio_observability/grpc_observability/_open_telemetry_plugin.py +++ b/src/python/grpcio_observability/grpc_observability/_open_telemetry_plugin.py @@ -14,7 +14,6 @@ from typing import AnyStr, Callable, Dict, Iterable, List, Optional -# pytype: disable=pyi-error from grpc_observability import _open_telemetry_observability from grpc_observability._observability import OptionalLabelType from opentelemetry.metrics import MeterProvider From 6dcb8a732282e2a9a3068113162b9b8c9094e499 Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap Date: Tue, 3 Feb 2026 17:26:03 +0000 Subject: [PATCH 58/67] [PH2][CPPE2E] Enable server_early_return_test PiperOrigin-RevId: 864912126 --- test/cpp/end2end/BUILD | 1 + test/cpp/end2end/server_early_return_test.cc | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index 19b1db895b7c9..860344d30c935 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -574,6 +574,7 @@ grpc_cc_test( ], tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", ], deps = [ ":end2end_test_utils", diff --git a/test/cpp/end2end/server_early_return_test.cc b/test/cpp/end2end/server_early_return_test.cc index e1a9b778c46ea..22757f35c4eec 100644 --- a/test/cpp/end2end/server_early_return_test.cc +++ b/test/cpp/end2end/server_early_return_test.cc @@ -215,12 +215,20 @@ class ServerEarlyReturnTest : public ::testing::Test { int picked_port_; }; -TEST_F(ServerEarlyReturnTest, BidiStreamEarlyOk) { DoBidiStream(false); } +TEST_F(ServerEarlyReturnTest, BidiStreamEarlyOk) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); + DoBidiStream(false); +} -TEST_F(ServerEarlyReturnTest, BidiStreamEarlyCancel) { DoBidiStream(true); } +TEST_F(ServerEarlyReturnTest, BidiStreamEarlyCancel) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); + DoBidiStream(true); +} TEST_F(ServerEarlyReturnTest, RequestStreamEarlyOK) { DoRequestStream(false); } + TEST_F(ServerEarlyReturnTest, RequestStreamEarlyCancel) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1] Fix bug"); DoRequestStream(true); } From 6f258bf716f77a3afdec50ed6f7e224529fe049a Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 3 Feb 2026 18:04:07 +0000 Subject: [PATCH 59/67] Remove chttp2_bound_write_size experiment. This change removes the chttp2_bound_write_size experiment flag and makes the experimental behavior the default. The experiment was already rolled out and defaulted to true. PiperOrigin-RevId: 864928093 --- bazel/experiments.bzl | 4 ---- .../ext/transport/chttp2/transport/writing.cc | 22 +++++-------------- src/core/lib/experiments/experiments.cc | 15 ------------- src/core/lib/experiments/experiments.h | 8 ------- src/core/lib/experiments/experiments.yaml | 6 +---- 5 files changed, 6 insertions(+), 49 deletions(-) diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl index a08ea4497bb68..aeeb547b78d80 100644 --- a/bazel/experiments.bzl +++ b/bazel/experiments.bzl @@ -23,7 +23,6 @@ EXPERIMENT_ENABLES = { "call_tracer_send_trailing_metadata_is_an_annotation": "call_tracer_send_trailing_metadata_is_an_annotation", "chaotic_good_connect_deadline": "chaotic_good_connect_deadline", "chaotic_good_framing_layer": "chaotic_good_framing_layer", - "chttp2_bound_write_size": "chttp2_bound_write_size", "error_flatten": "error_flatten", "event_engine_client": "event_engine_client", "event_engine_dns": "event_engine_dns", @@ -95,7 +94,6 @@ EXPERIMENTS = { ], "core_end2end_test": [ "buffer_list_deletion_prep", - "chttp2_bound_write_size", "error_flatten", "event_engine_fork", "local_connector_secure", @@ -208,7 +206,6 @@ EXPERIMENTS = { ], "core_end2end_test": [ "buffer_list_deletion_prep", - "chttp2_bound_write_size", "error_flatten", "event_engine_fork", "local_connector_secure", @@ -321,7 +318,6 @@ EXPERIMENTS = { ], "core_end2end_test": [ "buffer_list_deletion_prep", - "chttp2_bound_write_size", "error_flatten", "event_engine_fork", "local_connector_secure", diff --git a/src/core/ext/transport/chttp2/transport/writing.cc b/src/core/ext/transport/chttp2/transport/writing.cc index 3d3c367905d2e..30f6caa033a45 100644 --- a/src/core/ext/transport/chttp2/transport/writing.cc +++ b/src/core/ext/transport/chttp2/transport/writing.cc @@ -341,19 +341,9 @@ class WriteContext { } grpc_chttp2_stream* NextStream() { - if (grpc_core::IsChttp2BoundWriteSizeEnabled()) { - if (t_->outbuf.c_slice_buffer()->length >= target_write_size_) { - result_.partial = true; - return nullptr; - } - } else { - // TODO(ctiller): this is likely buggy now, but everything seems to be - // working, so I'm keeping the above fix just for the experiment until - // we've had time to soak it fully. - if (t_->outbuf.c_slice_buffer()->length > target_write_size_) { - result_.partial = true; - return nullptr; - } + if (t_->outbuf.c_slice_buffer()->length >= target_write_size_) { + result_.partial = true; + return nullptr; } grpc_chttp2_stream* s; @@ -422,9 +412,7 @@ class DataSendContext { {t_->settings.peer().max_frame_size(), stream_remote_window(), t_->flow_control.remote_window(), static_cast(write_context_->target_write_size()) - - (grpc_core::IsChttp2BoundWriteSizeEnabled() - ? static_cast(t_->outbuf.Length()) - : static_cast(0))}), + static_cast(t_->outbuf.Length())}), 0, std::numeric_limits::max()); } @@ -564,7 +552,7 @@ class StreamWriteContext { t_->http2_stats->IncrementHttp2StreamStalls(); report_stall(t_, s_, "stream"); grpc_chttp2_list_add_stalled_by_stream(t_, s_); - } else if (grpc_core::IsChttp2BoundWriteSizeEnabled()) { + } else { GRPC_CHTTP2_STREAM_REF(s_, "chttp2_writing:fork"); grpc_chttp2_list_add_writable_stream(t_, s_); stream_became_writable_ = true; diff --git a/src/core/lib/experiments/experiments.cc b/src/core/lib/experiments/experiments.cc index 41c1b49ff4947..f2ce168492f68 100644 --- a/src/core/lib/experiments/experiments.cc +++ b/src/core/lib/experiments/experiments.cc @@ -47,9 +47,6 @@ const char* const additional_constraints_chaotic_good_connect_deadline = "{}"; const char* const description_chaotic_good_framing_layer = "Enable the chaotic good framing layer."; const char* const additional_constraints_chaotic_good_framing_layer = "{}"; -const char* const description_chttp2_bound_write_size = - "Fix a bug where chttp2 can generate very large writes"; -const char* const additional_constraints_chttp2_bound_write_size = "{}"; const char* const description_error_flatten = "Flatten errors to ordinary absl::Status form."; const char* const additional_constraints_error_flatten = "{}"; @@ -273,8 +270,6 @@ const ExperimentMetadata g_experiment_metadata[] = { {"chaotic_good_framing_layer", description_chaotic_good_framing_layer, additional_constraints_chaotic_good_framing_layer, nullptr, 0, true, false}, - {"chttp2_bound_write_size", description_chttp2_bound_write_size, - additional_constraints_chttp2_bound_write_size, nullptr, 0, false, true}, {"error_flatten", description_error_flatten, additional_constraints_error_flatten, nullptr, 0, false, false}, {"event_engine_client", description_event_engine_client, @@ -456,9 +451,6 @@ const char* const additional_constraints_chaotic_good_connect_deadline = "{}"; const char* const description_chaotic_good_framing_layer = "Enable the chaotic good framing layer."; const char* const additional_constraints_chaotic_good_framing_layer = "{}"; -const char* const description_chttp2_bound_write_size = - "Fix a bug where chttp2 can generate very large writes"; -const char* const additional_constraints_chttp2_bound_write_size = "{}"; const char* const description_error_flatten = "Flatten errors to ordinary absl::Status form."; const char* const additional_constraints_error_flatten = "{}"; @@ -682,8 +674,6 @@ const ExperimentMetadata g_experiment_metadata[] = { {"chaotic_good_framing_layer", description_chaotic_good_framing_layer, additional_constraints_chaotic_good_framing_layer, nullptr, 0, true, false}, - {"chttp2_bound_write_size", description_chttp2_bound_write_size, - additional_constraints_chttp2_bound_write_size, nullptr, 0, false, true}, {"error_flatten", description_error_flatten, additional_constraints_error_flatten, nullptr, 0, false, false}, {"event_engine_client", description_event_engine_client, @@ -865,9 +855,6 @@ const char* const additional_constraints_chaotic_good_connect_deadline = "{}"; const char* const description_chaotic_good_framing_layer = "Enable the chaotic good framing layer."; const char* const additional_constraints_chaotic_good_framing_layer = "{}"; -const char* const description_chttp2_bound_write_size = - "Fix a bug where chttp2 can generate very large writes"; -const char* const additional_constraints_chttp2_bound_write_size = "{}"; const char* const description_error_flatten = "Flatten errors to ordinary absl::Status form."; const char* const additional_constraints_error_flatten = "{}"; @@ -1091,8 +1078,6 @@ const ExperimentMetadata g_experiment_metadata[] = { {"chaotic_good_framing_layer", description_chaotic_good_framing_layer, additional_constraints_chaotic_good_framing_layer, nullptr, 0, true, false}, - {"chttp2_bound_write_size", description_chttp2_bound_write_size, - additional_constraints_chttp2_bound_write_size, nullptr, 0, false, true}, {"error_flatten", description_error_flatten, additional_constraints_error_flatten, nullptr, 0, false, false}, {"event_engine_client", description_event_engine_client, diff --git a/src/core/lib/experiments/experiments.h b/src/core/lib/experiments/experiments.h index d3fdc86624c52..36a25ab32806b 100644 --- a/src/core/lib/experiments/experiments.h +++ b/src/core/lib/experiments/experiments.h @@ -71,7 +71,6 @@ inline bool IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled() { inline bool IsChaoticGoodConnectDeadlineEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER inline bool IsChaoticGoodFramingLayerEnabled() { return true; } -inline bool IsChttp2BoundWriteSizeEnabled() { return false; } inline bool IsErrorFlattenEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT inline bool IsEventEngineClientEnabled() { return true; } @@ -148,7 +147,6 @@ inline bool IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled() { inline bool IsChaoticGoodConnectDeadlineEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER inline bool IsChaoticGoodFramingLayerEnabled() { return true; } -inline bool IsChttp2BoundWriteSizeEnabled() { return false; } inline bool IsErrorFlattenEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT inline bool IsEventEngineClientEnabled() { return true; } @@ -225,7 +223,6 @@ inline bool IsCallTracerSendTrailingMetadataIsAnAnnotationEnabled() { inline bool IsChaoticGoodConnectDeadlineEnabled() { return true; } #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER inline bool IsChaoticGoodFramingLayerEnabled() { return true; } -inline bool IsChttp2BoundWriteSizeEnabled() { return false; } inline bool IsErrorFlattenEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT inline bool IsEventEngineClientEnabled() { return true; } @@ -296,7 +293,6 @@ enum ExperimentIds { kExperimentIdCallTracerSendTrailingMetadataIsAnAnnotation, kExperimentIdChaoticGoodConnectDeadline, kExperimentIdChaoticGoodFramingLayer, - kExperimentIdChttp2BoundWriteSize, kExperimentIdErrorFlatten, kExperimentIdEventEngineClient, kExperimentIdEventEngineDns, @@ -372,10 +368,6 @@ inline bool IsChaoticGoodConnectDeadlineEnabled() { inline bool IsChaoticGoodFramingLayerEnabled() { return IsExperimentEnabled(); } -#define GRPC_EXPERIMENT_IS_INCLUDED_CHTTP2_BOUND_WRITE_SIZE -inline bool IsChttp2BoundWriteSizeEnabled() { - return IsExperimentEnabled(); -} #define GRPC_EXPERIMENT_IS_INCLUDED_ERROR_FLATTEN inline bool IsErrorFlattenEnabled() { return IsExperimentEnabled(); diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index ac54771b83cc7..5f01c9eac8d71 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -73,11 +73,7 @@ owner: ctiller@google.com test_tags: [core_end2end_test] allow_in_fuzzing_config: false -- name: chttp2_bound_write_size - description: Fix a bug where chttp2 can generate very large writes - expiry: 2026/02/01 - owner: ctiller@google.com - test_tags: [core_end2end_test] + - name: error_flatten description: Flatten errors to ordinary absl::Status form. expiry: 2026/04/01 From 1d916778d07cf337e1f81631c9c170a18cc712a5 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Tue, 3 Feb 2026 18:13:47 +0000 Subject: [PATCH 60/67] [EventEngine] Remove an incorrect std::move in DNSServiceResolver constructor (#41502) This should fix #40141. The `std::move` call there is incorrect, because the `engine_` field can be used later in `LookupSRV` and `LookupTXT`. Closes #41502 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41502 from murgatroid99:dns_service_resolver_move_fix b4bdd77e6ad0624c29f0da6dd44dc891b127bf80 PiperOrigin-RevId: 864932736 --- src/core/lib/event_engine/cf_engine/dns_service_resolver.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/lib/event_engine/cf_engine/dns_service_resolver.h b/src/core/lib/event_engine/cf_engine/dns_service_resolver.h index 94e1316397d9a..1ccf91ebb3192 100644 --- a/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +++ b/src/core/lib/event_engine/cf_engine/dns_service_resolver.h @@ -77,8 +77,7 @@ class DNSServiceResolver : public EventEngine::DNSResolver { public: explicit DNSServiceResolver(std::shared_ptr engine) : engine_(std::move(engine)), - impl_(grpc_core::MakeRefCounted( - std::move((engine_)))) {} + impl_(grpc_core::MakeRefCounted(engine_)) {} ~DNSServiceResolver() override { impl_->Shutdown(); } From 655defd0f6f853780b8fa62ee9356bea3b94002d Mon Sep 17 00:00:00 2001 From: Easwar Swaminathan Date: Tue, 3 Feb 2026 11:38:27 -0800 Subject: [PATCH 61/67] [interop] Add v1.77.0 release of grpc-go to interop matrix (#41083) Closes #41083 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/41083 from easwars:go_release_v1.77.0 c8d23455ef36924d3c9c4d891e2e8e7e6c33980c PiperOrigin-RevId: 864973691 --- tools/interop_matrix/client_matrix.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/interop_matrix/client_matrix.py b/tools/interop_matrix/client_matrix.py index d3a5ebe23cbef..53b7a25aa3010 100644 --- a/tools/interop_matrix/client_matrix.py +++ b/tools/interop_matrix/client_matrix.py @@ -325,6 +325,7 @@ def __init__(self, patch=[], runtimes=[], testcases_file=None): ("v1.74.3", ReleaseInfo()), ("v1.75.1", ReleaseInfo()), ("v1.76.0", ReleaseInfo()), + ("v1.77.0", ReleaseInfo()), ("v1.78.0", ReleaseInfo()), ] ), From b06e3a46bf006762a1232694103db74cd9219a8d Mon Sep 17 00:00:00 2001 From: Tanvi Jagtap Date: Tue, 3 Feb 2026 20:51:46 -0800 Subject: [PATCH 62/67] [PH2][CPPE2E] Enable proto_server_reflection_test PiperOrigin-RevId: 865185986 --- test/cpp/end2end/BUILD | 2 ++ test/cpp/end2end/proto_server_reflection_test.cc | 6 ++++++ test/cpp/end2end/streaming_throughput_test.cc | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/test/cpp/end2end/BUILD b/test/cpp/end2end/BUILD index 860344d30c935..1a53343c5d375 100644 --- a/test/cpp/end2end/BUILD +++ b/test/cpp/end2end/BUILD @@ -1058,6 +1058,7 @@ grpc_cc_test( ], tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", # b/117623310. "grpc:no-internal-poller", ], @@ -1289,6 +1290,7 @@ grpc_cc_test( ], tags = [ "cpp_end2end_test", + "cpp_end2end_test_client_ph2", "no_windows", ], deps = [ diff --git a/test/cpp/end2end/proto_server_reflection_test.cc b/test/cpp/end2end/proto_server_reflection_test.cc index 11012a282300c..dc44da0f7fafc 100644 --- a/test/cpp/end2end/proto_server_reflection_test.cc +++ b/test/cpp/end2end/proto_server_reflection_test.cc @@ -163,6 +163,9 @@ TEST_F(ProtoServerReflectionTest, CheckResponseWithLocalDescriptorPool) { } TEST_F(ProtoServerReflectionTest, V1AlphaApiInstalled) { + SKIP_TEST_FOR_PH2( + "TODO(tjagtap) [PH2][P1] Fix memory leak. The leak is flaky (4/10 " + "times)"); ResetStub(); using Service = reflection::v1alpha::ServerReflection; using Request = reflection::v1alpha::ServerReflectionRequest; @@ -189,6 +192,9 @@ TEST_F(ProtoServerReflectionTest, V1AlphaApiInstalled) { } TEST_F(ProtoServerReflectionTest, V1ApiInstalled) { + SKIP_TEST_FOR_PH2( + "TODO(tjagtap) [PH2][P1] Fix memory leak. The leak is flaky (3/10 " + "times)"); ResetStub(); using Service = reflection::v1::ServerReflection; using Request = reflection::v1::ServerReflectionRequest; diff --git a/test/cpp/end2end/streaming_throughput_test.cc b/test/cpp/end2end/streaming_throughput_test.cc index a2cca1c3d93e7..3561cc338912d 100644 --- a/test/cpp/end2end/streaming_throughput_test.cc +++ b/test/cpp/end2end/streaming_throughput_test.cc @@ -166,8 +166,8 @@ static void Drainer(ClientReaderWriter* reader) { } } -// TODO(tjagtap) [PH2][P1][CPPE2E] Passes for CHTTP2. Fails 2/100 times for PH2 TEST_F(End2endTest, StreamingThroughput) { + SKIP_TEST_FOR_PH2("TODO(tjagtap) [PH2][P1][CPPE2E] Fails 2/100 times "); ResetStub(); grpc::ClientContext context; auto stream = stub_->BidiStream(&context); From 544e913ac827f059c7312cd2ae1eb9d55a65e18b Mon Sep 17 00:00:00 2001 From: Pragun Saxena Date: Tue, 3 Feb 2026 21:06:00 -0800 Subject: [PATCH 63/67] The changes include - [transport] Expanding the TCP metric set of choatic_good v2. - [transport] Formatting timestamp for EndpoinWriteMetricsTrace. - [channelz] Exposing const reference to underlying property list for PropertyList. - [test-util] Update expectations to match the added TCP metrics. PiperOrigin-RevId: 865191430 --- src/core/channelz/property_list.h | 5 ++ .../transport/chaotic_good/data_endpoints.cc | 70 +++++++++++++++++-- .../chaotic_good/tcp_ztrace_collector.h | 2 +- .../transport/util/mock_promise_endpoint.h | 12 ++-- 4 files changed, 75 insertions(+), 14 deletions(-) diff --git a/src/core/channelz/property_list.h b/src/core/channelz/property_list.h index 8ea4936b26429..0ce30bde7b9e2 100644 --- a/src/core/channelz/property_list.h +++ b/src/core/channelz/property_list.h @@ -146,6 +146,11 @@ class PropertyList final : public OtherPropertyValue { void FillUpbProto(grpc_channelz_v2_PropertyList* proto, upb_Arena* arena); void FillAny(google_protobuf_Any* any, upb_Arena* arena) override; + const std::vector>& property_list() + const { + return property_list_; + } + private: void SetInternal(absl::string_view key, std::optional value); diff --git a/src/core/ext/transport/chaotic_good/data_endpoints.cc b/src/core/ext/transport/chaotic_good/data_endpoints.cc index e0173f7c4921b..014c71b8ede30 100644 --- a/src/core/ext/transport/chaotic_good/data_endpoints.cc +++ b/src/core/ext/transport/chaotic_good/data_endpoints.cc @@ -508,21 +508,64 @@ class MetricsCollector delivery_rate_ = telemetry_info_->GetMetricKey("delivery_rate"); rtt_ = telemetry_info_->GetMetricKey("net_rtt_usec"); if (!rtt_.has_value()) rtt_ = telemetry_info_->GetMetricKey("srtt"); + min_rtt_ = telemetry_info_->GetMetricKey("min_rtt"); data_notsent_ = telemetry_info_->GetMetricKey("data_notsent"); byte_offset_ = telemetry_info_->GetMetricKey("byte_offset"); - absl::InlinedVector keys; - if (delivery_rate_.has_value()) { - keys.push_back(*delivery_rate_); - } + congestion_window_ = telemetry_info_->GetMetricKey("congestion_window"); + snd_ssthresh_ = telemetry_info_->GetMetricKey("snd_ssthresh"); + packet_retx_ = telemetry_info_->GetMetricKey("packet_retx"); + packet_spurious_retx_ = + telemetry_info_->GetMetricKey("packet_spurious_retx"); + packet_sent_ = telemetry_info_->GetMetricKey("packet_sent"); + packet_delivered_ = telemetry_info_->GetMetricKey("packet_delivered"); + packet_delivered_ce_ = telemetry_info_->GetMetricKey("packet_delivered_ce"); + data_retx_ = telemetry_info_->GetMetricKey("data_retx"); + data_sent_ = telemetry_info_->GetMetricKey("data_sent"); + pacing_rate_ = telemetry_info_->GetMetricKey("pacing_rate"); + reordering_ = telemetry_info_->GetMetricKey("reordering"); + recurring_retrans_ = telemetry_info_->GetMetricKey("recurring_retrans"); + busy_usec_ = telemetry_info_->GetMetricKey("busy_usec"); + rwnd_limited_usec_ = telemetry_info_->GetMetricKey("rwnd_limited_usec"); + sndbuf_limited_usec_ = telemetry_info_->GetMetricKey("sndbuf_limited_usec"); + is_delivery_rate_app_limited_ = + telemetry_info_->GetMetricKey("is_delivery_rate_app_limited"); + + absl::InlinedVector keys; + if (delivery_rate_.has_value()) keys.push_back(*delivery_rate_); if (byte_offset_.has_value()) keys.push_back(*byte_offset_); if (rtt_.has_value()) keys.push_back(*rtt_); + if (min_rtt_.has_value()) keys.push_back(*min_rtt_); if (data_notsent_.has_value()) keys.push_back(*data_notsent_); + if (congestion_window_.has_value()) keys.push_back(*congestion_window_); + if (snd_ssthresh_.has_value()) keys.push_back(*snd_ssthresh_); + if (packet_retx_.has_value()) keys.push_back(*packet_retx_); + if (packet_spurious_retx_.has_value()) { + keys.push_back(*packet_spurious_retx_); + } + if (packet_sent_.has_value()) keys.push_back(*packet_sent_); + if (packet_delivered_.has_value()) keys.push_back(*packet_delivered_); + if (packet_delivered_ce_.has_value()) keys.push_back(*packet_delivered_ce_); + if (data_retx_.has_value()) keys.push_back(*data_retx_); + if (data_sent_.has_value()) keys.push_back(*data_sent_); + if (pacing_rate_.has_value()) keys.push_back(*pacing_rate_); + if (reordering_.has_value()) keys.push_back(*reordering_); + if (recurring_retrans_.has_value()) keys.push_back(*recurring_retrans_); + if (busy_usec_.has_value()) keys.push_back(*busy_usec_); + if (rwnd_limited_usec_.has_value()) keys.push_back(*rwnd_limited_usec_); + if (sndbuf_limited_usec_.has_value()) keys.push_back(*sndbuf_limited_usec_); + if (is_delivery_rate_app_limited_.has_value()) { + keys.push_back(*is_delivery_rate_app_limited_); + } requested_metrics_ = telemetry_info_->GetMetricsSet(keys); } bool HasAnyMetrics() const { + // Checking this subset of metrics is sufficient to determine if it has + // any metrics return delivery_rate_.has_value() || rtt_.has_value() || - data_notsent_.has_value(); + min_rtt_.has_value() || data_notsent_.has_value() || + byte_offset_.has_value() || congestion_window_.has_value() || + snd_ssthresh_.has_value() || packet_retx_.has_value(); } std::shared_ptr< @@ -612,8 +655,25 @@ class MetricsCollector Clock* const clock_; std::optional delivery_rate_; std::optional rtt_; + std::optional min_rtt_; std::optional data_notsent_; std::optional byte_offset_; + std::optional congestion_window_; + std::optional snd_ssthresh_; + std::optional packet_retx_; + std::optional packet_spurious_retx_; + std::optional packet_sent_; + std::optional packet_delivered_; + std::optional packet_delivered_ce_; + std::optional data_retx_; + std::optional data_sent_; + std::optional pacing_rate_; + std::optional reordering_; + std::optional recurring_retrans_; + std::optional busy_usec_; + std::optional rwnd_limited_usec_; + std::optional sndbuf_limited_usec_; + std::optional is_delivery_rate_app_limited_; std::shared_ptr< grpc_event_engine::experimental::EventEngine::Endpoint::MetricsSet> requested_metrics_; diff --git a/src/core/ext/transport/chaotic_good/tcp_ztrace_collector.h b/src/core/ext/transport/chaotic_good/tcp_ztrace_collector.h index c6e1b0fed6d68..0c3b89ce5e2ad 100644 --- a/src/core/ext/transport/chaotic_good/tcp_ztrace_collector.h +++ b/src/core/ext/transport/chaotic_good/tcp_ztrace_collector.h @@ -82,7 +82,7 @@ struct EndpointWriteMetricsTrace { return channelz::PropertyList() .Set("metadata_type", grpc_event_engine::experimental::WriteEventToString(write_event)) - .Set("fathom_timestamp", timestamp) + .Set("fathom_timestamp", absl::FormatTime(timestamp)) .Merge([this]() { channelz::PropertyList props; for (const auto& [name, value] : metrics) { diff --git a/test/core/transport/util/mock_promise_endpoint.h b/test/core/transport/util/mock_promise_endpoint.h index 03bab64c92378..f7d24a080af0f 100644 --- a/test/core/transport/util/mock_promise_endpoint.h +++ b/test/core/transport/util/mock_promise_endpoint.h @@ -134,14 +134,10 @@ struct MockPromiseEndpoint { std::shared_ptr telemetry_info = nullptr) { if (telemetry_info == nullptr) { telemetry_info = std::make_shared(); - EXPECT_CALL(*telemetry_info, GetMetricKey("delivery_rate")) - .WillRepeatedly(::testing::Return(1)); - EXPECT_CALL(*telemetry_info, GetMetricKey("net_rtt_usec")) - .WillRepeatedly(::testing::Return(2)); - EXPECT_CALL(*telemetry_info, GetMetricKey("data_notsent")) - .WillRepeatedly(::testing::Return(3)); - EXPECT_CALL(*telemetry_info, GetMetricKey("byte_offset")) - .WillRepeatedly(::testing::Return(4)); + EXPECT_CALL(*telemetry_info, GetMetricKey(::testing::_)) + .WillRepeatedly([key = std::make_shared(0)](absl::string_view) { + return ++(*key); + }); } EXPECT_CALL(*endpoint, GetTelemetryInfo()) .WillRepeatedly(::testing::Return(telemetry_info)); From 7e3a37d56d5931f1eb006a0bf787a5e281bdf910 Mon Sep 17 00:00:00 2001 From: Chad Wilson <29788154+chadlwilson@users.noreply.github.com> Date: Tue, 3 Feb 2026 21:58:34 -0800 Subject: [PATCH 64/67] [Ruby] Build/test ruby 4.0 and build native gems with Ruby 4.0 support (#41324) - Run CI and normal specs with Ruby 4.0.1 - Updates ruby-compiler-dock to `1.11.1` to bring Ruby 4.0 cross compile support. - updates Rubocop and resolves latent warnings since update is needed for compatibility to avoid runtime warnings on modern Ruby - Adds missing `syslog` development dependency to resolve nag on more recent Ruby versions where it has moved to a bundled gem, rather than default gem as in `<= 3.3` - Weakens a single test assertion for bidi servers since `.inspect` of certain Ruby errors (e.g `NoMethodError`) serialize differently in `4.0` onwards Closes #41324 PiperOrigin-RevId: 865208597 --- Rakefile | 6 +- examples/ruby/README.md | 1 - grpc.gemspec | 7 +- src/ruby/README.md | 9 +- src/ruby/end2end/fork_test.rb | 4 +- src/ruby/lib/grpc/grpc.rb | 16 ++-- src/ruby/spec/client_server_spec.rb | 2 +- src/ruby/spec/generic/rpc_server_pool_spec.rb | 2 +- src/ruby/spec/generic/rpc_server_spec.rb | 7 +- src/ruby/spec/spec_helper.rb | 2 +- templates/grpc.gemspec.template | 10 +-- .../Dockerfile.inja | 22 +++++ .../tools/dockerfile/ruby_4_0_deps.include | 15 ++++ .../rake_aarch64-linux-gnu.current_version | 2 +- .../rake_aarch64-linux-gnu/Dockerfile | 2 +- .../rake_aarch64-linux-musl.current_version | 2 +- .../rake_aarch64-linux-musl/Dockerfile | 2 +- .../rake_arm64-darwin.current_version | 2 +- .../rake_arm64-darwin/Dockerfile | 2 +- .../rake_x64-mingw-ucrt.current_version | 2 +- .../rake_x64-mingw-ucrt/Dockerfile | 2 +- .../rake_x86-linux-gnu.current_version | 2 +- .../rake_x86-linux-gnu/Dockerfile | 2 +- .../rake_x86-linux-musl.current_version | 2 +- .../rake_x86-linux-musl/Dockerfile | 2 +- .../rake_x86-mingw32.current_version | 2 +- .../rake_x86-mingw32/Dockerfile | 2 +- .../rake_x86_64-darwin.current_version | 2 +- .../rake_x86_64-darwin/Dockerfile | 2 +- .../rake_x86_64-linux-gnu.current_version | 2 +- .../rake_x86_64-linux-gnu/Dockerfile | 2 +- .../rake_x86_64-linux-musl.current_version | 2 +- .../rake_x86_64-linux-musl/Dockerfile | 2 +- .../dockerimage_current_versions.bzl | 22 ++--- .../ruby_alpine_x64_ruby_4_0.current_version | 1 + .../ruby_alpine_x64_ruby_4_0/Dockerfile | 22 +++++ ...ruby_debian11_x64_ruby_4_0.current_version | 1 + .../ruby_debian11_x64_ruby_4_0/Dockerfile | 87 +++++++++++++++++++ .../prepare_build_linux_ruby_artifact_rc | 5 +- .../artifacts/distribtest_targets.py | 14 +++ 40 files changed, 223 insertions(+), 72 deletions(-) create mode 100644 templates/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0/Dockerfile.inja create mode 100644 templates/tools/dockerfile/ruby_4_0_deps.include create mode 100644 tools/dockerfile/distribtest/ruby_alpine_x64_ruby_4_0.current_version create mode 100644 tools/dockerfile/distribtest/ruby_alpine_x64_ruby_4_0/Dockerfile create mode 100644 tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0.current_version create mode 100644 tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0/Dockerfile diff --git a/Rakefile b/Rakefile index f362ed2be48a4..8aaaa32ea7a5e 100755 --- a/Rakefile +++ b/Rakefile @@ -143,7 +143,7 @@ task 'gem:native', [:plat] do |t, args| verbose = ENV['V'] || '0' grpc_config = ENV['GRPC_CONFIG'] || 'opt' - target_ruby_minor_versions = ['3.4', '3.3', '3.2', '3.1'] + target_ruby_minor_versions = ['4.0', '3.4', '3.3', '3.2', '3.1'] selected_plat = "#{args[:plat]}" # use env variable to set artifact build paralellism @@ -190,7 +190,7 @@ task 'gem:native', [:plat] do |t, args| run_rake_compiler(plat, <<~EOT) #{prepare_ccache_cmd} && \ gem update --system --no-document && \ - bundle update && \ + bundle update --all && \ bundle exec rake clean && \ bundle exec rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem pkg/#{spec.full_name}.gem \ RUBY_CC_VERSION=#{RakeCompilerDock.ruby_cc_version(*target_ruby_minor_versions)} \ @@ -232,7 +232,7 @@ task 'gem:native', [:plat] do |t, args| run_rake_compiler(plat, <<~EOT) #{prepare_ccache_cmd} && \ gem update --system --no-document && \ - bundle update && \ + bundle update --all && \ bundle exec rake clean && \ export GRPC_RUBY_DEBUG_SYMBOLS_OUTPUT_DIR=#{debug_symbols_dir} && \ bundle exec rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem pkg/#{spec.full_name}.gem \ diff --git a/examples/ruby/README.md b/examples/ruby/README.md index 2a3dec338fe8e..e8a2bde042207 100644 --- a/examples/ruby/README.md +++ b/examples/ruby/README.md @@ -31,7 +31,6 @@ INSTALL ```sh $ # from this directory - $ gem install bundler # if you don't already have bundler available $ bundle install ``` diff --git a/grpc.gemspec b/grpc.gemspec index 5d0a9ac589fc1..532151099c2a4 100644 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -36,12 +36,13 @@ Gem::Specification.new do |s| s.add_development_dependency 'bundler', '>= 1.9' s.add_development_dependency 'facter', '~> 2.4' s.add_development_dependency 'logging', '~> 2.0' + s.add_development_dependency 'syslog', '~> 0.3.0' s.add_development_dependency 'simplecov', '~> 0.22' s.add_development_dependency 'rake', '~> 13.0' - s.add_development_dependency 'rake-compiler', '~> 1.2.1' - s.add_development_dependency 'rake-compiler-dock', '= 1.9.1' + s.add_development_dependency 'rake-compiler', '~> 1.3.1' + s.add_development_dependency 'rake-compiler-dock', '~> 1.11.1' s.add_development_dependency 'rspec', '~> 3.6' - s.add_development_dependency 'rubocop', '~> 1.41.0' + s.add_development_dependency 'rubocop', '~> 1.82.0' s.add_development_dependency 'signet', '~> 0.7' s.add_development_dependency 'googleauth', '~> 1.0' diff --git a/src/ruby/README.md b/src/ruby/README.md index e6ae90250a255..a3bc512a038d8 100644 --- a/src/ruby/README.md +++ b/src/ruby/README.md @@ -7,7 +7,7 @@ A Ruby implementation of gRPC. PREREQUISITES ------------- -- Ruby 3.x. The gRPC API uses keyword args. +- Ruby 3.x-4.x. The gRPC API uses keyword args. INSTALLATION --------------- @@ -33,7 +33,7 @@ BUILD FROM SOURCE git submodule update --init ``` -- Install Ruby 3.x. Consider doing this with [RVM](http://rvm.io), it's a nice way of controlling +- Install Ruby. Consider doing this with [RVM](http://rvm.io), it's a nice way of controlling the exact ruby version that's used. ```sh $ command curl -sSL https://rvm.io/mpapis.asc | gpg --import - @@ -44,11 +44,6 @@ $ # and that the rvm command is installed ``` - Make sure your run `source $HOME/.rvm/scripts/rvm` as instructed to complete the set up of RVM -- Install [bundler](http://bundler.io/) -``` -$ gem install bundler -``` - - Finally, build and install the gRPC gem locally. ```sh $ # from this directory diff --git a/src/ruby/end2end/fork_test.rb b/src/ruby/end2end/fork_test.rb index 708253a59e82c..b5e6242dd9b67 100755 --- a/src/ruby/end2end/fork_test.rb +++ b/src/ruby/end2end/fork_test.rb @@ -34,7 +34,7 @@ def do_rpc(stub) stub.echo(Echo::EchoRequest.new(request: 'hello'), deadline: Time.now + 300) end -def run_client(stub, child_port) +def run_client(stub) do_rpc(stub) with_logging("parent: GRPC.prefork") { GRPC.prefork } pid = fork do @@ -71,7 +71,7 @@ def main STDERR.puts "server running on port: #{child_port}" stub = Echo::EchoServer::Stub.new("localhost:#{child_port}", :this_channel_is_insecure) 2.times do - run_client(stub, child_port) + run_client(stub) end end diff --git a/src/ruby/lib/grpc/grpc.rb b/src/ruby/lib/grpc/grpc.rb index 89944aea7fa78..db9959555481e 100644 --- a/src/ruby/lib/grpc/grpc.rb +++ b/src/ruby/lib/grpc/grpc.rb @@ -12,13 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -begin - ruby_version_dirname = /(\d+\.\d+)/.match(RUBY_VERSION).to_s - distrib_lib_dir = File.expand_path(ruby_version_dirname, - File.dirname(__FILE__)) - if !Dir.glob("#{distrib_lib_dir}/grpc_c*").empty? - require "#{distrib_lib_dir}/grpc_c" - else - require 'grpc/grpc_c' - end +ruby_version_dirname = /(\d+\.\d+)/.match(RUBY_VERSION).to_s +distrib_lib_dir = File.expand_path(ruby_version_dirname, + File.dirname(__FILE__)) +if !Dir.glob("#{distrib_lib_dir}/grpc_c*").empty? + require "#{distrib_lib_dir}/grpc_c" +else + require 'grpc/grpc_c' end diff --git a/src/ruby/spec/client_server_spec.rb b/src/ruby/spec/client_server_spec.rb index 0f4710e9e6f66..a355977c4fa2a 100644 --- a/src/ruby/spec/client_server_spec.rb +++ b/src/ruby/spec/client_server_spec.rb @@ -69,7 +69,7 @@ def client_cancel_test(cancel_proc, expected_code, it 'clients can cancel a call on the server' do expected_code = StatusCodes::CANCELLED expected_details = 'CANCELLED' - cancel_proc = proc { |call| call.cancel } + cancel_proc = proc(&:cancel) client_cancel_test(cancel_proc, expected_code, expected_details) end diff --git a/src/ruby/spec/generic/rpc_server_pool_spec.rb b/src/ruby/spec/generic/rpc_server_pool_spec.rb index 0f2dac272e380..16df34c30b6c4 100644 --- a/src/ruby/spec/generic/rpc_server_pool_spec.rb +++ b/src/ruby/spec/generic/rpc_server_pool_spec.rb @@ -116,7 +116,7 @@ p = Pool.new(5) o, q = Object.new, Queue.new p.start - n = 5 # arbitrary + n = 5 # arbitrary n.times do p.schedule(o, &q.method(:push)) expect(q.pop).to be(o) diff --git a/src/ruby/spec/generic/rpc_server_spec.rb b/src/ruby/spec/generic/rpc_server_spec.rb index d34753f6e6c15..6959387191d60 100644 --- a/src/ruby/spec/generic/rpc_server_spec.rb +++ b/src/ruby/spec/generic/rpc_server_spec.rb @@ -547,7 +547,7 @@ def server_sends_bad_input(_, _) expect(one_failed_as_unavailable).to be(true) end - it 'should send a status UNKNOWN with a relevant message when the' \ + it 'should send a status UNKNOWN with a relevant message when the ' \ 'servers response stream is not an enumerable' do @srv.handle(BidiService) t = Thread.new { @srv.run } @@ -562,10 +562,9 @@ def server_sends_bad_input(_, _) end # Erroneous responses sent from the server handler should cause an # exception on the client with relevant info. - expected_details = 'NoMethodError: undefined method `each\' for '\ - '"bad response. (not an enumerable, client sees an error)"' + expected_details = /NoMethodError: undefined method [`']each'/ - expect(exception.inspect.include?(expected_details)).to be true + expect(exception.inspect).to match(expected_details) @srv.stop t.join end diff --git a/src/ruby/spec/spec_helper.rb b/src/ruby/spec/spec_helper.rb index 8fe2c16b35ef2..22cc09b62043e 100644 --- a/src/ruby/spec/spec_helper.rb +++ b/src/ruby/spec/spec_helper.rb @@ -52,7 +52,7 @@ module GRPC # logs will be stored in the @log_output variable. It is a StringIO instance. RSpec.configure do |config| include RSpec::LoggingHelper - config.capture_log_messages # comment this out to see logs during test runs + config.capture_log_messages # comment this out to see logs during test runs include GRPC::Spec::Helpers end diff --git a/templates/grpc.gemspec.template b/templates/grpc.gemspec.template index 5db3805415091..a13da5b6b146a 100644 --- a/templates/grpc.gemspec.template +++ b/templates/grpc.gemspec.template @@ -32,21 +32,19 @@ s.require_paths = %w( src/ruby/lib src/ruby/bin src/ruby/pb ) s.platform = Gem::Platform::RUBY - ## Once protobuf 4.x is working with other dependencies, - ## please replace the following fixed 3.25 version with - ## '~> 4.${settings.protobuf_version.split(".")[1]}' s.add_dependency 'google-protobuf', '>= 3.25', '< 5.0' s.add_dependency 'googleapis-common-protos-types', '~> 1.0' s.add_development_dependency 'bundler', '>= 1.9' s.add_development_dependency 'facter', '~> 2.4' s.add_development_dependency 'logging', '~> 2.0' + s.add_development_dependency 'syslog', '~> 0.3.0' s.add_development_dependency 'simplecov', '~> 0.22' s.add_development_dependency 'rake', '~> 13.0' - s.add_development_dependency 'rake-compiler', '~> 1.2.1' - s.add_development_dependency 'rake-compiler-dock', '= 1.9.1' + s.add_development_dependency 'rake-compiler', '~> 1.3.1' + s.add_development_dependency 'rake-compiler-dock', '~> 1.11.1' s.add_development_dependency 'rspec', '~> 3.6' - s.add_development_dependency 'rubocop', '~> 1.41.0' + s.add_development_dependency 'rubocop', '~> 1.82.0' s.add_development_dependency 'signet', '~> 0.7' s.add_development_dependency 'googleauth', '~> 1.0' diff --git a/templates/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0/Dockerfile.inja b/templates/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0/Dockerfile.inja new file mode 100644 index 0000000000000..01cf4aeaa7989 --- /dev/null +++ b/templates/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0/Dockerfile.inja @@ -0,0 +1,22 @@ +# Copyright 2024 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. + +FROM debian:11 + +{% include "../../apt_get_basic.include" %} +{% include "../../ruby_4_0_deps.include" %} +{% include "../../rvm_mkdir_workaround.include" %} + +# Define the default command. +CMD ["bash"] diff --git a/templates/tools/dockerfile/ruby_4_0_deps.include b/templates/tools/dockerfile/ruby_4_0_deps.include new file mode 100644 index 0000000000000..4a48762f771bd --- /dev/null +++ b/templates/tools/dockerfile/ruby_4_0_deps.include @@ -0,0 +1,15 @@ +#================== +# Ruby dependencies + +# Install rvm +RUN apt-get update && apt-get install -y gnupg2 && apt-get clean +RUN gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB +RUN \curl -sSL https://get.rvm.io | bash -s stable + +# Install Ruby 4.0 +RUN apt-get update && apt-get install -y procps && apt-get clean +RUN /bin/bash -l -c "rvm install ruby-4.0.1" +RUN /bin/bash -l -c "rvm use --default ruby-4.0.1" +RUN /bin/bash -l -c "echo 'gem: --no-document' > ~/.gemrc" +RUN /bin/bash -l -c "echo 'export PATH=/usr/local/rvm/bin:$PATH' >> ~/.bashrc" +RUN /bin/bash -l -c "echo 'rvm --default use ruby-4.0.1' >> ~/.bashrc" diff --git a/third_party/rake-compiler-dock/rake_aarch64-linux-gnu.current_version b/third_party/rake-compiler-dock/rake_aarch64-linux-gnu.current_version index 8e8d9ce21132b..c5ea62eaa849a 100644 --- a/third_party/rake-compiler-dock/rake_aarch64-linux-gnu.current_version +++ b/third_party/rake-compiler-dock/rake_aarch64-linux-gnu.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_aarch64-linux-gnu:85b6d99f20e78c35182fe2e570f0648866e863ed@sha256:9d81abde3a25e720bfb28c978df8eb793adaa3bb4e145d507967d72fc6510c71 \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_aarch64-linux-gnu:b2e4f88d9ab2306817161e5b842bb83b85a4640b@sha256:630e8ee14181ad896a67bfba59168781a4081707762ad3b22fd424b0599a1099 \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_aarch64-linux-gnu/Dockerfile b/third_party/rake-compiler-dock/rake_aarch64-linux-gnu/Dockerfile index 33b52f1d93758..c450a28035801 100644 --- a/third_party/rake-compiler-dock/rake_aarch64-linux-gnu/Dockerfile +++ b/third_party/rake-compiler-dock/rake_aarch64-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-aarch64-linux-gnu +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-aarch64-linux-gnu #================= # Install ccache diff --git a/third_party/rake-compiler-dock/rake_aarch64-linux-musl.current_version b/third_party/rake-compiler-dock/rake_aarch64-linux-musl.current_version index 2bb968fc5fa74..fb3116c865d9d 100644 --- a/third_party/rake-compiler-dock/rake_aarch64-linux-musl.current_version +++ b/third_party/rake-compiler-dock/rake_aarch64-linux-musl.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_aarch64-linux-musl:3bb4b1f8021d02ca0bd0739f8c5ec8b7ea57a93a@sha256:c01823e4e1323fe7a32547292a448f32ec5b90c286775a8c063dcefee8503d31 \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_aarch64-linux-musl:167201b4a3f448f7be7ff75ae45c88736d3b461c@sha256:a35685d4087732d3deecdc0f3214598deef6a8c94a44e15ed8b39851e6bd5241 \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_aarch64-linux-musl/Dockerfile b/third_party/rake-compiler-dock/rake_aarch64-linux-musl/Dockerfile index c64a2649a4b3a..ae26e0775275f 100644 --- a/third_party/rake-compiler-dock/rake_aarch64-linux-musl/Dockerfile +++ b/third_party/rake-compiler-dock/rake_aarch64-linux-musl/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-aarch64-linux-musl +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-aarch64-linux-musl #================= # Install ccache diff --git a/third_party/rake-compiler-dock/rake_arm64-darwin.current_version b/third_party/rake-compiler-dock/rake_arm64-darwin.current_version index adf0592183ac4..e594ddd317ba9 100644 --- a/third_party/rake-compiler-dock/rake_arm64-darwin.current_version +++ b/third_party/rake-compiler-dock/rake_arm64-darwin.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_arm64-darwin:fe49e7354767e5a07d23724f9d7f7587ffb5a163@sha256:28a88cb72472608f716aa60e7f1f22182c60809cc4e96c035c0e38e708e4e9be \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_arm64-darwin:18a4fe844d2bca92db18b9ecd55a9101f82c5f07@sha256:cf957c32dd8817d45d3ebb02e4b3c66fcbe4c38db812d2cdbba2d2cd642241a5 \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_arm64-darwin/Dockerfile b/third_party/rake-compiler-dock/rake_arm64-darwin/Dockerfile index 71de5036465b8..2c0a572be753e 100644 --- a/third_party/rake-compiler-dock/rake_arm64-darwin/Dockerfile +++ b/third_party/rake-compiler-dock/rake_arm64-darwin/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-arm64-darwin +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-arm64-darwin diff --git a/third_party/rake-compiler-dock/rake_x64-mingw-ucrt.current_version b/third_party/rake-compiler-dock/rake_x64-mingw-ucrt.current_version index 1865478894b2a..774477772fbaf 100644 --- a/third_party/rake-compiler-dock/rake_x64-mingw-ucrt.current_version +++ b/third_party/rake-compiler-dock/rake_x64-mingw-ucrt.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x64-mingw-ucrt:89f6aec960912399eab13578503cdf6fcf3bc05b@sha256:d6d34c393a66a3b36bb62364b149bd6e84f342258b586bfd0301972d9bdda34c \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x64-mingw-ucrt:5d6524738ce863bf0a8535630ef101dc40cc84b8@sha256:307bb7983dc3acebd1a7dde7433955d67863b675f6240d7f7729003d55765061 \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_x64-mingw-ucrt/Dockerfile b/third_party/rake-compiler-dock/rake_x64-mingw-ucrt/Dockerfile index 8e43afafb18a8..716aeb2c35ef9 100644 --- a/third_party/rake-compiler-dock/rake_x64-mingw-ucrt/Dockerfile +++ b/third_party/rake-compiler-dock/rake_x64-mingw-ucrt/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-x64-mingw-ucrt +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-x64-mingw-ucrt RUN find / -name win32.h | while read f ; do sed -i 's/gettimeofday/rb_gettimeofday/' $f ; done diff --git a/third_party/rake-compiler-dock/rake_x86-linux-gnu.current_version b/third_party/rake-compiler-dock/rake_x86-linux-gnu.current_version index 41258a8c8cf16..b42b618ec53cb 100644 --- a/third_party/rake-compiler-dock/rake_x86-linux-gnu.current_version +++ b/third_party/rake-compiler-dock/rake_x86-linux-gnu.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-linux-gnu:e0fa6d6a4267cc484fbbfba6f2ad64f13594a5d5@sha256:3c39ea31f79c07c78aa691d859ffd1b72496835a95db7c1b8ce8c8028c6e5418 \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-linux-gnu:dcf81aebad1b54d0890e050ee1f117249f74424b@sha256:42a74d7b9413a217a5ac94dd42c6b9e8748df9901a445c5fce677c9d513f2add \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_x86-linux-gnu/Dockerfile b/third_party/rake-compiler-dock/rake_x86-linux-gnu/Dockerfile index 2314fabdb971a..7cdfcb767079a 100644 --- a/third_party/rake-compiler-dock/rake_x86-linux-gnu/Dockerfile +++ b/third_party/rake-compiler-dock/rake_x86-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-x86-linux-gnu +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-x86-linux-gnu #================= # Install ccache diff --git a/third_party/rake-compiler-dock/rake_x86-linux-musl.current_version b/third_party/rake-compiler-dock/rake_x86-linux-musl.current_version index e6b3e1c98c1d5..7f61b885f8486 100644 --- a/third_party/rake-compiler-dock/rake_x86-linux-musl.current_version +++ b/third_party/rake-compiler-dock/rake_x86-linux-musl.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-linux-musl:c1ffe4dd31db4268168860052f0bdbea50bc517a@sha256:3f67eac1e1da927bfe066fe2558389da49bf02b497192ebd061d53b15e9484ac \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-linux-musl:a2ae20d3067ebc429d74f039c96c62334d8f928b@sha256:c9f5d24cd75e1eb2d0f159c7a51dec05b7c13f07fa9a0b26618d842e9c6a01e1 \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_x86-linux-musl/Dockerfile b/third_party/rake-compiler-dock/rake_x86-linux-musl/Dockerfile index 49d20a2ab7580..f8be4013a594b 100644 --- a/third_party/rake-compiler-dock/rake_x86-linux-musl/Dockerfile +++ b/third_party/rake-compiler-dock/rake_x86-linux-musl/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-x86-linux-musl +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-x86-linux-musl #================= # Install ccache diff --git a/third_party/rake-compiler-dock/rake_x86-mingw32.current_version b/third_party/rake-compiler-dock/rake_x86-mingw32.current_version index 743c5cfa1170b..8d6f5c94d1970 100644 --- a/third_party/rake-compiler-dock/rake_x86-mingw32.current_version +++ b/third_party/rake-compiler-dock/rake_x86-mingw32.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-mingw32:88bb3d26852f435cb50cb4e5c52d6bf39b6bd785@sha256:2be5e0decccc23f8b7ac1b2d5edd21ea814868dcfe08b955749167fd22f99a20 \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-mingw32:7d66d2ffd68e4f00e45f9149a4d9022f20e5c221@sha256:fa427e2ed1b3997f88b2cf04685f4311aa8eedd31457405fdd9ac1efa285f539 \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_x86-mingw32/Dockerfile b/third_party/rake-compiler-dock/rake_x86-mingw32/Dockerfile index 44690d51d360e..dbbaf1336c2bf 100644 --- a/third_party/rake-compiler-dock/rake_x86-mingw32/Dockerfile +++ b/third_party/rake-compiler-dock/rake_x86-mingw32/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-x86-mingw32 +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-x86-mingw32 RUN find / -name win32.h | while read f ; do sed -i 's/gettimeofday/rb_gettimeofday/' $f ; done diff --git a/third_party/rake-compiler-dock/rake_x86_64-darwin.current_version b/third_party/rake-compiler-dock/rake_x86_64-darwin.current_version index 558d0aefe2749..4455cc6cb3361 100644 --- a/third_party/rake-compiler-dock/rake_x86_64-darwin.current_version +++ b/third_party/rake-compiler-dock/rake_x86_64-darwin.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-darwin:0b778c0a0ead88ef791333ccbf14fed34d98145d@sha256:e01c02a18130b9669da57bb28b3f6c30458511e20eae5821b3899a41e09f394a \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-darwin:8638abf6cedca794a28fa05dc80c4fa9373f796c@sha256:cbfa7625b6656941765827324141e6a06c3c3c30d2a15ff8d466e1f1bd2bde77 \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_x86_64-darwin/Dockerfile b/third_party/rake-compiler-dock/rake_x86_64-darwin/Dockerfile index 373d068e12585..0e5f980d5d62c 100644 --- a/third_party/rake-compiler-dock/rake_x86_64-darwin/Dockerfile +++ b/third_party/rake-compiler-dock/rake_x86_64-darwin/Dockerfile @@ -1 +1 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-x86_64-darwin +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-x86_64-darwin diff --git a/third_party/rake-compiler-dock/rake_x86_64-linux-gnu.current_version b/third_party/rake-compiler-dock/rake_x86_64-linux-gnu.current_version index e351aaa1ab822..7ba3b0027c213 100644 --- a/third_party/rake-compiler-dock/rake_x86_64-linux-gnu.current_version +++ b/third_party/rake-compiler-dock/rake_x86_64-linux-gnu.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-linux-gnu:02508a83bb899323c340597caade247046bec728@sha256:3687dc591d8b92d3e0c3066d1e93b1e82ced3f5f0d92b5859eb9bca283dcf4bf \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-linux-gnu:ec51eb4d1aa9479042438270adc1de14111ce1d1@sha256:b2b12feff4dd05afd57de30d995316a3080d48e58b26e0dbfbebc5c3dcd14014 \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_x86_64-linux-gnu/Dockerfile b/third_party/rake-compiler-dock/rake_x86_64-linux-gnu/Dockerfile index 8ff638754155c..2f283b2c903ce 100644 --- a/third_party/rake-compiler-dock/rake_x86_64-linux-gnu/Dockerfile +++ b/third_party/rake-compiler-dock/rake_x86_64-linux-gnu/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-x86_64-linux-gnu +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-x86_64-linux-gnu #================= # Install ccache diff --git a/third_party/rake-compiler-dock/rake_x86_64-linux-musl.current_version b/third_party/rake-compiler-dock/rake_x86_64-linux-musl.current_version index a402acb2421db..796e454482ef6 100644 --- a/third_party/rake-compiler-dock/rake_x86_64-linux-musl.current_version +++ b/third_party/rake-compiler-dock/rake_x86_64-linux-musl.current_version @@ -1 +1 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-linux-musl:616153c6dd69073762ad6a2022aab3f47d91a648@sha256:435aa8daea38c6608e533c1c7b202fe35d4327e5293ed840f644cfb21b2e61ed \ No newline at end of file +us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-linux-musl:166dd283bac2323e5757f30eea6d4d86df404cc9@sha256:22bdfac59e753047aa17d4ef7b4ca720df75f66cab0248f92b2044be5b9b4c97 \ No newline at end of file diff --git a/third_party/rake-compiler-dock/rake_x86_64-linux-musl/Dockerfile b/third_party/rake-compiler-dock/rake_x86_64-linux-musl/Dockerfile index 6f2d0e2dc20bb..ead7c0bed87ce 100644 --- a/third_party/rake-compiler-dock/rake_x86_64-linux-musl/Dockerfile +++ b/third_party/rake-compiler-dock/rake_x86_64-linux-musl/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.9.1-mri-x86_64-linux-musl +FROM ghcr.io/rake-compiler/rake-compiler-dock-image:1.11.1-mri-x86_64-linux-musl #================= # Install ccache diff --git a/tools/bazelify_tests/dockerimage_current_versions.bzl b/tools/bazelify_tests/dockerimage_current_versions.bzl index af242b168b74a..733b7d50dc92c 100644 --- a/tools/bazelify_tests/dockerimage_current_versions.bzl +++ b/tools/bazelify_tests/dockerimage_current_versions.bzl @@ -19,16 +19,16 @@ accessible to bazel builds. """ DOCKERIMAGE_CURRENT_VERSIONS = { - "third_party/rake-compiler-dock/rake_aarch64-linux-gnu.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_aarch64-linux-gnu@sha256:9d81abde3a25e720bfb28c978df8eb793adaa3bb4e145d507967d72fc6510c71", - "third_party/rake-compiler-dock/rake_aarch64-linux-musl.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_aarch64-linux-musl@sha256:c01823e4e1323fe7a32547292a448f32ec5b90c286775a8c063dcefee8503d31", - "third_party/rake-compiler-dock/rake_arm64-darwin.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_arm64-darwin@sha256:28a88cb72472608f716aa60e7f1f22182c60809cc4e96c035c0e38e708e4e9be", - "third_party/rake-compiler-dock/rake_x64-mingw-ucrt.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x64-mingw-ucrt@sha256:d6d34c393a66a3b36bb62364b149bd6e84f342258b586bfd0301972d9bdda34c", - "third_party/rake-compiler-dock/rake_x86-linux-gnu.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-linux-gnu@sha256:3c39ea31f79c07c78aa691d859ffd1b72496835a95db7c1b8ce8c8028c6e5418", - "third_party/rake-compiler-dock/rake_x86-linux-musl.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-linux-musl@sha256:3f67eac1e1da927bfe066fe2558389da49bf02b497192ebd061d53b15e9484ac", - "third_party/rake-compiler-dock/rake_x86-mingw32.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-mingw32@sha256:2be5e0decccc23f8b7ac1b2d5edd21ea814868dcfe08b955749167fd22f99a20", - "third_party/rake-compiler-dock/rake_x86_64-darwin.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-darwin@sha256:e01c02a18130b9669da57bb28b3f6c30458511e20eae5821b3899a41e09f394a", - "third_party/rake-compiler-dock/rake_x86_64-linux-gnu.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-linux-gnu@sha256:3687dc591d8b92d3e0c3066d1e93b1e82ced3f5f0d92b5859eb9bca283dcf4bf", - "third_party/rake-compiler-dock/rake_x86_64-linux-musl.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-linux-musl@sha256:435aa8daea38c6608e533c1c7b202fe35d4327e5293ed840f644cfb21b2e61ed", + "third_party/rake-compiler-dock/rake_aarch64-linux-gnu.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_aarch64-linux-gnu@sha256:630e8ee14181ad896a67bfba59168781a4081707762ad3b22fd424b0599a1099", + "third_party/rake-compiler-dock/rake_aarch64-linux-musl.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_aarch64-linux-musl@sha256:a35685d4087732d3deecdc0f3214598deef6a8c94a44e15ed8b39851e6bd5241", + "third_party/rake-compiler-dock/rake_arm64-darwin.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_arm64-darwin@sha256:cf957c32dd8817d45d3ebb02e4b3c66fcbe4c38db812d2cdbba2d2cd642241a5", + "third_party/rake-compiler-dock/rake_x64-mingw-ucrt.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x64-mingw-ucrt@sha256:307bb7983dc3acebd1a7dde7433955d67863b675f6240d7f7729003d55765061", + "third_party/rake-compiler-dock/rake_x86-linux-gnu.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-linux-gnu@sha256:42a74d7b9413a217a5ac94dd42c6b9e8748df9901a445c5fce677c9d513f2add", + "third_party/rake-compiler-dock/rake_x86-linux-musl.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-linux-musl@sha256:c9f5d24cd75e1eb2d0f159c7a51dec05b7c13f07fa9a0b26618d842e9c6a01e1", + "third_party/rake-compiler-dock/rake_x86-mingw32.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86-mingw32@sha256:fa427e2ed1b3997f88b2cf04685f4311aa8eedd31457405fdd9ac1efa285f539", + "third_party/rake-compiler-dock/rake_x86_64-darwin.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-darwin@sha256:cbfa7625b6656941765827324141e6a06c3c3c30d2a15ff8d466e1f1bd2bde77", + "third_party/rake-compiler-dock/rake_x86_64-linux-gnu.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-linux-gnu@sha256:b2b12feff4dd05afd57de30d995316a3080d48e58b26e0dbfbebc5c3dcd14014", + "third_party/rake-compiler-dock/rake_x86_64-linux-musl.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/rake_x86_64-linux-musl@sha256:22bdfac59e753047aa17d4ef7b4ca720df75f66cab0248f92b2044be5b9b4c97", "tools/dockerfile/distribtest/cpp_debian11_aarch64_cross_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/cpp_debian11_aarch64_cross_x64@sha256:5de93f45dee2263d45f8934a17bf820847145f69c49338fb491a9690cf346994", "tools/dockerfile/distribtest/cpp_debian11_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/cpp_debian11_x64@sha256:5cf417d8fc575685922959292b3eae91844c2480040b0c605485eae009eb67db", "tools/dockerfile/distribtest/csharp_alpine_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/csharp_alpine_x64@sha256:17d9f984e34b978114e5835224f7ad9c9ac59b2a101787efb0f4d265efd592e0", @@ -58,10 +58,12 @@ DOCKERIMAGE_CURRENT_VERSIONS = { "tools/dockerfile/distribtest/ruby_alpine_x64_ruby_3_2.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_alpine_x64_ruby_3_2@sha256:31e84462d53243bb93a1453e0873ee620832463f88867847249eff32d7a8bba5", "tools/dockerfile/distribtest/ruby_alpine_x64_ruby_3_3.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_alpine_x64_ruby_3_3@sha256:0e0c8c849ada2ad9e078a81d5ce2c054134a519fc4e01ff009922d378ed5e90f", "tools/dockerfile/distribtest/ruby_alpine_x64_ruby_3_4.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_alpine_x64_ruby_3_4@sha256:76206c4329f67c354ecdcfed4b785c9d1dd420fd32b2170d4f93dd7e076701fc", + "tools/dockerfile/distribtest/ruby_alpine_x64_ruby_4_0.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_alpine_x64_ruby_4_0@sha256:3dfd1e17dd42774c952096125a5f4bcaac97eed683249f8cdaef286825f0cf24", "tools/dockerfile/distribtest/ruby_debian11_x64_ruby_3_1.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_debian11_x64_ruby_3_1@sha256:11347339e57c04866585511dd2de87df483179395869b4754a09724a54c1c77e", "tools/dockerfile/distribtest/ruby_debian11_x64_ruby_3_2.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_debian11_x64_ruby_3_2@sha256:c4eb679928e92f660fc8e8ebfd8c76a5d6b6f22e5b6e875c52fa42b166ab5c55", "tools/dockerfile/distribtest/ruby_debian11_x64_ruby_3_3.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_debian11_x64_ruby_3_3@sha256:7def7f623814dd9439ccb33ff0400bae9763bee7b9334c6542884ff240070c83", "tools/dockerfile/distribtest/ruby_debian11_x64_ruby_3_4.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_debian11_x64_ruby_3_4@sha256:208fadc38e1e279fae7e338841ce147088150d0f141d2961f5527bd6ea09b711", + "tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_debian11_x64_ruby_4_0@sha256:18326234ff9a764be69dbe752928dfd383e60899567c4b3c9236d5059cf5af45", "tools/dockerfile/distribtest/ruby_ubuntu2204_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_ubuntu2204_x64@sha256:7970ff2b6cc22816248e0b2b44ae7e90c5a0f5a830b79ec1a56093df3ee8e235", "tools/dockerfile/distribtest/ruby_ubuntu2404_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_ubuntu2404_x64@sha256:f777c0c37fe3947346bc72e267aa28c168001af96b5f0b46cf347df3ce09f17d", "tools/dockerfile/grpc_artifact_manylinux2014_aarch64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/grpc_artifact_manylinux2014_aarch64@sha256:9d6f150da39d1b16269d601010876d3f8a2138121db289abad40fdaf7fad287b", diff --git a/tools/dockerfile/distribtest/ruby_alpine_x64_ruby_4_0.current_version b/tools/dockerfile/distribtest/ruby_alpine_x64_ruby_4_0.current_version new file mode 100644 index 0000000000000..7d2e3614a6fe5 --- /dev/null +++ b/tools/dockerfile/distribtest/ruby_alpine_x64_ruby_4_0.current_version @@ -0,0 +1 @@ +us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_alpine_x64_ruby_4_0:62bbe716c91993731ee4ea174a983d93f00f070d@sha256:3dfd1e17dd42774c952096125a5f4bcaac97eed683249f8cdaef286825f0cf24 \ No newline at end of file diff --git a/tools/dockerfile/distribtest/ruby_alpine_x64_ruby_4_0/Dockerfile b/tools/dockerfile/distribtest/ruby_alpine_x64_ruby_4_0/Dockerfile new file mode 100644 index 0000000000000..5830d6ca6e302 --- /dev/null +++ b/tools/dockerfile/distribtest/ruby_alpine_x64_ruby_4_0/Dockerfile @@ -0,0 +1,22 @@ +# Copyright 2020 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. + +FROM ruby:4.0-alpine + +# Our test infrastructure demands bash +RUN apk update && apk add bash build-base + +# TODO: Add test for x86 musl platform +# FROM --platform=linux/386 ruby:3.4-alpine + diff --git a/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0.current_version b/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0.current_version new file mode 100644 index 0000000000000..c8515c238a373 --- /dev/null +++ b/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0.current_version @@ -0,0 +1 @@ +us-docker.pkg.dev/grpc-testing/testing-images-public/ruby_debian11_x64_ruby_4_0:095c8af38464befe0f0256d4f9ea15963dbc78ae@sha256:18326234ff9a764be69dbe752928dfd383e60899567c4b3c9236d5059cf5af45 \ No newline at end of file diff --git a/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0/Dockerfile b/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0/Dockerfile new file mode 100644 index 0000000000000..229c51514c8fd --- /dev/null +++ b/tools/dockerfile/distribtest/ruby_debian11_x64_ruby_4_0/Dockerfile @@ -0,0 +1,87 @@ +# Copyright 2024 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. + +FROM debian:11 + +#================= +# Basic C core dependencies + +# C/C++ dependencies according to https://github.com/grpc/grpc/blob/master/BUILDING.md +RUN apt-get update && apt-get install -y \ + build-essential \ + autoconf \ + libtool \ + pkg-config \ + && apt-get clean + +# GCC +RUN apt-get update && apt-get install -y \ + gcc \ + g++ \ + && apt-get clean + +# libc6 +RUN apt-get update && apt-get install -y \ + libc6 \ + libc6-dbg \ + libc6-dev \ + && apt-get clean + +# Tools +RUN apt-get update && apt-get install -y \ + bzip2 \ + curl \ + dnsutils \ + git \ + lcov \ + make \ + strace \ + time \ + unzip \ + wget \ + zip \ + && apt-get clean + +#================= +# Setup git to access working directory across docker boundary. +# This avoids the "fatal: detected dubious ownership in repository XYZ" +# git error. + +RUN git config --global --add safe.directory '*' +RUN git config --global protocol.file.allow always + + +#================== +# Ruby dependencies + +# Install rvm +RUN apt-get update && apt-get install -y gnupg2 && apt-get clean +RUN gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB +RUN \curl -sSL https://get.rvm.io | bash -s stable + +# Install Ruby 4.0 +RUN apt-get update && apt-get install -y procps && apt-get clean +RUN /bin/bash -l -c "rvm install ruby-4.0.1" +RUN /bin/bash -l -c "rvm use --default ruby-4.0.1" +RUN /bin/bash -l -c "echo 'gem: --no-document' > ~/.gemrc" +RUN /bin/bash -l -c "echo 'export PATH=/usr/local/rvm/bin:$PATH' >> ~/.bashrc" +RUN /bin/bash -l -c "echo 'rvm --default use ruby-4.0.1' >> ~/.bashrc" + +# Workaround for rvm unable to find mkdir properly +# https://stackoverflow.com/questions/64653051 +RUN ln -s /bin/mkdir /usr/bin/mkdir + + +# Define the default command. +CMD ["bash"] diff --git a/tools/internal_ci/helper_scripts/prepare_build_linux_ruby_artifact_rc b/tools/internal_ci/helper_scripts/prepare_build_linux_ruby_artifact_rc index 1423dbc9b89d5..3503efa7c889e 100644 --- a/tools/internal_ci/helper_scripts/prepare_build_linux_ruby_artifact_rc +++ b/tools/internal_ci/helper_scripts/prepare_build_linux_ruby_artifact_rc @@ -28,7 +28,7 @@ set +ex # but we want to exit if there's a failure set -e -RUBY_VERSION=3.4.1 +RUBY_VERSION=4.0.1 echo "Installing ruby-${RUBY_VERSION}" time rvm install "ruby-${RUBY_VERSION}" echo "Setting default ruby version." @@ -40,8 +40,5 @@ set -ex # print current ruby version to log ruby --version -# Bundler is required for grpc ruby artifact build. -gem install bundler -v 2.6 - # log gem versions for easier debugging if things go wrong gem list || true diff --git a/tools/run_tests/artifacts/distribtest_targets.py b/tools/run_tests/artifacts/distribtest_targets.py index 2e67d8a775b54..49f79988674a2 100644 --- a/tools/run_tests/artifacts/distribtest_targets.py +++ b/tools/run_tests/artifacts/distribtest_targets.py @@ -528,6 +528,13 @@ def targets(): ruby_version="ruby_3_4", presubmit=True, ), + RubyDistribTest( + "linux-gnu", + "x64", + "debian11", + ruby_version="ruby_4_0", + presubmit=True, + ), RubyDistribTest("linux-gnu", "x64", "ubuntu2204", presubmit=True), RubyDistribTest("linux-gnu", "x64", "ubuntu2404", presubmit=True), RubyDistribTest( @@ -558,6 +565,13 @@ def targets(): ruby_version="ruby_3_4", presubmit=True, ), + RubyDistribTest( + "linux-musl", + "x64", + "alpine", + ruby_version="ruby_4_0", + presubmit=True, + ), # PHP8 PHP8DistribTest("linux", "x64", "debian12", presubmit=True), PHP8DistribTest("macos", "x64", presubmit=True), From 8fe8bbadb33193c23f3a9850d7d61900aa232672 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 3 Feb 2026 22:32:29 -0800 Subject: [PATCH 65/67] Refactor telemetry labels to use interned indices. This change introduces `InstrumentLabel` to represent telemetry labels as small integer indices, backed by a global string interning table. `InstrumentLabelSet` uses a `BitSet` for efficient storage and operations on sets of labels. This improves performance by reducing string comparisons and hash table lookups in label-related operations within the telemetry system. PiperOrigin-RevId: 865221135 --- src/core/BUILD | 1 + src/core/lib/event_engine/tcp_telemetry.h | 6 +- src/core/lib/resource_quota/telemetry.h | 2 +- src/core/telemetry/instrument.cc | 151 ++++-- src/core/telemetry/instrument.h | 299 ++++++++--- src/core/util/bitset.h | 6 + src/cpp/ext/otel/otel_plugin.cc | 52 +- src/cpp/ext/otel/otel_plugin.h | 1 - test/core/telemetry/bm_instrument.cc | 4 +- test/core/telemetry/instrument_test.cc | 585 +++++++++++++++------ test/core/util/bitset_test.cc | 14 + test/cpp/ext/otel/otel_npc_metrics_test.cc | 74 +-- 12 files changed, 872 insertions(+), 323 deletions(-) diff --git a/src/core/BUILD b/src/core/BUILD index c90e25814fd72..a47d41da61cfb 100644 --- a/src/core/BUILD +++ b/src/core/BUILD @@ -10634,6 +10634,7 @@ grpc_cc_library( ], deps = [ "avl", + "bitset", "channelz_property_list", "dual_ref_counted", "grpc_check", diff --git a/src/core/lib/event_engine/tcp_telemetry.h b/src/core/lib/event_engine/tcp_telemetry.h index f57d8d4241fed..b439c68788f00 100644 --- a/src/core/lib/event_engine/tcp_telemetry.h +++ b/src/core/lib/event_engine/tcp_telemetry.h @@ -26,9 +26,9 @@ class TcpTelemetryDomain final : public InstrumentDomain { public: using Backend = HighContentionBackend; static constexpr absl::string_view kName = "tcp_connection_metrics"; - static constexpr auto kLabels = Labels( - "network.local.address", "network.local.port", "network.remote.address", - "network.remote.port", "is_control_endpoint"); + GRPC_INSTRUMENT_DOMAIN_LABELS("network.local.address", "network.local.port", + "network.remote.address", "network.remote.port", + "is_control_endpoint"); static inline const auto kMinRtt = RegisterHistogram( diff --git a/src/core/lib/resource_quota/telemetry.h b/src/core/lib/resource_quota/telemetry.h index 87e842227ca57..058471e3c9536 100644 --- a/src/core/lib/resource_quota/telemetry.h +++ b/src/core/lib/resource_quota/telemetry.h @@ -21,9 +21,9 @@ namespace grpc_core { class ResourceQuotaDomain final : public InstrumentDomain { public: + GRPC_INSTRUMENT_DOMAIN_LABELS("grpc.resource_quota"); using Backend = HighContentionBackend; static constexpr absl::string_view kName = "resource_quota"; - static constexpr auto kLabels = Labels("grpc.resource_quota"); static inline const auto kCallsDropped = RegisterCounter( "grpc.resource_quota.calls_dropped", diff --git a/src/core/telemetry/instrument.cc b/src/core/telemetry/instrument.cc index a1c4943f2a90a..64f019ea67b7b 100644 --- a/src/core/telemetry/instrument.cc +++ b/src/core/telemetry/instrument.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -30,6 +31,7 @@ #include "src/core/channelz/channelz.h" #include "src/core/channelz/property_list.h" #include "src/core/telemetry/histogram.h" +#include "src/core/util/bitset.h" #include "src/core/util/grpc_check.h" #include "src/core/util/match.h" #include "src/core/util/ref_counted_ptr.h" @@ -45,9 +47,71 @@ #include "absl/strings/str_join.h" #include "absl/strings/string_view.h" #include "absl/types/span.h" - namespace grpc_core { +std::atomic* InstrumentLabel::GetLabels() { + static std::atomic* static_labels = new std::atomic< + const std::string*>[InstrumentLabel::kMaxLabelsPerProcess] {}; + return static_labels; +} + +std::string InstrumentLabel::RegistrationDebugString() { + return absl::StrJoin( + absl::MakeSpan(GetLabels(), kMaxLabelsPerProcess), ", ", + [](std::string* s, const std::atomic& p) { + auto* loaded_p = p.load(std::memory_order_acquire); + if (loaded_p == nullptr) { + s->append(""); + } else { + s->append(*loaded_p); + } + }); +} + +InstrumentLabel::InstrumentLabel(absl::string_view label) { + auto* labels = GetLabels(); + std::unique_ptr label_copy; + for (size_t i = 0; i < InstrumentLabel::kMaxLabelsPerProcess; ++i) { + auto* current_value = labels[i].load(std::memory_order_acquire); + while (current_value == nullptr) { + if (label_copy == nullptr) { + label_copy.reset(new std::string(label)); + } + if (!labels[i].compare_exchange_weak(current_value, label_copy.get(), + std::memory_order_acq_rel)) { + continue; + } + label_copy.release(); + index_ = i; + return; + } + GRPC_CHECK(current_value != nullptr); + if (*current_value == label) { + index_ = i; + return; + } + } + GRPC_CHECK(false) << "Too many instrument labels registered"; +} + +InstrumentLabelList InstrumentLabelSet::ToList() const { + InstrumentLabelList list; + for (size_t i = 0; i < InstrumentLabel::kMaxLabelsPerProcess; ++i) { + if (set_.is_set(i)) list.Append(InstrumentLabel::FromIndex(i)); + } + return list; +} + +std::string InstrumentLabelList::DebugString() const { + return absl::StrJoin(absl::MakeSpan(labels_, count_), ", ", + [](std::string* s, const InstrumentLabel& label) { + s->append(label.label()); + s->append("[idx="); + s->append(std::to_string(label.index())); + s->append("]"); + }); +} + namespace { struct Hook { HistogramCollectionHook hook; @@ -81,12 +145,14 @@ void CallHistogramCollectionHooks( namespace { std::vector FilterLabels( - absl::Span domain_label_names, - const absl::flat_hash_set& scope_labels_of_interest, + InstrumentLabelList domain_label_names, + InstrumentLabelSet scope_labels_of_interest, absl::Span full_label_values) { std::vector result; result.reserve(domain_label_names.size()); for (size_t i = 0; i < domain_label_names.size(); ++i) { + VLOG(1) << "Checking label " << domain_label_names[i].label() << " index " + << (int)domain_label_names[i].index() << " in scope labels"; if (scope_labels_of_interest.contains(domain_label_names[i])) { result.push_back(full_label_values[i]); } else { @@ -99,10 +165,10 @@ std::vector FilterLabels( CollectionScope::CollectionScope( std::vector> parents, - absl::Span labels, size_t child_shards_count, + InstrumentLabelSet labels_of_interest, size_t child_shards_count, size_t storage_shards_count) : parents_(std::move(parents)), - labels_of_interest_(labels.begin(), labels.end()), + labels_of_interest_(labels_of_interest), child_shards_(child_shards_count), storage_shards_(storage_shards_count) { // Sort parents (by address) and then remove any duplicates. @@ -110,11 +176,12 @@ CollectionScope::CollectionScope( parents_.erase(std::unique(parents_.begin(), parents_.end()), parents_.end()); for (const auto& parent : parents_) { if (parent != nullptr) { - labels_of_interest_.insert(parent->labels_of_interest_.begin(), - parent->labels_of_interest_.end()); + labels_of_interest_.Merge(parent->labels_of_interest_); auto& shard = parent->child_shard(this); MutexLock lock(&shard.mu); shard.children.insert(this); + VLOG(1) << "Registered child scope " << this << " with parent " + << parent.get(); } } } @@ -173,6 +240,7 @@ void CollectionScope::ForEachUniqueStorage( for (auto& shard : child_shards_) { MutexLock lock(&shard.mu); for (auto* child : shard.children) { + VLOG(1) << "Visiting child scope " << child << " from parent " << this; child->ForEachUniqueStorage(cb, visited); } } @@ -191,7 +259,7 @@ void CollectionScope::TestOnlyReset() { RefCountedPtr CreateCollectionScope( std::vector> parents, - absl::Span labels, size_t child_shards_count, + InstrumentLabelSet labels, size_t child_shards_count, size_t storage_shards_count) { return MakeRefCounted( std::move(parents), labels, child_shards_count, storage_shards_count); @@ -227,9 +295,9 @@ MetricsQuery& MetricsQuery::WithLabelEq(absl::string_view label, } MetricsQuery& MetricsQuery::CollapseLabels( - absl::Span labels) { + absl::Span labels) { for (const auto& label : labels) { - collapsed_labels_.insert(label); + collapsed_labels_.Set(label); } return *this; } @@ -336,7 +404,7 @@ void MetricsQuery::Run(RefCountedPtr scope, } } -void MetricsQuery::Apply(absl::Span label_names, +void MetricsQuery::Apply(InstrumentLabelList label_names, absl::FunctionRef fn, MetricsSink& sink) const { if (collapsed_labels_.empty()) { @@ -344,11 +412,11 @@ void MetricsQuery::Apply(absl::Span label_names, return; } std::vector include_labels; - std::vector label_keys; + InstrumentLabelList label_keys; for (size_t i = 0; i < label_names.size(); ++i) { if (!collapsed_labels_.contains(label_names[i])) { include_labels.push_back(i); - label_keys.push_back(label_names[i]); + label_keys.Append(label_names[i]); } } if (include_labels.size() == label_names.size()) { @@ -358,22 +426,22 @@ void MetricsQuery::Apply(absl::Span label_names, class Filter final : public MetricsSink { public: explicit Filter(absl::Span include_labels, - absl::Span label_keys) + InstrumentLabelList label_keys) : include_labels_(include_labels), label_keys_(label_keys) {} - void Counter(absl::Span /* label_keys */, + void Counter(InstrumentLabelList /* label_keys */, absl::Span label_values, absl::string_view name, uint64_t value) override { uint64_counters_[ConstructKey(label_values, name)] += value; } - void UpDownCounter(absl::Span /* label_keys */, + void UpDownCounter(InstrumentLabelList /* label_keys */, absl::Span label_values, absl::string_view name, uint64_t value) override { uint64_up_down_counters_[ConstructKey(label_values, name)] += value; } - void Histogram(absl::Span /* label_keys */, + void Histogram(InstrumentLabelList /* label_keys */, absl::Span label_values, absl::string_view name, HistogramBuckets bounds, absl::Span counts) override { @@ -395,17 +463,17 @@ void MetricsQuery::Apply(absl::Span label_names, } } - void DoubleGauge(absl::Span /* label_keys */, + void DoubleGauge(InstrumentLabelList /* label_keys */, absl::Span, absl::string_view, double) override { // Not aggregatable } - void IntGauge(absl::Span /* label_keys */, + void IntGauge(InstrumentLabelList /* label_keys */, absl::Span, absl::string_view, int64_t) override { // Not aggregatable } - void UintGauge(absl::Span /* label_keys */, + void UintGauge(InstrumentLabelList /* label_keys */, absl::Span, absl::string_view, uint64_t) override { // Not aggregatable @@ -438,7 +506,7 @@ void MetricsQuery::Apply(absl::Span label_names, } absl::Span include_labels_; - absl::Span label_keys_; + InstrumentLabelList label_keys_; absl::flat_hash_map, absl::string_view>, uint64_t> uint64_counters_; @@ -460,7 +528,7 @@ void MetricsQuery::Apply(absl::Span label_names, filter.Publish(sink); } -void MetricsQuery::ApplyLabelChecks(absl::Span label_names, +void MetricsQuery::ApplyLabelChecks(InstrumentLabelList label_names, absl::FunctionRef fn, MetricsSink& sink) const { if (label_eqs_.empty()) { @@ -486,21 +554,21 @@ void MetricsQuery::ApplyLabelChecks(absl::Span label_names, absl::Span inclusion_checks) : inclusion_checks_(inclusion_checks), sink_(sink) {} - void Counter(absl::Span label_keys, + void Counter(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, uint64_t value) override { if (!Matches(label_values)) return; sink_.Counter(label_keys, label_values, name, value); } - void UpDownCounter(absl::Span label_keys, + void UpDownCounter(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, uint64_t value) override { if (!Matches(label_values)) return; sink_.UpDownCounter(label_keys, label_values, name, value); } - void Histogram(absl::Span label_keys, + void Histogram(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, HistogramBuckets bounds, absl::Span counts) override { @@ -508,19 +576,19 @@ void MetricsQuery::ApplyLabelChecks(absl::Span label_names, sink_.Histogram(label_keys, label_values, name, bounds, counts); } - void DoubleGauge(absl::Span label_keys, + void DoubleGauge(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, double value) override { if (!Matches(label_values)) return; sink_.DoubleGauge(label_keys, label_values, name, value); } - void IntGauge(absl::Span label_keys, + void IntGauge(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, int64_t value) override { if (!Matches(label_values)) return; sink_.IntGauge(label_keys, label_values, name, value); } - void UintGauge(absl::Span label_keys, + void UintGauge(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, uint64_t value) override { if (!Matches(label_values)) return; @@ -599,7 +667,7 @@ void DomainStorage::AddData(channelz::DataSink sink) { channelz::PropertyGrid grid; for (size_t i = 0; i < label_.size(); ++i) { grid.SetRow( - domain_->label_names()[i], + domain_->label_names()[i].label(), channelz::PropertyList().Set("value", label_[i])); } return grid; @@ -828,9 +896,12 @@ RefCountedPtr QueryableDomain::GetDomainStorage( auto parent_key_labels = FilterLabels( label_names_, scope->parents_[0]->labels_of_interest_, label_values); if (key_labels == parent_key_labels) { + VLOG(1) << "Redirecting storage creation to parent scope for " << this; return GetDomainStorage(scope->parents_[0], label_values); } } + VLOG(1) << "Creating storage in scope " << scope.get() << " for " << this + << " with labels " << absl::StrJoin(key_labels, ", "); size_t shard_idx = absl::HashOf(key_labels) % scope->storage_shards_.size(); auto& shard = scope->storage_shards_[shard_idx]; MutexLock lock(&shard.mu); @@ -893,9 +964,9 @@ class GlobalCollectionScopeManager { return *manager; } - RefCountedPtr CreateRootScope( - absl::Span labels, size_t child_shards_count, - size_t storage_shards_count) { + RefCountedPtr CreateRootScope(InstrumentLabelSet labels, + size_t child_shards_count, + size_t storage_shards_count) { MutexLock lock(&mu_); if (auto* building = std::get_if(&state_); building != nullptr) { auto scope = CreateCollectionScope({}, labels, child_shards_count, @@ -905,15 +976,15 @@ class GlobalCollectionScopeManager { } else { // Global scope is already created, we can no longer subset labels. auto& published = std::get(state_); - std::vector missing_labels; - for (const auto& label : labels) { + std::vector missing_labels; + for (const auto& label : labels.ToList()) { if (!published.global_scope->ObservesLabel(label)) { - missing_labels.push_back(label); + missing_labels.push_back(label.label()); } } if (missing_labels.empty()) { LOG(ERROR) << "Attempt to create a root scope with labels [" - << absl::StrJoin(labels, ", ") + << absl::StrJoin(labels.ToList(), ", ") << "] after the global scope was already created. " "All requested labels are collected by the global scope, " "so this scope will be returned instead. " @@ -922,7 +993,7 @@ class GlobalCollectionScopeManager { "to GlobalCollectionScope()."; } else { LOG(ERROR) << "Attempt to create a root scope with labels [" - << absl::StrJoin(labels, ", ") + << absl::StrJoin(labels.ToList(), ", ") << "] after the global scope was already created. " "The following labels are not collected by the global " "scope, and so will not be available: [" @@ -939,8 +1010,8 @@ class GlobalCollectionScopeManager { RefCountedPtr GetGlobalScope() { MutexLock lock(&mu_); if (auto* building = std::get_if(&state_); building != nullptr) { - auto global_scope = - CreateCollectionScope(building->root_scopes, {}, 32, 32); + auto global_scope = CreateCollectionScope(building->root_scopes, + InstrumentLabelSet(), 32, 32); state_ = Published{global_scope}; return global_scope; } else { @@ -974,7 +1045,7 @@ class GlobalCollectionScopeManager { }; RefCountedPtr CreateRootCollectionScope( - absl::Span labels, size_t child_shards_count, + InstrumentLabelSet labels, size_t child_shards_count, size_t storage_shards_count) { return GlobalCollectionScopeManager::Get().CreateRootScope( labels, child_shards_count, storage_shards_count); diff --git a/src/core/telemetry/instrument.h b/src/core/telemetry/instrument.h index 0a6cc94e1ac1c..d3720c1c3a82f 100644 --- a/src/core/telemetry/instrument.h +++ b/src/core/telemetry/instrument.h @@ -91,9 +91,10 @@ // // 1. `using Backend = ...;`: Specifies the backend type (e.g., // `LowContentionBackend`, `HighContentionBackend`). -// 2. `static constexpr auto kLabels = std::tuple(...);`: Defines the names -// of the labels for this domain. The types of the labels are inferred -// from the arguments passed to `GetStorage()`. +// 2. `GRPC_INSTRUMENT_DOMAIN_LABELS("label1", "label2", ...);`: Defines the +// names of the labels for this domain via a macro that generates a +// static `Labels()` method. The types of the labels are inferred from +// the arguments passed to `GetStorage()`. // // Instruments are registered as static members within the domain class using // the `Register*` methods. @@ -102,7 +103,7 @@ // class MyDomain : public InstrumentDomain { // public: // using Backend = LowContentionBackend; -// static constexpr auto kLabels = std::tuple("my_label", "another_label"); +// GRPC_INSTRUMENT_DOMAIN_LABELS("my_label", "another_label"); // // // Register a counter: // static inline const auto kMyCounter = RegisterCounter( @@ -179,6 +180,7 @@ #include #include #include +#include #include #include #include @@ -191,6 +193,7 @@ #include "src/core/channelz/channelz.h" #include "src/core/telemetry/histogram.h" #include "src/core/util/avl.h" +#include "src/core/util/bitset.h" #include "src/core/util/dual_ref_counted.h" #include "src/core/util/grpc_check.h" #include "src/core/util/per_cpu.h" @@ -222,6 +225,165 @@ class QueryableDomain; class DomainStorage; } // namespace instrument_detail +class InstrumentLabel { + public: + static constexpr size_t kMaxLabelsPerProcess = 63; + static constexpr size_t kMaxLabelsPerDomain = 15; + + InstrumentLabel() : index_(kSentinelIndex) {} + explicit InstrumentLabel(absl::string_view label); + InstrumentLabel(const char* label) + : InstrumentLabel(absl::string_view(label)) {} + + static InstrumentLabel FromIndex(uint8_t index) { + InstrumentLabel label; + label.index_ = index; + return label; + } + + uint8_t index() const { return index_; } + absl::string_view label() const { + CHECK_NE(index_, kSentinelIndex); + std::atomic* labels = GetLabels(); + const std::string* label = labels[index_].load(std::memory_order_acquire); + CHECK_NE(label, nullptr) + << "Label index " << static_cast(index_) << " is out of range"; + return *label; + } + + template + friend void AbslStringify(Sink& sink, InstrumentLabel label) { + sink.Append(label.label()); + } + + template + friend H AbslHashValue(H h, InstrumentLabel label) { + return H::combine(std::move(h), label.index_); + } + + friend bool operator==(InstrumentLabel a, InstrumentLabel b) { + return a.index_ == b.index_; + } + + friend bool operator!=(InstrumentLabel a, InstrumentLabel b) { + return a.index_ != b.index_; + } + + friend bool operator<(InstrumentLabel a, InstrumentLabel b) { + return a.index_ < b.index_; + } + + friend bool operator>(InstrumentLabel a, InstrumentLabel b) { + return a.index_ > b.index_; + } + + static std::string RegistrationDebugString(); + static std::atomic* GetLabels(); + + private: + static constexpr uint8_t kSentinelIndex = 255; + uint8_t index_ = kSentinelIndex; +}; + +class InstrumentLabelList; + +class InstrumentLabelSet { + public: + InstrumentLabelSet() = default; + InstrumentLabelSet(std::initializer_list labels) { + for (const auto& label : labels) { + set_.set(InstrumentLabel(label).index()); + } + } + + void Set(InstrumentLabel label) { set_.set(label.index()); } + bool empty() const { return set_.none(); } + bool contains(InstrumentLabel label) const { + return set_.is_set(label.index()); + } + void Merge(InstrumentLabelSet other) { set_.Merge(other.set_); } + InstrumentLabelList ToList() const; + + private: + BitSet set_; +}; + +class InstrumentLabelList { + public: + InstrumentLabelList() = default; + InstrumentLabelList(std::initializer_list labels) { + for (const auto& label : labels) { + Append(InstrumentLabel(label)); + } + } + + void Append(InstrumentLabel label) { + GRPC_DCHECK_LT(count_, InstrumentLabel::kMaxLabelsPerProcess); + labels_[count_++] = label; + } + + bool empty() const { return count_ == 0; } + size_t size() const { return count_; } + + InstrumentLabel operator[](size_t i) const { + DCHECK_LT(i, count_); + return labels_[i]; + } + + InstrumentLabelList Remove(InstrumentLabelSet labels); + + const InstrumentLabel* begin() const { return labels_; } + const InstrumentLabel* end() const { return labels_ + count_; } + + std::string DebugString() const; + + private: + uint8_t count_ = 0; + InstrumentLabel labels_[InstrumentLabel::kMaxLabelsPerProcess]; +}; + +template +class FixedInstrumentLabelList { + public: + template + explicit FixedInstrumentLabelList(Args&&... args) + : labels_{InstrumentLabel(std::forward(args))...} { + static_assert(kNumLabels == sizeof...(args)); + } + + InstrumentLabel operator[](size_t i) const { + CHECK_LT(i, kNumLabels); + return labels_[i]; + } + + static constexpr size_t count() { return kNumLabels; } + + InstrumentLabelList ToList() const { + InstrumentLabelList list; + for (size_t i = 0; i < kNumLabels; ++i) { + list.Append(labels_[i]); + } + return list; + } + + private: + InstrumentLabel labels_[kNumLabels]; +}; + +template <> +class FixedInstrumentLabelList<0> { + public: + explicit FixedInstrumentLabelList() {} + + InstrumentLabel operator[](size_t i) const { + LOG(FATAL) << "Index out of bounds: " << i << " for label list of size 0"; + } + + static constexpr size_t count() { return 0; } + + InstrumentLabelList ToList() const { return InstrumentLabelList(); } +}; + class CollectionScope; class InstrumentMetadata { @@ -278,7 +440,7 @@ void RegisterHistogramCollectionHook(HistogramCollectionHook hook); class CollectionScope : public RefCounted { public: CollectionScope(std::vector> parents, - absl::Span labels, + InstrumentLabelSet labels_of_interest, size_t child_shards_count, size_t storage_shards_count); ~CollectionScope() override; @@ -287,7 +449,7 @@ class CollectionScope : public RefCounted { void ForEachUniqueStorage( absl::FunctionRef cb); - bool ObservesLabel(absl::string_view label) const { + bool ObservesLabel(InstrumentLabel label) const { return labels_of_interest_.contains(label); } @@ -316,7 +478,7 @@ class CollectionScope : public RefCounted { } std::vector> parents_; - absl::flat_hash_set labels_of_interest_; + InstrumentLabelSet labels_of_interest_; std::vector child_shards_; std::vector storage_shards_; @@ -378,6 +540,7 @@ class DomainStorage : public DualRefCounted, virtual uint64_t SumCounter(size_t index) = 0; virtual void Add(DomainStorage* other) = 0; + virtual void FillGaugeStorage(GaugeStorage& gauge_storage) = 0; // Returns the label values of the CollectionScope that owns this storage. // This is the full set of labels published by the domain, with unused labels @@ -385,8 +548,6 @@ class DomainStorage : public DualRefCounted, absl::Span label() const { return label_; } QueryableDomain* domain() const { return domain_; } - virtual void FillGaugeStorage(GaugeStorage& gauge_storage) = 0; - void AddData(channelz::DataSink sink) override; private: @@ -436,7 +597,7 @@ class QueryableDomain { absl::FunctionRef fn); // Returns the names of the labels in the domain. - absl::Span label_names() const { return label_names_; } + InstrumentLabelList label_names() const { return label_names_; } // Reset the internal state of all domains. For test use only. static void TestOnlyResetAll(); @@ -471,7 +632,7 @@ class QueryableDomain { } protected: - QueryableDomain(std::string name, std::vector label_names, + QueryableDomain(std::string name, InstrumentLabelList label_names, size_t map_shards_size) : label_names_(std::move(label_names)), map_shards_size_(label_names_.empty() ? 1 : map_shards_size), @@ -550,7 +711,7 @@ class QueryableDomain { static inline QueryableDomain* last_ = nullptr; QueryableDomain* prev_ = nullptr; - const std::vector label_names_; + const InstrumentLabelList label_names_; std::vector metrics_; uint64_t allocated_counter_slots_ = 0; uint64_t allocated_double_gauge_slots_ = 0; @@ -587,6 +748,7 @@ class InstrumentHandle { absl::string_view name() const { return description_->name; } absl::string_view description() const { return description_->description; } absl::string_view unit() const { return description_->unit; } + uint64_t offset() const { return offset_; } private: friend Domain; @@ -605,12 +767,6 @@ class InstrumentHandle { const InstrumentMetadata::Description* description_ = nullptr; }; -template -using StdString = std::string; - -template -using AbslStringView = absl::string_view; - } // namespace instrument_detail // A domain backend for low contention domains. @@ -670,23 +826,23 @@ class MetricsSink { public: // Called once per label per metric, with the value of that metric for that // label. - virtual void Counter(absl::Span label_keys, + virtual void Counter(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, uint64_t value) = 0; - virtual void UpDownCounter(absl::Span label_keys, + virtual void UpDownCounter(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, uint64_t value) = 0; - virtual void Histogram(absl::Span label_keys, + virtual void Histogram(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, HistogramBuckets bounds, absl::Span counts) = 0; - virtual void DoubleGauge(absl::Span label_keys, + virtual void DoubleGauge(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, double value) = 0; - virtual void IntGauge(absl::Span label_keys, + virtual void IntGauge(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, int64_t value) = 0; - virtual void UintGauge(absl::Span label_keys, + virtual void UintGauge(InstrumentLabelList label_keys, absl::Span label_values, absl::string_view name, uint64_t value) = 0; @@ -707,7 +863,7 @@ class MetricsQuery { MetricsQuery& WithLabelEq(absl::string_view label, std::string value); // Collapse labels, effectively omitting them. Counters are summed over the // remaining dimensions, etc. - MetricsQuery& CollapseLabels(absl::Span labels); + MetricsQuery& CollapseLabels(absl::Span labels); // Only include metrics that are in `metrics`. MetricsQuery& OnlyMetrics(std::vector metrics); @@ -722,16 +878,17 @@ class MetricsQuery { private: // Adapts `sink` by including the filtering requested, and then calls `fn` // with the filtering sink. This is mainly an implementation detail. - void Apply(absl::Span label_names, + void Apply(InstrumentLabelList label_names, absl::FunctionRef fn, MetricsSink& sink) const; - void ApplyLabelChecks(absl::Span label_names, + private: + void ApplyLabelChecks(InstrumentLabelList label_names, absl::FunctionRef fn, MetricsSink& sink) const; - absl::flat_hash_map label_eqs_; + absl::flat_hash_map label_eqs_; std::optional> only_metrics_; - absl::flat_hash_set collapsed_labels_; + InstrumentLabelSet collapsed_labels_; }; namespace instrument_detail { @@ -861,6 +1018,15 @@ class InstrumentDomainImpl final : public QueryableDomain { backend_.Add(handle.offset_ + handle.shape_->BucketFor(value), 1); } + uint64_t SumCounter(size_t offset) override { return backend_.Sum(offset); } + void FillGaugeStorage(GaugeStorage& storage) override { + GaugeSink sink(storage); + MutexLock lock(&gauge_providers_mu_); + for (auto* provider : gauge_providers_) { + provider->PopulateGaugeData(sink); + } + } + private: friend class InstrumentDomainImpl; friend class GaugeProvider; @@ -870,8 +1036,6 @@ class InstrumentDomainImpl final : public QueryableDomain { : DomainStorage(instrument_domain, std::move(labels)), backend_(instrument_domain->allocated_counter_slots()) {} - uint64_t SumCounter(size_t offset) override { return backend_.Sum(offset); } - void RegisterGaugeProvider(GaugeProvider* provider) { MutexLock lock(&gauge_providers_mu_); gauge_providers_.push_back(provider); @@ -884,14 +1048,6 @@ class InstrumentDomainImpl final : public QueryableDomain { gauge_providers_.end()); } - void FillGaugeStorage(GaugeStorage& storage) override { - GaugeSink sink(storage); - MutexLock lock(&gauge_providers_mu_); - for (auto* provider : gauge_providers_) { - provider->PopulateGaugeData(sink); - } - } - Backend backend_; Mutex gauge_providers_mu_; std::vector gauge_providers_ @@ -899,10 +1055,9 @@ class InstrumentDomainImpl final : public QueryableDomain { }; GPR_ATTRIBUTE_NOINLINE explicit InstrumentDomainImpl( - std::string name, std::vector label_names, + std::string name, FixedInstrumentLabelList labels, size_t map_shards = std::min(16u, gpr_cpu_num_cores())) - : QueryableDomain(std::move(name), std::move(label_names), map_shards) { - GRPC_CHECK_EQ(this->label_names().size(), N); + : QueryableDomain(std::move(name), labels.ToList(), map_shards) { Constructed(); } @@ -980,30 +1135,20 @@ class InstrumentDomainImpl final : public QueryableDomain { ~InstrumentDomainImpl() = delete; }; -class MakeLabel { - public: - template - auto operator()(LabelNames... t) { - return std::vector{absl::StrCat(t)...}; - } -}; - -template -GPR_ATTRIBUTE_NOINLINE auto MakeLabelFromTuple( - std::tuple t) noexcept { - return std::apply(MakeLabel(), t); -} } // namespace instrument_detail template class InstrumentDomain { public: static auto* Domain() { - static auto* domain = new instrument_detail::InstrumentDomainImpl< - typename Derived::Backend, - std::tuple_size_v, Derived>( - absl::StrCat(Derived::kName), - instrument_detail::MakeLabelFromTuple(Derived::kLabels)); + static const auto labels = Derived::Labels(); + static auto* domain = + new instrument_detail::InstrumentDomainImpl( + absl::StrCat(Derived::kName), labels); + for (size_t i = 0; i < labels.count(); ++i) { + GRPC_DCHECK_EQ(domain->label_names()[i], labels[i]); + } return domain; } @@ -1017,8 +1162,24 @@ class InstrumentDomain { protected: template - static constexpr auto Labels(Label... labels) { - return std::tuple...>{labels...}; + static const FixedInstrumentLabelList MakeLabels( + Label... labels) { + InstrumentLabel l[] = {InstrumentLabel(labels)...}; + for (size_t i = 0; i < sizeof...(Label); ++i) { + for (size_t j = i + 1; j < sizeof...(Label); ++j) { + GRPC_CHECK_NE(l[i], l[j]); + } + } + auto list = FixedInstrumentLabelList( + std::forward