<?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>
