<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

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

<!-- Do not modify this file directly.  Instead, copy entries that you -->
<!-- wish to modify from this file into hdfs-rbf-site.xml and change them -->
<!-- there.  If hdfs-rbf-site.xml does not already exist, create it.      -->

<configuration>
  <property>
    <name>dfs.federation.router.default.nameserviceId</name>
    <value></value>
    <description>
      Nameservice identifier of the default subcluster to monitor.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.default.nameservice.enable</name>
    <value>true</value>
    <description>
      The default subcluster is enabled to read and write files.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.rpc.enable</name>
    <value>true</value>
    <description>
      If true, the RPC service to handle client requests in the router is
      enabled.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.rpc-address</name>
    <value>0.0.0.0:8888</value>
    <description>
      RPC address that handles all clients requests.
      The value of this property will take the form of router-host1:rpc-port.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.rpc-bind-host</name>
    <value></value>
    <description>
      The actual address the RPC server will bind to. If this optional address is
      set, it overrides only the hostname portion of
      dfs.federation.router.rpc-address. This is useful for making the name node
      listen on all interfaces by setting it to 0.0.0.0.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.handler.count</name>
    <value>10</value>
    <description>
      The number of server threads for the router to handle RPC requests from
      clients.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.handler.queue.size</name>
    <value>100</value>
    <description>
      The size of the queue for the number of handlers to handle RPC client requests.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.reader.count</name>
    <value>1</value>
    <description>
      The number of readers for the router to handle RPC client requests.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.reader.queue.size</name>
    <value>100</value>
    <description>
      The size of the queue for the number of readers for the router to handle RPC client requests.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.connection.creator.queue-size</name>
    <value>100</value>
    <description>
      Size of async connection creator queue.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.connection.pool-size</name>
    <value>1</value>
    <description>
      Size of the pool of connections from the router to namenodes.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.connection.min-active-ratio</name>
    <value>0.5f</value>
    <description>
      Minimum active ratio of connections from the router to namenodes.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.connection.clean.ms</name>
    <value>10000</value>
    <description>
      Time interval, in milliseconds, to check if the connection pool should
      remove unused connections.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.connection.pool.clean.ms</name>
    <value>60000</value>
    <description>
      Time interval, in milliseconds, to check if the connection manager should
      remove unused connection pools.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.metrics.enable</name>
    <value>true</value>
    <description>
      If the metrics in the router are enabled.
    </description>
  </property>


  <property>
    <name>dfs.federation.router.dn-report.time-out</name>
    <value>1000</value>
    <description>
      Time out, in milliseconds for getDatanodeReport.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.dn-report.cache-expire</name>
    <value>10s</value>
    <description>
      Expiration time in seconds for datanodereport.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.metrics.class</name>
    <value>org.apache.hadoop.hdfs.server.federation.metrics.FederationRPCPerformanceMonitor</value>
    <description>
      Class to monitor the RPC system in the router. It must implement the
      RouterRpcMonitor interface.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.admin.enable</name>
    <value>true</value>
    <description>
      If true, the RPC admin service to handle client requests in the router is
      enabled.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.admin-address</name>
    <value>0.0.0.0:8111</value>
    <description>
      RPC address that handles the admin requests.
      The value of this property will take the form of router-host1:rpc-port.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.admin-bind-host</name>
    <value></value>
    <description>
      The actual address the RPC admin server will bind to. If this optional
      address is set, it overrides only the hostname portion of
      dfs.federation.router.admin-address. This is useful for making the name
      node listen on all interfaces by setting it to 0.0.0.0.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.admin.handler.count</name>
    <value>1</value>
    <description>
      The number of server threads for the router to handle RPC requests from
      admin.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.http-address</name>
    <value>0.0.0.0:50071</value>
    <description>
      HTTP address that handles the web requests to the Router.
      The value of this property will take the form of router-host1:http-port.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.http-bind-host</name>
    <value></value>
    <description>
      The actual address the HTTP server will bind to. If this optional
      address is set, it overrides only the hostname portion of
      dfs.federation.router.http-address. This is useful for making the name
      node listen on all interfaces by setting it to 0.0.0.0.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.https-address</name>
    <value>0.0.0.0:50072</value>
    <description>
      HTTPS address that handles the web requests to the Router.
      The value of this property will take the form of router-host1:https-port.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.https-bind-host</name>
    <value></value>
    <description>
      The actual address the HTTPS server will bind to. If this optional
      address is set, it overrides only the hostname portion of
      dfs.federation.router.https-address. This is useful for making the name
      node listen on all interfaces by setting it to 0.0.0.0.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.http.enable</name>
    <value>true</value>
    <description>
      If the HTTP service to handle client requests in the router is enabled.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.file.resolver.client.class</name>
    <value>org.apache.hadoop.hdfs.server.federation.resolver.MountTableResolver</value>
    <description>
      Class to resolve files to subclusters. To enable multiple subclusters for a mount point,
      set to org.apache.hadoop.hdfs.server.federation.resolver.MultipleDestinationMountTableResolver.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.namenode.resolver.client.class</name>
    <value>org.apache.hadoop.hdfs.server.federation.resolver.MembershipNamenodeResolver</value>
    <description>
      Class to resolve the namenode for a subcluster.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.store.enable</name>
    <value>true</value>
    <description>
      If true, the Router connects to the State Store.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.store.serializer</name>
    <value>org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreSerializerPBImpl</value>
    <description>
      Class to serialize State Store records.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.store.driver.class</name>
    <value>org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl</value>
    <description>
      Class to implement the State Store. There are three implementation classes currently
      being supported:
      org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreFileImpl,
      org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreFileSystemImpl and
      org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl.
      These implementation classes use the local file, filesystem and ZooKeeper as a backend respectively.
      By default it uses the ZooKeeper as the default State Store.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.store.connection.test</name>
    <value>60000</value>
    <description>
      How often to check for the connection to the State Store in milliseconds.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.cache.ttl</name>
    <value>1m</value>
    <description>
      How often to refresh the State Store caches in milliseconds. This setting
      supports multiple time unit suffixes as described in
      dfs.heartbeat.interval. If no suffix is specified then milliseconds is
      assumed.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.store.membership.expiration</name>
    <value>300000</value>
    <description>
      Expiration time in milliseconds for a membership record.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.store.membership.expiration.deletion</name>
    <value>-1</value>
    <description>
      Deletion time in milliseconds for a membership record. If an expired
      membership record exists beyond this time, it will be deleted. If this
      value is negative, the deletion is disabled.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.heartbeat.enable</name>
    <value>true</value>
    <description>
      If true, the Router heartbeats into the State Store.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.heartbeat.interval</name>
    <value>5000</value>
    <description>
      How often the Router should heartbeat into the State Store in milliseconds.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.heartbeat-state.interval</name>
    <value>5s</value>
    <description>
      How often the Router should heartbeat its state into the State Store in
      milliseconds. This setting supports multiple time unit suffixes as
      described in dfs.federation.router.quota-cache.update.interval.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.namenode.heartbeat.enable</name>
    <value></value>
    <description>
      If true, get namenode heartbeats and send into the State Store.
      If not explicitly specified takes the same value as for
       dfs.federation.router.heartbeat.enable.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.store.router.expiration</name>
    <value>5m</value>
    <description>
      Expiration time in milliseconds for a router state record. This setting
      supports multiple time unit suffixes as described in
      dfs.federation.router.quota-cache.update.interval.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.store.router.expiration.deletion</name>
    <value>-1</value>
    <description>
      Deletion time in milliseconds for a router state record. If an expired
      router state record exists beyond this time, it will be deleted. If this
      value is negative, the deletion is disabled.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.safemode.enable</name>
    <value>true</value>
    <description>
    </description>
  </property>

  <property>
    <name>dfs.federation.router.safemode.extension</name>
    <value>30s</value>
    <description>
      Time after startup that the Router is in safe mode. This setting
      supports multiple time unit suffixes as described in
      dfs.heartbeat.interval. If no suffix is specified then milliseconds is
      assumed.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.safemode.expiration</name>
    <value>3m</value>
    <description>
      Time without being able to reach the State Store to enter safe mode. This
      setting supports multiple time unit suffixes as described in
      dfs.heartbeat.interval. If no suffix is specified then milliseconds is
      assumed.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.monitor.namenode</name>
    <value></value>
    <description>
      The identifier of the namenodes to monitor and heartbeat.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.monitor.localnamenode.enable</name>
    <value>true</value>
    <description>
      If true, the Router should monitor the namenode in the local machine.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.mount-table.max-cache-size</name>
    <value>10000</value>
    <description>
      Maximum number of mount table cache entries to have.
      By default, remove cache entries if we have more than 10k.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.mount-table.cache.enable</name>
    <value>true</value>
    <description>
      Set to true to enable mount table cache (Path to Remote Location cache).
      Disabling the cache is recommended when a large amount of unique paths are queried.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.quota.enable</name>
    <value>false</value>
    <description>
      Set to true to enable quota system in Router. When it's enabled, setting
      or clearing sub-cluster's quota directly is not recommended since Router
      Admin server will override sub-cluster's quota with global quota.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.quota-cache.update.interval</name>
    <value>60s</value>
    <description>
      Interval time for updating quota usage cache in Router.
      This property is used only if the value of
      dfs.federation.router.quota.enable is true.
      This setting supports multiple time unit suffixes as described
      in dfs.heartbeat.interval. If no suffix is specified then milliseconds
      is assumed.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.client.thread-size</name>
    <value>32</value>
    <description>
      Max threads size for the RouterClient to execute concurrent
      requests.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.client.retry.max.attempts</name>
    <value>3</value>
    <description>
      Max retry attempts for the RouterClient talking to the Router.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.client.reject.overload</name>
    <value>false</value>
    <description>
      Set to true to reject client requests when we run out of RPC client
      threads.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.client.allow-partial-listing</name>
    <value>true</value>
    <description>
      If the Router can return a partial list of files in a multi-destination mount point when one of the subclusters is unavailable.
      True may return a partial list of files if a subcluster is down.
      False will fail the request if one is unavailable.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.client.mount-status.time-out</name>
    <value>1s</value>
    <description>
      Set a timeout for the Router when listing folders containing mount
      points. In this process, the Router checks the mount table and then it
      checks permissions in the subcluster. After the time out, we return the
      default values.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.connect.max.retries.on.timeouts</name>
    <value>0</value>
    <description>
      Maximum number of retries for the IPC Client when connecting to the
      subclusters. By default, it doesn't let the IPC retry and the Router
      handles it.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.connect.timeout</name>
    <value>2s</value>
    <description>
      Time out for the IPC client connecting to the subclusters. This should be
      short as the Router has knowledge of the state of the Routers.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.keytab.file</name>
    <value></value>
    <description>
      The keytab file used by router to login as its
      service principal. The principal name is configured with
      dfs.federation.router.kerberos.principal.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.kerberos.principal</name>
    <value></value>
    <description>
      The Router service principal. This is typically set to
      router/_HOST@REALM.TLD. Each Router will substitute _HOST with its
      own fully qualified hostname at startup. The _HOST placeholder
      allows using the same configuration setting on both Router
      in an HA setup.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.kerberos.principal.hostname</name>
    <value></value>
    <description>
      Optional.  The hostname for the Router containing this
      configuration file.  Will be different for each machine.
      Defaults to current hostname.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.kerberos.internal.spnego.principal</name>
    <value>${dfs.web.authentication.kerberos.principal}</value>
    <description>
      The server principal used by the Router for web UI SPNEGO
      authentication when Kerberos security is enabled. This is
      typically set to HTTP/_HOST@REALM.TLD The SPNEGO server principal
      begins with the prefix HTTP/ by convention.

      If the value is '*', the web server will attempt to login with
      every principal specified in the keytab file
      dfs.web.authentication.kerberos.keytab.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.mount-table.cache.update</name>
    <value>false</value>
    <description>Set true to enable MountTableRefreshService. This service
      updates mount table cache immediately after adding, modifying or
      deleting the mount table entries. If this service is not enabled
      mount table cache are refreshed periodically by
      StateStoreCacheUpdateService
    </description>
  </property>

  <property>
    <name>dfs.federation.router.mount-table.cache.update.timeout</name>
    <value>1m</value>
    <description>This property defines how long to wait for all the
      admin servers to finish their mount table cache update. This setting
      supports multiple time unit suffixes as described in
      dfs.federation.router.safemode.extension.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.mount-table.cache.update.client.max.time
    </name>
    <value>5m</value>
    <description>Remote router mount table cache is updated through
      RouterClient(RPC call). To improve performance, RouterClient
      connections are cached but it should not be kept in cache forever.
      This property defines the max time a connection can be cached. This
      setting supports multiple time unit suffixes as described in
      dfs.federation.router.safemode.extension.
    </description>
  </property>

  <property>
    <name>dfs.federation.router.secret.manager.class</name>
    <value>org.apache.hadoop.hdfs.server.federation.router.security.token.ZKDelegationTokenSecretManagerImpl</value>
    <description>
      Class to implement state store to delegation tokens.
      Default implementation uses zookeeper as the backend to store delegation tokens.
    </description>
  </property>

</configuration>
