# 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
#
# 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: 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: 2023/06/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: 2023/06/01
  owner: vigneshbabu@google.com
  test_tags: ["endpoint_test", "flow_control_test"]
- name: peer_state_based_framing
  description:
    If set, the max sizes of frames sent to lower layers is controlled based
    on the peer's memory pressure which is reflected in its max http2 frame
    size.
  expiry: 2023/06/01
  owner: vigneshbabu@google.com
  test_tags: ["flow_control_test"]
- name: memory_pressure_controller
  description: New memory pressure controller
  expiry: 2023/08/01
  owner: ctiller@google.com
  test_tags: [resource_quota_test]
- name: unconstrained_max_quota_buffer_size
  description: Discard the cap on the max free pool size for one memory allocator
  expiry: 2023/09/01
  owner: ctiller@google.com
  test_tags: [resource_quota_test]
- name: event_engine_client
  description: Use EventEngine clients instead of iomgr's grpc_tcp_client
  expiry: 2023/10/01
  owner: hork@google.com
  test_tags: ["core_end2end_test", "event_engine_client_test"]
- name: monitoring_experiment
  description: Placeholder experiment to prove/disprove our monitoring is working
  expiry: never-ever
  owner: ctiller@google.com
  test_tags: []
- name: promise_based_client_call
  description:
    If set, use the new gRPC promise based call code when it's appropriate
    (ie when all filters in a stack are promise based)
  expiry: 2023/11/01
  owner: ctiller@google.com
  test_tags: ["core_end2end_test", "lame_client_test"]
- name: free_large_allocator
  description: If set, return all free bytes from a "big" allocator
  expiry: 2023/11/01
  owner: alishananda@google.com
  test_tags: [resource_quota_test]
- name: promise_based_server_call
  description:
    If set, use the new gRPC promise based call code when it's appropriate
    (ie when all filters in a stack are promise based)
  expiry: 2023/11/01
  owner: ctiller@google.com
  test_tags: ["core_end2end_test", "cpp_end2end_test", "xds_end2end_test"]
- name: transport_supplies_client_latency
  description: If set, use the transport represented value for client latency in opencensus
  expiry: 2023/09/01
  owner: ctiller@google.com
  test_tags: [census_test]
- name: event_engine_listener
  description: Use EventEngine listeners instead of iomgr's grpc_tcp_server
  expiry: 2023/10/01
  owner: vigneshbabu@google.com
  test_tags: ["core_end2end_test", "event_engine_listener_test"]
- name: schedule_cancellation_over_write
  description: Allow cancellation op to be scheduled over a write
  expiry: 2023/07/01
  owner: vigneshbabu@google.com
  test_tags: []
- name: trace_record_callops
  description: Enables tracing of call batch initiation and completion.
  expiry: 2023/07/01
  owner: vigneshbabu@google.com
  test_tags: []
- name: event_engine_dns
  description:
    If set, use EventEngine DNSResolver for client channel resolution
  expiry: 2023/10/01
  owner: yijiem@google.com
  test_tags: []
  allow_in_fuzzing_config: false
- name: work_stealing
  description:
    If set, use a work stealing thread pool implementation in EventEngine
  expiry: 2023/08/01
  owner: hork@google.com
  test_tags: ["core_end2end_test"]
  allow_in_fuzzing_config: false
- name: client_privacy
  description:
    If set, client privacy
  expiry: 2023/11/01
  owner: alishananda@google.com
  test_tags: []
  allow_in_fuzzing_config: false
- name: canary_client_privacy
  description:
    If set, canary client privacy
  expiry: 2023/11/01
  owner: alishananda@google.com
  test_tags: []
  allow_in_fuzzing_config: false
- name: server_privacy
  description:
    If set, server privacy
  expiry: 2023/11/01
  owner: alishananda@google.com
  test_tags: []
  allow_in_fuzzing_config: false
