diff --git a/bazel/experiments.bzl b/bazel/experiments.bzl index 6a3efa76833..a333abd3658 100644 --- a/bazel/experiments.bzl +++ b/bazel/experiments.bzl @@ -34,6 +34,8 @@ EXPERIMENT_ENABLES = { "monitoring_experiment": "monitoring_experiment", "multiping": "multiping", "pick_first_new": "pick_first_new", + "promise_based_http2_client_transport": "promise_based_http2_client_transport", + "promise_based_http2_server_transport": "promise_based_http2_server_transport", "promise_based_inproc_transport": "promise_based_inproc_transport", "rq_fast_reject": "rq_fast_reject", "schedule_cancellation_over_write": "schedule_cancellation_over_write", diff --git a/src/core/lib/experiments/experiments.cc b/src/core/lib/experiments/experiments.cc index 8d8ba347e5c..558f4db0e45 100644 --- a/src/core/lib/experiments/experiments.cc +++ b/src/core/lib/experiments/experiments.cc @@ -86,6 +86,18 @@ const char* const additional_constraints_multiping = "{}"; const char* const description_pick_first_new = "New pick_first impl with memory reduction."; const char* const additional_constraints_pick_first_new = "{}"; +const char* const description_promise_based_http2_client_transport = + "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."; +const char* const additional_constraints_promise_based_http2_client_transport = + "{}"; +const char* const description_promise_based_http2_server_transport = + "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."; +const char* const additional_constraints_promise_based_http2_server_transport = + "{}"; const char* const description_promise_based_inproc_transport = "Use promises for the in-process transport."; const char* const additional_constraints_promise_based_inproc_transport = "{}"; @@ -172,6 +184,14 @@ const ExperimentMetadata g_experiment_metadata[] = { nullptr, 0, false, true}, {"pick_first_new", description_pick_first_new, additional_constraints_pick_first_new, nullptr, 0, true, true}, + {"promise_based_http2_client_transport", + description_promise_based_http2_client_transport, + additional_constraints_promise_based_http2_client_transport, nullptr, 0, + false, true}, + {"promise_based_http2_server_transport", + description_promise_based_http2_server_transport, + additional_constraints_promise_based_http2_server_transport, nullptr, 0, + false, true}, {"promise_based_inproc_transport", description_promise_based_inproc_transport, additional_constraints_promise_based_inproc_transport, nullptr, 0, false, @@ -267,6 +287,18 @@ const char* const additional_constraints_multiping = "{}"; const char* const description_pick_first_new = "New pick_first impl with memory reduction."; const char* const additional_constraints_pick_first_new = "{}"; +const char* const description_promise_based_http2_client_transport = + "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."; +const char* const additional_constraints_promise_based_http2_client_transport = + "{}"; +const char* const description_promise_based_http2_server_transport = + "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."; +const char* const additional_constraints_promise_based_http2_server_transport = + "{}"; const char* const description_promise_based_inproc_transport = "Use promises for the in-process transport."; const char* const additional_constraints_promise_based_inproc_transport = "{}"; @@ -353,6 +385,14 @@ const ExperimentMetadata g_experiment_metadata[] = { nullptr, 0, false, true}, {"pick_first_new", description_pick_first_new, additional_constraints_pick_first_new, nullptr, 0, true, true}, + {"promise_based_http2_client_transport", + description_promise_based_http2_client_transport, + additional_constraints_promise_based_http2_client_transport, nullptr, 0, + false, true}, + {"promise_based_http2_server_transport", + description_promise_based_http2_server_transport, + additional_constraints_promise_based_http2_server_transport, nullptr, 0, + false, true}, {"promise_based_inproc_transport", description_promise_based_inproc_transport, additional_constraints_promise_based_inproc_transport, nullptr, 0, false, @@ -448,6 +488,18 @@ const char* const additional_constraints_multiping = "{}"; const char* const description_pick_first_new = "New pick_first impl with memory reduction."; const char* const additional_constraints_pick_first_new = "{}"; +const char* const description_promise_based_http2_client_transport = + "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."; +const char* const additional_constraints_promise_based_http2_client_transport = + "{}"; +const char* const description_promise_based_http2_server_transport = + "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."; +const char* const additional_constraints_promise_based_http2_server_transport = + "{}"; const char* const description_promise_based_inproc_transport = "Use promises for the in-process transport."; const char* const additional_constraints_promise_based_inproc_transport = "{}"; @@ -534,6 +586,14 @@ const ExperimentMetadata g_experiment_metadata[] = { nullptr, 0, false, true}, {"pick_first_new", description_pick_first_new, additional_constraints_pick_first_new, nullptr, 0, true, true}, + {"promise_based_http2_client_transport", + description_promise_based_http2_client_transport, + additional_constraints_promise_based_http2_client_transport, nullptr, 0, + false, true}, + {"promise_based_http2_server_transport", + description_promise_based_http2_server_transport, + additional_constraints_promise_based_http2_server_transport, nullptr, 0, + false, true}, {"promise_based_inproc_transport", description_promise_based_inproc_transport, additional_constraints_promise_based_inproc_transport, nullptr, 0, false, diff --git a/src/core/lib/experiments/experiments.h b/src/core/lib/experiments/experiments.h index bf5b96bb229..27704348ca5 100644 --- a/src/core/lib/experiments/experiments.h +++ b/src/core/lib/experiments/experiments.h @@ -79,6 +79,8 @@ inline bool IsMonitoringExperimentEnabled() { return true; } inline bool IsMultipingEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_NEW inline bool IsPickFirstNewEnabled() { return true; } +inline bool IsPromiseBasedHttp2ClientTransportEnabled() { return false; } +inline bool IsPromiseBasedHttp2ServerTransportEnabled() { return false; } inline bool IsPromiseBasedInprocTransportEnabled() { return false; } inline bool IsRqFastRejectEnabled() { return false; } inline bool IsScheduleCancellationOverWriteEnabled() { return false; } @@ -119,6 +121,8 @@ inline bool IsMonitoringExperimentEnabled() { return true; } inline bool IsMultipingEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_NEW inline bool IsPickFirstNewEnabled() { return true; } +inline bool IsPromiseBasedHttp2ClientTransportEnabled() { return false; } +inline bool IsPromiseBasedHttp2ServerTransportEnabled() { return false; } inline bool IsPromiseBasedInprocTransportEnabled() { return false; } inline bool IsRqFastRejectEnabled() { return false; } inline bool IsScheduleCancellationOverWriteEnabled() { return false; } @@ -159,6 +163,8 @@ inline bool IsMonitoringExperimentEnabled() { return true; } inline bool IsMultipingEnabled() { return false; } #define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_NEW inline bool IsPickFirstNewEnabled() { return true; } +inline bool IsPromiseBasedHttp2ClientTransportEnabled() { return false; } +inline bool IsPromiseBasedHttp2ServerTransportEnabled() { return false; } inline bool IsPromiseBasedInprocTransportEnabled() { return false; } inline bool IsRqFastRejectEnabled() { return false; } inline bool IsScheduleCancellationOverWriteEnabled() { return false; } @@ -193,6 +199,8 @@ enum ExperimentIds { kExperimentIdMonitoringExperiment, kExperimentIdMultiping, kExperimentIdPickFirstNew, + kExperimentIdPromiseBasedHttp2ClientTransport, + kExperimentIdPromiseBasedHttp2ServerTransport, kExperimentIdPromiseBasedInprocTransport, kExperimentIdRqFastReject, kExperimentIdScheduleCancellationOverWrite, @@ -274,6 +282,14 @@ inline bool IsMultipingEnabled() { inline bool IsPickFirstNewEnabled() { return IsExperimentEnabled(); } +#define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_HTTP2_CLIENT_TRANSPORT +inline bool IsPromiseBasedHttp2ClientTransportEnabled() { + return IsExperimentEnabled(); +} +#define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_HTTP2_SERVER_TRANSPORT +inline bool IsPromiseBasedHttp2ServerTransportEnabled() { + return IsExperimentEnabled(); +} #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_INPROC_TRANSPORT inline bool IsPromiseBasedInprocTransportEnabled() { return IsExperimentEnabled(); diff --git a/src/core/lib/experiments/experiments.yaml b/src/core/lib/experiments/experiments.yaml index f81ed50cf78..4b846399d0f 100644 --- a/src/core/lib/experiments/experiments.yaml +++ b/src/core/lib/experiments/experiments.yaml @@ -141,6 +141,24 @@ expiry: 2025/03/01 owner: roth@google.com test_tags: ["lb_unit_test", "cpp_lb_end2end_test", "xds_end2end_test"] +- name: promise_based_http2_client_transport + description: + 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: 2025/06/03 + owner: tjagtap@google.com + test_tags: [] + allow_in_fuzzing_config: true +- name: promise_based_http2_server_transport + description: + 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: 2025/06/03 + owner: tjagtap@google.com + test_tags: [] + allow_in_fuzzing_config: true - name: promise_based_inproc_transport description: Use promises for the in-process transport. diff --git a/src/core/lib/experiments/rollouts.yaml b/src/core/lib/experiments/rollouts.yaml index 34b6226742b..5b0ecdb1564 100644 --- a/src/core/lib/experiments/rollouts.yaml +++ b/src/core/lib/experiments/rollouts.yaml @@ -94,6 +94,10 @@ ios: broken windows: broken posix: false +- name: promise_based_http2_client_transport + default: false +- name: promise_based_http2_server_transport + default: false - name: rstpit default: false - name: schedule_cancellation_over_write