<?xml version="1.0" encoding="UTF-8"?>

<!--
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.
-->


<configuration>

  <!-- KDC
       <property>
       <name>hadoop.security.authentication</name>
       <value>kerberos</value>
       </property>
       KDC -->

  <!-- HA
       <property>
       <name>yarn.resourcemanager.ha</name>
       <value>%RESOURCEMANAGER%:8032,%RESOURCEMANAGER2%:8032</value>
       </property>
       <property>
       <name>yarn.resourcemanager.scheduler.ha</name>
       <value>%RESOURCEMANAGER%:8030,%RESOURCEMANAGER2%:8030</value>
       </property>
       HA -->

  <!-- RPC client configuration -->
  <property>
    <name>rpc.client.timeout</name>
    <value>3600000</value>
    <description>
      timeout interval of a RPC invocation in millisecond. default is 3600000.
    </description>
  </property>

  <property>
    <name>rpc.client.connect.tcpnodelay</name>
    <value>true</value>
    <description>
      whether set socket TCP_NODELAY to true when connect to RPC server. default is true.
    </description>
  </property>

  <property>
    <name>rpc.client.max.idle</name>
    <value>10000</value>
    <description>
      the max idle time of a RPC connection in millisecond. default is 10000.
    </description>
  </property>

  <property>
    <name>rpc.client.ping.interval</name>
    <value>10000</value>
    <description>
      the interval which the RPC client send a heart beat to server. 0 means disable, default is 10000.
    </description>
  </property>

  <property>
    <name>rpc.client.connect.timeout</name>
    <value>600000</value>
    <description>
      the timeout interval in millisecond when the RPC client is trying to setup the connection. default is 600000.
    </description>
  </property>

  <property>
    <name>rpc.client.connect.retry</name>
    <value>10</value>
    <description>
      the max retry times if the RPC client fail to setup the connection to server. default is 10.
    </description>
  </property>

  <property>
    <name>rpc.client.read.timeout</name>
    <value>3600000</value>
    <description>
      the timeout interval in millisecond when the RPC client is trying to read from server. default is 3600000.
    </description>
  </property>

  <property>
    <name>rpc.client.write.timeout</name>
    <value>3600000</value>
    <description>
      the timeout interval in millisecond when the RPC client is trying to write to server. default is 3600000.
    </description>
  </property>

  <property>
    <name>rpc.client.socket.linger.timeout</name>
    <value>-1</value>
    <description>
      set value to socket SO_LINGER when connect to RPC server. -1 means default OS value. default is -1.
    </description>
  </property>

  <property>
    <name>yarn.client.failover.max.attempts</name>
    <value>15</value>
    <description>
      if multiply resource managers are configured, it is the max retry times when the yarn client try to issue a RPC call. default is 15.
    </description>
  </property>
</configuration>
