/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */
syntax = "proto3";

package tensorflow;

option go_package = "github.com/google/tsl/tsl/go/protobuf/for_core_protos_go_proto";

// RPC options for distributed runtime.
message RPCOptions {
  // If true, always use RPC to contact the session target.
  //
  // If false (the default option), TensorFlow may use an optimized
  // transport for client-master communication that avoids the RPC
  // stack. This option is primarily for used testing the RPC stack.
  bool use_rpc_for_inprocess_master = 1;

  // The compression algorithm to be used. One of "deflate", "gzip".
  string compression_algorithm = 2;

  // If compression_algorithm is set, the compression level to be used.
  // From 0 (no compression), up to 3.
  int32 compression_level = 3;

  // Setting cache_rpc_response to true will enable sender side caching of
  // response for RecvTensorAsync and RecvBufAsync to allow receiver to retry
  // requests . This is only necessary when the network fabric is experiencing a
  // significant error rate.  Without it we'll fail a step on an network error,
  // while with it we'll be able to complete long steps (like complex
  // initializations) in the face of some network errors during RecvTensor.
  bool cache_rpc_response = 4;

  // Disables TCP connection sharing when opening a new RPC channel.
  bool disable_session_connection_sharing = 5;

  // Setting num_channels_per_target > 0 allows uses of multiple channels to
  // communicate to the same target. This can be used to improve the aggregate
  // throughput on high speed links (e.g 100G) where single connection is not
  // sufficient to maximize link utilization. Note that a single RPC only goes
  // on a single channel, this only helps in situations where there are multiple
  // transfers to the same target overlapping in time.
  int32 num_channels_per_target = 6;
}
