# Copyright 2022 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Format of each entry:
# name:        name of the experiment
# description: description of the experiment
# expiry:      when is the next time this experiment *must* be updated
#              (date, YYYY/MM/DD)
# test_tags:   a set of bazel tags, that if a test declares them signals
#              that that test should be run with this experiment enabled in CI
# allow_in_fuzzing_config: optional boolean (true if not specified)
#              if false, this experiment will not be included in fuzzers that
#              explore the config space
# requires:    A list of names of experiments that this experiment depends on.
#              Defaults to the empty list.
#              If any of the experiments in the required list is determined to
#              be disabled at runtime, this experiment is disabled at runtime.
# uses_polling: optional boolean (false if not specified) that indicates that
#              this experiment should be tested with all different polling
#              engines.
#
# Well known test tags:
#   core_end2end_test:   all tests, fixtures in the core end2end suite
#   endpoint_test:       endpoint related iomgr tests
#   flow_control_test:   tests pertaining explicitly to flow control
#   hpack_test:          hpack encode/decode tests
#   promise_test:        tests around the promise architecture
#   resource_quota_test: tests known to exercse resource quota

# This file only defines the experiments. Refer to rollouts.yaml for the rollout
# state of each experiment.
- name: call_tracer_in_transport
  description: Transport directly passes byte counts to CallTracer.
  expiry: 2025/02/01
  owner: roth@google.com
  test_tags: []
- name: canary_client_privacy
  description:
    If set, canary client privacy
  expiry: 2024/12/01
  owner: alishananda@google.com
  test_tags: []
  allow_in_fuzzing_config: false
- name: client_privacy
  description:
    If set, client privacy
  expiry: 2024/12/01
  owner: alishananda@google.com
  test_tags: []
  allow_in_fuzzing_config: false
- name: event_engine_application_callbacks
  description: Run application callbacks in EventEngine threads, instead of on the thread-local ApplicationCallbackExecCtx
  expiry: 2025/03/01
  owner: hork@google.com
- name: event_engine_client
  description: Use EventEngine clients instead of iomgr's grpc_tcp_client
  expiry: 2025/03/01
  owner: hork@google.com
  test_tags: ["core_end2end_test", "event_engine_client_test"]
  uses_polling: true
- name: event_engine_dns
  description:
    If set, use EventEngine DNSResolver for client channel resolution
  expiry: 2025/03/01
  owner: yijiem@google.com
  test_tags: ["cancel_ares_query_test", "resolver_component_tests_runner_invoker"]
  allow_in_fuzzing_config: false
  uses_polling: true
- name: event_engine_dns_non_client_channel
  description:
    If set, use EventEngine DNSResolver in other places besides client channel.
  expiry: 2025/03/01
  owner: yijiem@google.com
  test_tags: ["core_end2end_test"]
  allow_in_fuzzing_config: false
  uses_polling: true
- name: event_engine_listener
  description: Use EventEngine listeners instead of iomgr's grpc_tcp_server
  expiry: 2025/03/01
  owner: vigneshbabu@google.com
  test_tags: ["core_end2end_test", "event_engine_listener_test"]
  uses_polling: true
- name: free_large_allocator
  description: If set, return all free bytes from a "big" allocator
  expiry: 2025/03/31
  owner: alishananda@google.com
  test_tags: [resource_quota_test]
- name: local_connector_secure
  description: Local security connector uses TSI_SECURITY_NONE for LOCAL_TCP connections.
  expiry: 2024/10/30
  owner: aermolov@google.com
  test_tags: ["core_end2end_test"]
- name: max_pings_wo_data_throttle
  description:
    Experiment to throttle pings to a period of 1 min when
    GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of
    completely blocking).
  expiry: 2024/12/31
  owner: yashkt@google.com
  test_tags: []
- name: monitoring_experiment
  description: Placeholder experiment to prove/disprove our monitoring is working
  expiry: never-ever
  owner: ctiller@google.com
  test_tags: []
- name: multiping
  description:
    Allow more than one ping to be in flight at a time by default.
  expiry: 2025/03/03
  owner: ctiller@google.com
  test_tags: [flow_control_test]
- name: pick_first_new
  description: New pick_first impl with memory reduction.
  expiry: 2025/03/01
  owner: roth@google.com
  test_tags: ["lb_unit_test", "cpp_lb_end2end_test", "xds_end2end_test"]
- name: promise_based_inproc_transport
  description:
    Use promises for the in-process transport.
  expiry: 2025/03/03
  owner: ctiller@google.com
  test_tags: []
  allow_in_fuzzing_config: false # experiment currently crashes if enabled
- name: rq_fast_reject
  description:
    Resource quota rejects requests immediately (before allocating the request
    structure) under very high memory pressure.
  expiry: 2025/06/06
  owner: ctiller@google.com
  test_tags: []
- name: schedule_cancellation_over_write
  description: Allow cancellation op to be scheduled over a write
  expiry: 2024/12/01
  owner: vigneshbabu@google.com
  test_tags: []
- name: server_privacy
  description:
    If set, server privacy
  expiry: 2024/12/01
  owner: alishananda@google.com
  test_tags: []
  allow_in_fuzzing_config: false
- name: tcp_frame_size_tuning
  description:
    If set, enables TCP to use RPC size estimation made by higher layers.
    TCP would not indicate completion of a read operation until a specified
    number of bytes have been read over the socket.
    Buffers are also allocated according to estimated RPC sizes.
  expiry: 2024/12/01
  owner: vigneshbabu@google.com
  test_tags: ["endpoint_test", "flow_control_test"]
- name: tcp_rcv_lowat
  description: Use SO_RCVLOWAT to avoid wakeups on the read path.
  expiry: 2024/12/01
  owner: vigneshbabu@google.com
  test_tags: ["endpoint_test", "flow_control_test"]
- name: time_caching_in_party
  description: Disable time caching in exec_ctx, and enable it only in a single party execution.
  owner: ctiller@google.com
  expiry: 2024/12/12
  test_tags: []
- name: trace_record_callops
  description: Enables tracing of call batch initiation and completion.
  expiry: 2024/12/01
  owner: vigneshbabu@google.com
  test_tags: []
- name: unconstrained_max_quota_buffer_size
  description: Discard the cap on the max free pool size for one memory allocator
  expiry: 2025/03/03
  owner: ctiller@google.com
  test_tags: [resource_quota_test]
- name: work_serializer_dispatch
  description:
    Have the work serializer dispatch work to event engine for every callback,
    instead of running things inline in the first thread that successfully
    enqueues work.
  expiry: 2024/12/31
  owner: ysseung@google.com
  test_tags: ["core_end2end_test", "cpp_end2end_test", "xds_end2end_test", "lb_unit_test"]
