<?xml version="1.0" encoding="UTF-8"?>
<?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 ozone-site.xml and change them -->
<!-- there.  If ozone-site.xml does not already exist, create it.      -->

<!--Tags supported are OZONE, CBLOCK, MANAGEMENT, SECURITY, PERFORMANCE,   -->
<!--DEBUG, CLIENT, SERVER, OM, SCM, CRITICAL, RATIS, CONTAINER, REQUIRED, -->
<!--REST, STORAGE, PIPELINE, STANDALONE                                    -->

<configuration>

  <!--Container Settings used by Datanode-->
  <property>
    <name>ozone.container.cache.size</name>
    <value>1024</value>
    <tag>PERFORMANCE, CONTAINER, STORAGE</tag>
    <description>The open container is cached on the data node side. We maintain
      an LRU
      cache for caching the recently used containers. This setting controls the
      size of that cache.
    </description>
  </property>
  <property>
    <name>ozone.container.cache.lock.stripes</name>
    <value>1024</value>
    <tag>PERFORMANCE, CONTAINER, STORAGE</tag>
    <description>Container DB open is an exclusive operation. We use a stripe
      lock to guarantee that different threads can open different container DBs
      concurrently, while for one container DB, only one thread can open it at
      the same time. This setting controls the lock stripes.
    </description>
  </property>
  <property>
    <name>dfs.container.ipc</name>
    <value>9859</value>
    <tag>OZONE, CONTAINER, MANAGEMENT</tag>
    <description>The ipc port number of container.</description>
  </property>
  <property>
    <name>dfs.container.ipc.random.port</name>
    <value>false</value>
    <tag>OZONE, DEBUG, CONTAINER</tag>
    <description>Allocates a random free port for ozone container. This is used
      only while
      running unit tests.
    </description>
  </property>
  <property>
    <name>dfs.container.chunk.write.sync</name>
    <value>false</value>
    <tag>OZONE, CONTAINER, MANAGEMENT</tag>
    <description>Determines whether the chunk writes in the container happen as
      sync I/0 or buffered I/O operation.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.statemachinedata.sync.timeout</name>
    <value>10s</value>
    <tag>OZONE, DEBUG, CONTAINER, RATIS</tag>
    <description>Timeout for StateMachine data writes by Ratis.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.statemachinedata.sync.retries</name>
    <value>-1</value>
    <tag>OZONE, DEBUG, CONTAINER, RATIS</tag>
    <description>Number of times the WriteStateMachineData op will be tried
      before failing, if this value is -1, then this retries indefinitely.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.log.queue.num-elements</name>
    <value>1024</value>
    <tag>OZONE, DEBUG, CONTAINER, RATIS</tag>
    <description>Limit for the number of operations in Ratis Log Worker.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.log.queue.byte-limit</name>
    <value>4GB</value>
    <tag>OZONE, DEBUG, CONTAINER, RATIS</tag>
    <description>Byte limit for Ratis Log Worker queue.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.log.appender.queue.num-elements</name>
    <value>1</value>
    <tag>OZONE, DEBUG, CONTAINER, RATIS</tag>
    <description>Limit for number of append entries in ratis leader's
      log appender queue.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.log.appender.queue.byte-limit</name>
    <value>32MB</value>
    <tag>OZONE, DEBUG, CONTAINER, RATIS</tag>
    <description>Byte limit for ratis leader's log appender queue.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.log.purge.gap</name>
    <value>1000000</value>
    <tag>OZONE, DEBUG, CONTAINER, RATIS</tag>
    <description>Purge gap between the last purged commit index
      and the current index, when the leader decides to purge its log.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.datanode.storage.dir</name>
    <value/>
    <tag>OZONE, CONTAINER, STORAGE, MANAGEMENT, RATIS</tag>
    <description>This directory is used for storing Ratis metadata like logs. If
      this is
      not set then default metadata dirs is used. A warning will be logged if
      this not set. Ideally, this should be mapped to a fast disk like an SSD.
    </description>
  </property>
  <property>
    <name>hdds.datanode.dir</name>
    <value/>
    <tag>OZONE, CONTAINER, STORAGE, MANAGEMENT</tag>
    <description>Determines where on the local filesystem HDDS data will be
      stored. Defaults to dfs.datanode.data.dir if not specified.
      The directories should be tagged with corresponding storage types
      ([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) for storage policies. The default
      storage type will be DISK if the directory does not have a storage type
      tagged explicitly.
    </description>
  </property>
  <property>
    <name>hdds.datanode.container.db.dir</name>
    <value/>
    <tag>OZONE, CONTAINER, STORAGE, MANAGEMENT</tag>
    <description>Determines where the per-disk rocksdb instances will be
      stored. This setting is optional. If unspecified, then rocksdb instances
      are stored on the same disk as HDDS data.
      The directories should be tagged with corresponding storage types
      ([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) for storage policies. The default
      storage type will be DISK if the directory does not have a storage type
      tagged explicitly. Ideally, this should be mapped to a fast disk
      like an SSD.
    </description>
  </property>
  <property>
    <name>hdds.datanode.dir.du.reserved</name>
    <value/>
    <tag>OZONE, CONTAINER, STORAGE, MANAGEMENT</tag>
    <description>Reserved space in bytes per volume. Always leave this much space free for non dfs use.
       Such as /dir1:100B, /dir2:200MB, means dir1 reserves 100 bytes and dir2 reserves 200 MB.
    </description>
  </property>
  <property>
    <name>hdds.datanode.dir.du.reserved.percent</name>
    <value/>
    <tag>OZONE, CONTAINER, STORAGE, MANAGEMENT</tag>
    <description>Percentage of volume that should be reserved. This space is left free for other usage.
      The value should be between 0-1. Such as 0.1 which means 10% of volume space will be reserved.
    </description>
  </property>
  <property>
    <name>hdds.datanode.volume.choosing.policy</name>
    <value/>
    <tag>OZONE, CONTAINER, STORAGE, MANAGEMENT</tag>
    <description>
      The class name of the policy for choosing volumes in the list of
      directories.  Defaults to
      org.apache.hadoop.ozone.container.common.volume.RoundRobinVolumeChoosingPolicy.
      This volume choosing policy selects volumes in a round-robin order.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.enabled</name>
    <value>false</value>
    <tag>OZONE, MANAGEMENT, PIPELINE, RATIS</tag>
    <description>Ozone supports different kinds of replication pipelines. Ratis
      is one of
      the replication pipeline supported by ozone.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.ipc</name>
    <value>9858</value>
    <tag>OZONE, CONTAINER, PIPELINE, RATIS</tag>
    <description>The ipc port number of container for clients.</description>
  </property>
  <property>
    <name>dfs.container.ratis.admin.port</name>
    <value>9857</value>
    <tag>OZONE, CONTAINER, PIPELINE, RATIS, MANAGEMENT</tag>
    <description>The ipc port number of container for admin requests.</description>
  </property>
  <property>
    <name>dfs.container.ratis.server.port</name>
    <value>9856</value>
    <tag>OZONE, CONTAINER, PIPELINE, RATIS, MANAGEMENT</tag>
    <description>The ipc port number of container for server-server communication.</description>
  </property>
  <property>
    <name>dfs.container.ratis.ipc.random.port</name>
    <value>false</value>
    <tag>OZONE,DEBUG</tag>
    <description>Allocates a random free port for ozone ratis port for the
      container. This
      is used only while running unit tests.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.rpc.type</name>
    <value>GRPC</value>
    <tag>OZONE, RATIS, MANAGEMENT</tag>
    <description>Ratis supports different kinds of transports like netty, GRPC,
      Hadoop RPC
      etc. This picks one of those for this cluster.
    </description>
  </property>
  <property>
    <name>dfs.ratis.snapshot.threshold</name>
    <value>10000</value>
    <tag>OZONE, RATIS</tag>
    <description>Number of transactions after which a ratis snapshot should be
      taken.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.statemachine.max.pending.apply-transactions</name>
    <value>10000</value>
    <tag>OZONE, RATIS</tag>
    <description>Maximum number of pending apply transactions in a data
      pipeline. The default value is kept same as default snapshot threshold
      dfs.ratis.snapshot.threshold.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.num.write.chunk.threads.per.volume</name>
    <value>10</value>
    <tag>OZONE, RATIS, PERFORMANCE</tag>
    <description>Maximum number of threads in the thread pool that Datanode
      will use for writing replicated chunks.
      This is a per configured locations!
      (10 thread per disk by default).
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.leader.pending.bytes.limit</name>
    <value>1GB</value>
    <tag>OZONE, RATIS, PERFORMANCE</tag>
    <description>Limit on the total bytes of pending requests after which
      leader starts rejecting requests from client.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.replication.level</name>
    <value>MAJORITY</value>
    <tag>OZONE, RATIS</tag>
    <description>Replication level to be used by datanode for submitting a
      container command to ratis. Available replication levels are ALL and
      MAJORTIY, MAJORITY is used as the default replication level.
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.num.container.op.executors</name>
    <value>10</value>
    <tag>OZONE, RATIS, PERFORMANCE</tag>
    <description>Number of executors that will be used by Ratis to execute
      container ops.(10 by default).
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.segment.size</name>
    <value>1MB</value>
    <tag>OZONE, RATIS, PERFORMANCE</tag>
    <description>The size of the raft segment used by Apache Ratis on datanodes.
      (1 MB by default)
    </description>
  </property>
  <property>
    <name>dfs.container.ratis.segment.preallocated.size</name>
    <value>16KB</value>
    <tag>OZONE, RATIS, PERFORMANCE</tag>
    <description>The size of the buffer which is preallocated for raft segment
      used by Apache Ratis on datanodes.(16 KB by default)
    </description>
  </property>
  <property>
    <name>dfs.ratis.server.retry-cache.timeout.duration</name>
    <value>600000ms</value>
    <tag>OZONE, RATIS, MANAGEMENT</tag>
    <description>Retry Cache entry timeout for ratis server.</description>
  </property>
  <property>
    <name>dfs.ratis.leader.election.minimum.timeout.duration</name>
    <value>5s</value>
    <tag>OZONE, RATIS, MANAGEMENT</tag>
    <description>The minimum timeout duration for ratis leader election.
        Default is 5s.
    </description>
  </property>
  <property>
    <name>hdds.node.report.interval</name>
    <value>60000ms</value>
    <tag>OZONE, CONTAINER, MANAGEMENT</tag>
    <description>Time interval of the datanode to send node report. Each
      datanode periodically send node report to SCM. Unit could be
      defined with postfix (ns,ms,s,m,h,d)</description>
  </property>
  <property>
    <name>hdds.container.report.interval</name>
    <value>60m</value>
    <tag>OZONE, CONTAINER, MANAGEMENT</tag>
    <description>Time interval of the datanode to send container report. Each
      datanode periodically send container report to SCM. Unit could be
      defined with postfix (ns,ms,s,m,h,d)</description>
  </property>
  <property>
    <name>hdds.crl.status.report.interval</name>
    <value>60000ms</value>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <description>Time interval of the datanode to send CRL status report. Each
      datanode periodically sends CRL status report to SCM. Unit could be
      defined with postfix (ns,ms,s,m,h,d)</description>
  </property>
  <property>
    <name>hdds.pipeline.report.interval</name>
    <value>60000ms</value>
    <tag>OZONE, PIPELINE, MANAGEMENT</tag>
    <description>Time interval of the datanode to send pipeline report. Each
      datanode periodically send pipeline report to SCM. Unit could be
      defined with postfix (ns,ms,s,m,h,d)</description>
  </property>


  <property>
    <name>hdds.prometheus.endpoint.enabled</name>
    <value>true</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>Enable prometheus compatible metric page on the HTTP
      servers.
    </description>
  </property>

  <property>
    <name>hdds.profiler.endpoint.enabled</name>
    <value>false</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>Enable /prof java profiler servlet page on HTTP server.
    </description>
  </property>

  <!--Ozone Settings-->
  <property>
    <name>ozone.administrators</name>
    <value/>
    <tag>OZONE, SECURITY</tag>
    <description>Ozone administrator users delimited by the comma.
      If not set, only the user who launches an ozone service will be the admin
      user. This property must be set if ozone services are started by different
      users. Otherwise, the RPC layer will reject calls from other servers which
      are started by users not in the list.
    </description>
  </property>
  <property>
    <name>ozone.administrators.groups</name>
    <value/>
    <tag>OZONE, SECURITY</tag>
    <description>Ozone administrator groups delimited by the comma.
      This is the list of groups who can access admin only information
      from ozone.
      It is enough to either have the name defined in ozone.administrators
      or be directly or indirectly in a group defined in this property.
    </description>
  </property>
  <property>
    <name>ozone.block.deleting.container.limit.per.interval</name>
    <value>10</value>
    <tag>OZONE, PERFORMANCE, SCM</tag>
    <description>A maximum number of containers to be scanned by block deleting
      service per
      time interval. The block deleting service spawns a thread to handle block
      deletions in a container. This property is used to throttle the number of
      threads spawned for block deletions.
    </description>
  </property>
  <property>
    <name>ozone.block.deleting.limit.per.task</name>
    <value>1000</value>
    <tag>OZONE, PERFORMANCE, SCM</tag>
    <description>A maximum number of blocks to be deleted by block deleting
      service per
      time interval. This property is used to throttle the actual number of
      block deletions on a data node per container.
    </description>
  </property>
  <property>
    <name>ozone.block.deleting.service.interval</name>
    <value>1m</value>
    <tag>OZONE, PERFORMANCE, SCM</tag>
    <description>Time interval of the block deleting service.
      The block deleting service runs on each datanode periodically and
      deletes blocks queued for deletion. Unit could be defined with
      postfix (ns,ms,s,m,h,d)
    </description>
  </property>
  <property>
    <name>ozone.block.deleting.service.timeout</name>
    <value>300000ms</value>
    <tag>OZONE, PERFORMANCE, SCM</tag>
    <description>A timeout value of block deletion service. If this is set
      greater than 0,
      the service will stop waiting for the block deleting completion after this
      time. If timeout happens to a large proportion of block deletion, this
      needs to be increased with ozone.block.deleting.limit.per.task. 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>ozone.block.deleting.service.workers</name>
    <value>10</value>
    <tag>OZONE, PERFORMANCE, SCM</tag>
    <description>Number of workers executed of block deletion service. This
      configuration should be set to greater than 0.
    </description>
  </property>
  <property>
    <name>ozone.UnsafeByteOperations.enabled</name>
    <value>true</value>
    <tag>OZONE, PERFORMANCE, CLIENT</tag>
    <description>It specifies whether to use unsafe or safe buffer to byteString
      copy.
    </description>
  </property>
  <property>
    <name>ozone.client.connection.timeout</name>
    <value>5000ms</value>
    <tag>OZONE, PERFORMANCE, CLIENT</tag>
    <description>Connection timeout for Ozone client in milliseconds.
    </description>
  </property>
  <property>
    <name>ozone.client.socket.timeout</name>
    <value>5000ms</value>
    <tag>OZONE, CLIENT</tag>
    <description>Socket timeout for Ozone client. Unit could be defined with
      postfix (ns,ms,s,m,h,d)</description>
  </property>
  <property>
    <name>ozone.key.deleting.limit.per.task</name>
    <value>20000</value>
    <tag>OM, PERFORMANCE</tag>
    <description>
      A maximum number of keys to be scanned by key deleting service
      per time interval in OM. Those keys are sent to delete metadata and
      generate transactions in SCM for next async deletion between SCM
      and DataNode.
    </description>
  </property>
  <property>
    <name>ozone.om.service.ids</name>
    <value/>
    <tag>OM, HA</tag>
    <description>
      Comma-separated list of OM service Ids. This property allows the client
      to figure out quorum of OzoneManager address.
    </description>
  </property>
  <property>
    <name>ozone.om.internal.service.id</name>
    <value/>
    <tag>OM, HA</tag>
    <description>
      Service ID of the Ozone Manager. If this is not set fall back to
      ozone.om.service.ids to find the service ID it belongs to.
    </description>
  </property>
  <property>
    <name>ozone.om.nodes.EXAMPLEOMSERVICEID</name>
    <value/>
    <tag>OM, HA</tag>
    <description>
      Comma-separated list of OM node Ids for a given OM service ID (eg.
      EXAMPLEOMSERVICEID). The OM service ID should be the value (one of the
      values if there are multiple) set for the parameter ozone.om.service.ids.

      Decommissioned nodes (represented by node Ids in
      ozone.om.decommissioned.nodes config list) will be ignored and not
      included in the OM HA setup even if added to this list.

      Unique identifiers for each OM Node, delimited by commas. This will be
      used by OzoneManagers in HA setup to determine all the OzoneManagers
      belonging to the same OMservice in the cluster. For example, if you
      used “omService1” as the OM service ID previously, and you wanted to
      use “om1”, “om2” and "om3" as the individual IDs of the OzoneManagers,
      you would configure a property ozone.om.nodes.omService1, and its value
      "om1,om2,om3".
    </description>
  </property>
  <property>
    <name>ozone.om.decommissioned.nodes.EXAMPLEOMSERVICEID</name>
    <value/>
    <tag>OM, HA</tag>
    <description>
      Comma-separated list of OM node Ids which have been decommissioned. OMs
      present in this list will not be included in the OM HA ring.
    </description>
  </property>
  <property>
    <name>ozone.om.node.id</name>
    <value/>
    <tag>OM, HA</tag>
    <description>
      The ID of this OM node. If the OM node ID is not configured it
      is determined automatically by matching the local node's address
      with the configured address.

      If node ID is not deterministic from the configuration, then it is set
      to default node id - om1.
    </description>
  </property>
  <property>
    <name>ozone.om.address</name>
    <value>0.0.0.0:9862</value>
    <tag>OM, REQUIRED</tag>
    <description>
      The address of the Ozone OM service. This allows clients to discover
      the address of the OM.
    </description>
  </property>
  <property>
    <name>ozone.om.handler.count.key</name>
    <value>100</value>
    <tag>OM, PERFORMANCE</tag>
    <description>
      The number of RPC handler threads for OM service endpoints.
    </description>
  </property>
  <property>
    <name>ozone.om.http-address</name>
    <value>0.0.0.0:9874</value>
    <tag>OM, MANAGEMENT</tag>
    <description>
      The address and the base port where the OM web UI will listen on.

      If the port is 0, then the server will start on a free port. However, it
      is best to specify a well-known port, so it is easy to connect and see
      the OM management UI.
    </description>
  </property>
  <property>
    <name>ozone.om.http-bind-host</name>
    <value>0.0.0.0</value>
    <tag>OM, MANAGEMENT</tag>
    <description>
      The actual address the OM web server will bind to. If this optional
      the address is set, it overrides only the hostname portion of
      ozone.om.http-address.
    </description>
  </property>
  <property>
    <name>ozone.om.http.enabled</name>
    <value>true</value>
    <tag>OM, MANAGEMENT</tag>
    <description>
      Property to enable or disable OM web user interface.
    </description>
  </property>
  <property>
    <name>ozone.om.https-address</name>
    <value>0.0.0.0:9875</value>
    <tag>OM, MANAGEMENT, SECURITY</tag>
    <description>
      The address and the base port where the OM web UI will listen
      on using HTTPS.
      If the port is 0 then the server will start on a free port.
    </description>
  </property>
  <property>
    <name>ozone.om.https-bind-host</name>
    <value>0.0.0.0</value>
    <tag>OM, MANAGEMENT, SECURITY</tag>
    <description>
      The actual address the OM web server will bind to using HTTPS.
      If this optional address is set, it overrides only the hostname portion of
      ozone.om.https-address.
    </description>
  </property>
  <property>
    <name>ozone.om.volume.listall.allowed</name>
    <value>true</value>
    <tag>OM, MANAGEMENT</tag>
    <description>
      Allows everyone to list all volumes when set to true. Defaults to true.
      When set to false, non-admin users can only list the volumes they have
      access to. Admins can always list all volumes.
    </description>
  </property>
  <property>
    <name>ozone.om.user.max.volume</name>
    <value>1024</value>
    <tag>OM, MANAGEMENT</tag>
    <description>
      The maximum number of volumes a user can have on a cluster.Increasing or
      decreasing this number has no real impact on ozone cluster. This is
      defined only for operational purposes. Only an administrator can create a
      volume, once a volume is created there are no restrictions on the number
      of buckets or keys inside each bucket a user can create.
    </description>
  </property>
  <property>
    <name>ozone.om.db.dirs</name>
    <value/>
    <tag>OZONE, OM, STORAGE, PERFORMANCE</tag>
    <description>
      Directory where the OzoneManager stores its metadata. This should
      be specified as a single directory. If the directory does not
      exist then the OM will attempt to create it.

      If undefined, then the OM will log a warning and fallback to
      ozone.metadata.dirs. This fallback approach is not recommended for
      production environments.
    </description>
  </property>
  <property>
    <name>ozone.metadata.dirs</name>
    <value/>
    <tag>OZONE, OM, SCM, CONTAINER, STORAGE, REQUIRED</tag>
    <description>
      This setting is the fallback location for SCM, OM, Recon and DataNodes
      to store their metadata. This setting may be used only in test/PoC
      clusters to simplify configuration.

      For production clusters or any time you care about performance, it is
      recommended that ozone.om.db.dirs, ozone.scm.db.dirs and
      dfs.container.ratis.datanode.storage.dir be configured separately.
    </description>
  </property>

  <property>
    <name>ozone.metastore.rocksdb.statistics</name>
    <value>OFF</value>
    <tag>OZONE, OM, SCM, STORAGE, PERFORMANCE</tag>
    <description>
      The statistics level of the rocksdb store. If you use any value from
      org.rocksdb.StatsLevel (eg. ALL or EXCEPT_DETAILED_TIMERS), the rocksdb
      statistics will be exposed over JMX bean with the choosed setting. Set
      it to OFF to not initialize rocksdb statistics at all. Please note that
      collection of statistics could have 5-10% performance penalty.
      Check the rocksdb documentation for more details.
    </description>
  </property>
  <property>
    <name>ozone.scm.db.dirs</name>
    <value/>
    <tag>OZONE, SCM, STORAGE, PERFORMANCE</tag>
    <description>
      Directory where the StorageContainerManager stores its metadata.
      This should be specified as a single directory. If the directory
      does not exist then the SCM will attempt to create it.

      If undefined, then the SCM will log a warning and fallback to
      ozone.metadata.dirs. This fallback approach is not recommended for
      production environments.
    </description>
  </property>
  <property>
    <name>ozone.scm.block.client.address</name>
    <value/>
    <tag>OZONE, SCM</tag>
    <description>The address of the Ozone SCM block client service. If not
      defined value of ozone.scm.client.address is used.
    </description>
  </property>
  <property>
    <name>ozone.scm.block.client.bind.host</name>
    <value>0.0.0.0</value>
    <tag>OZONE, SCM</tag>
    <description>
      The hostname or IP address used by the SCM block client
      endpoint to bind.
    </description>
  </property>
  <property>
    <name>ozone.scm.block.client.port</name>
    <value>9863</value>
    <tag>OZONE, SCM</tag>
    <description>
      The port number of the Ozone SCM block client service.
    </description>
  </property>
  <property>
    <name>ozone.scm.block.deletion.max.retry</name>
    <value>4096</value>
    <tag>OZONE, SCM</tag>
    <description>
      SCM wraps up many blocks in a deletion transaction and sends that to data
      node for physical deletion periodically. This property determines how many
      times SCM is going to retry sending a deletion operation to the data node.
    </description>
  </property>
  <property>
    <name>ozone.scm.block.size</name>
    <value>256MB</value>
    <tag>OZONE, SCM</tag>
    <description>
      The default size of a scm block. This is maps to the default
      Ozone block size.
    </description>
  </property>
  <property>
    <name>ozone.scm.sequence.id.batch.size</name>
    <value>1000</value>
    <tag>OZONE, SCM</tag>
    <description>
      SCM allocates sequence id in a batch way. This property determines how many
      ids will be allocated in a single batch.
    </description>
  </property>
  <property>
    <name>ozone.scm.chunk.size</name>
    <value>4MB</value>
    <tag>OZONE, SCM, CONTAINER, PERFORMANCE</tag>
    <description>
      The chunk size for reading/writing chunk operations in bytes.

      The chunk size defaults to 4MB. If the value configured is more than the
      maximum size (32MB), it will be reset to the maximum size (32MB). This
      maps to the network packet sizes and file write operations in the
      client to datanode protocol.

      When tuning this parameter, flow control window parameter should be
      tuned accordingly. Refer to
      hdds.ratis.raft.grpc.flow.control.window for more information.
    </description>
  </property>
  <property>
    <name>ozone.chunk.read.buffer.default.size</name>
    <value>64KB</value>
    <tag>OZONE, SCM, CONTAINER, PERFORMANCE</tag>
    <description>
      The default read buffer size during read chunk operations when checksum
      is disabled. Chunk data will be cached in buffers of this capacity.

      For chunk data with checksum, the read buffer size will be the
      same as the number of bytes per checksum
      (ozone.client.bytes.per.checksum) corresponding to the chunk.
    </description>
  </property>
  <property>
    <name>ozone.scm.container.layout</name>
    <value>FILE_PER_BLOCK</value>
    <tag>OZONE, SCM, CONTAINER, PERFORMANCE</tag>
    <description>
      Container layout defines how chunks, blocks and containers are stored on disk.
      Each chunk is stored separately with FILE_PER_CHUNK.  All chunks of a
      block are stored in the same file with FILE_PER_BLOCK.  The default is
      FILE_PER_BLOCK.
    </description>
  </property>
  <property>
    <name>ozone.scm.client.address</name>
    <value/>
    <tag>OZONE, SCM, REQUIRED</tag>
    <description>
      The address of the Ozone SCM client service. This is a required setting.

      It is a string in the host:port format. The port number is optional
      and defaults to 9860.
    </description>
  </property>
  <property>
    <name>ozone.scm.client.bind.host</name>
    <value>0.0.0.0</value>
    <tag>OZONE, SCM, MANAGEMENT</tag>
    <description>The hostname or IP address used by the SCM client endpoint to
      bind.
      This setting is used by the SCM only and never used by clients.

      The setting can be useful in multi-homed setups to restrict the
      availability of the SCM client service to a specific interface.

      The default is appropriate for most clusters.
    </description>
  </property>
  <property>
    <name>ozone.scm.client.port</name>
    <value>9860</value>
    <tag>OZONE, SCM, MANAGEMENT</tag>
    <description>The port number of the Ozone SCM client service.</description>
  </property>
  <property>
    <name>ozone.scm.keyvalue.container.deletion-choosing.policy</name>
    <value>
      org.apache.hadoop.ozone.container.common.impl.TopNOrderedContainerDeletionChoosingPolicy
    </value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The policy used for choosing desired keyvalue containers for block deletion.
      Datanode selects some containers to process block deletion
      in a certain interval defined by ozone.block.deleting.service.interval.
      The number of containers to process in each interval is defined
      by ozone.block.deleting.container.limit.per.interval. This property is
      used to configure the policy applied while selecting containers.
      There are two policies supporting now:
      RandomContainerDeletionChoosingPolicy and
      TopNOrderedContainerDeletionChoosingPolicy.
      org.apache.hadoop.ozone.container.common.impl.RandomContainerDeletionChoosingPolicy
      implements a simply random policy that to return a random list of
      containers.
      org.apache.hadoop.ozone.container.common.impl.TopNOrderedContainerDeletionChoosingPolicy
      implements a policy that choosing top count number of containers in a
      pending-deletion-blocks's num
      based descending order.
    </description>
  </property>
  <property>
    <name>ozone.scm.container.placement.impl</name>
    <value>
      org.apache.hadoop.hdds.scm.container.placement.algorithms.SCMContainerPlacementRandom
    </value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The full name of class which implements
      org.apache.hadoop.hdds.scm.PlacementPolicy.
      The class decides which datanode will be used to host the container replica. If not set,
      org.apache.hadoop.hdds.scm.container.placement.algorithms.SCMContainerPlacementRandom will be used as default
      value.
    </description>
  </property>
  <property>
    <name>ozone.scm.container.placement.ec.impl</name>
    <value>
      org.apache.hadoop.hdds.scm.container.placement.algorithms.SCMContainerPlacementRackScatter
    </value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The full name of class which implements
      org.apache.hadoop.hdds.scm.PlacementPolicy.
      The class decides which datanode will be used to host the container replica in EC mode. If not set,
      org.apache.hadoop.hdds.scm.container.placement.algorithms.SCMContainerPlacementRandom will be used as default
      value.
    </description>
  </property>
  <property>
    <name>ozone.scm.pipeline.owner.container.count</name>
    <value>3</value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>Number of containers per owner per disk in a pipeline.
    </description>
  </property>
  <property>
    <name>ozone.scm.pipeline.per.metadata.disk</name>
    <value>2</value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>Number of pipelines to be created per raft log disk.
    </description>
  </property>
  <property>
  <name>ozone.scm.datanode.pipeline.limit</name>
  <value>2</value>
  <tag>OZONE, SCM, PIPELINE</tag>
  <description>Max number of pipelines per datanode can be engaged in.
    Setting the value to 0 means the pipeline limit per dn will be determined
    by the no of metadata volumes reported per dn.
  </description>
  </property>
  <property>
    <name>ozone.scm.datanode.disallow.same.peers</name>
    <value>false</value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>Disallows same set of datanodes to participate in multiple
      pipelines when set to true. Default is set to false.
    </description>
  </property>
  <property>
    <name>ozone.scm.ratis.pipeline.limit</name>
    <value>0</value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>Upper limit for how many pipelines can be OPEN in SCM.
      0 as default means there is no limit. Otherwise, the number is the limit
      of max amount of pipelines which are OPEN.
    </description>
  </property>
  <property>
    <name>ozone.scm.pipeline.allocated.timeout</name>
    <value>5m</value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>
      Timeout for every pipeline to stay in ALLOCATED stage. When pipeline is created,
      it should be at OPEN stage once pipeline report is successfully received by SCM.
      If a pipeline stays at ALLOCATED longer than the specified period of time,
      it should be scrubbed so that new pipeline can be created.
      This timeout is for how long pipeline can stay at ALLOCATED
      stage until it gets scrubbed.
    </description>
  </property>
  <property>
    <name>ozone.scm.pipeline.leader-choose.policy</name>
    <value>
      org.apache.hadoop.hdds.scm.pipeline.leader.choose.algorithms.MinLeaderCountChoosePolicy
    </value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>
      The policy used for choosing desired leader for pipeline creation.
      There are two policies supporting now: DefaultLeaderChoosePolicy, MinLeaderCountChoosePolicy.
      org.apache.hadoop.hdds.scm.pipeline.leader.choose.algorithms.DefaultLeaderChoosePolicy
      implements a policy that choose leader without depending on priority.
      org.apache.hadoop.hdds.scm.pipeline.leader.choose.algorithms.MinLeaderCountChoosePolicy
      implements a policy that choose leader which has the minimum exist leader count.
      In the future, we need to add policies which consider:
      1. resource, the datanode with the most abundant cpu and memory can be made the leader
      2. topology, the datanode nearest to the client can be made the leader
    </description>
  </property>
  <property>
    <name>ozone.scm.container.size</name>
    <value>5GB</value>
    <tag>OZONE, PERFORMANCE, MANAGEMENT</tag>
    <description>
      Default container size used by Ozone.
      There are two considerations while picking this number. The speed at which
      a container can be replicated, determined by the network speed and the
      metadata that each container generates. So selecting a large number
      creates less SCM metadata, but recovery time will be more. 5GB is a number
      that maps to quick replication times in gigabit networks, but still
      balances the amount of metadata.
    </description>
  </property>
  <property>
    <name>ozone.scm.datanode.address</name>
    <value/>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The address of the Ozone SCM service used for internal
      communication between the DataNodes and the SCM.

      It is a string in the host:port format. The port number is optional
      and defaults to 9861.

      This setting is optional. If unspecified then the hostname portion
      is picked from the ozone.scm.client.address setting and the
      default service port of 9861 is chosen.
    </description>
  </property>
  <property>
    <name>ozone.scm.datanode.bind.host</name>
    <value/>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The hostname or IP address used by the SCM service endpoint to
      bind.
    </description>
  </property>
  <property>
    <name>ozone.scm.datanode.id.dir</name>
    <value/>
    <tag>OZONE, MANAGEMENT</tag>
    <description>The path that datanodes will use to store the datanode ID.
      If this value is not set, then datanode ID is created under the
      metadata directory.
    </description>
  </property>
  <property>
    <name>ozone.scm.datanode.port</name>
    <value>9861</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The port number of the Ozone SCM service.
    </description>
  </property>
  <property>
    <name>ozone.scm.dead.node.interval</name>
    <value>10m</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The interval between heartbeats before a node is tagged as dead.
    </description>
  </property>
  <property>
    <name>ozone.scm.handler.count.key</name>
    <value>100</value>
    <tag>OZONE, MANAGEMENT, PERFORMANCE</tag>
    <description>
      The number of RPC handler threads for each SCM service
      endpoint.

      The default is appropriate for small clusters (tens of nodes).

      Set a value that is appropriate for the cluster size. Generally, HDFS
      recommends RPC handler count is set to 20 * log2(Cluster Size) with an
      upper limit of 200. However, SCM will not have the same amount of
      traffic as Namenode, so a value much smaller than that will work well too.
    </description>
  </property>
  <property>
    <name>hdds.heartbeat.interval</name>
    <value>30s</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The heartbeat interval from a data node to SCM. Yes,
      it is not three but 30, since most data nodes will heart beating via Ratis
      heartbeats. If a client is not able to talk to a data node, it will notify
      OM/SCM eventually. So a 30 second HB seems to work. This assumes that
      replication strategy used is Ratis if not, this value should be set to
      something smaller like 3 seconds.
      ozone.scm.pipeline.close.timeout should also be adjusted accordingly,
      if the default value for this config is not used.
    </description>
  </property>
  <property>
    <name>hdds.recon.heartbeat.interval</name>
    <value>60s</value>
    <tag>OZONE, MANAGEMENT, RECON</tag>
    <description>
      The heartbeat interval from a Datanode to Recon.
    </description>
  </property>
  <property>
    <name>ozone.scm.heartbeat.log.warn.interval.count</name>
    <value>10</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      Defines how frequently we will log the missing of a heartbeat to SCM.
      For example in the default case, we will write a warning message for each
      ten consecutive heartbeats that we miss to SCM. This helps in reducing
      clutter in a data node log, but trade off is that logs will have less of
      this statement.
    </description>
  </property>
  <property>
    <name>ozone.scm.heartbeat.rpc-timeout</name>
    <value>5s</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      Timeout value for the RPC from Datanode to SCM.
    </description>
  </property>
  <property>
    <name>ozone.scm.heartbeat.rpc-retry-count</name>
    <value>15</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      Retry count for the RPC from Datanode to SCM. The rpc-retry-interval
      is 1s by default. Make sure rpc-retry-count * (rpc-timeout +
      rpc-retry-interval) is less than hdds.heartbeat.interval.
    </description>
  </property>
  <property>
    <name>ozone.scm.heartbeat.rpc-retry-interval</name>
    <value>1s</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      Retry interval for the RPC from Datanode to SCM.
      Make sure rpc-retry-count * (rpc-timeout + rpc-retry-interval)
      is less than hdds.heartbeat.interval.
    </description>
  </property>
  <property>
    <name>ozone.scm.heartbeat.thread.interval</name>
    <value>3s</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      When a heartbeat from the data node arrives on SCM, It is queued for
      processing with the time stamp of when the heartbeat arrived. There is a
      heartbeat processing thread inside SCM that runs at a specified interval.
      This value controls how frequently this thread is run.

      There are some assumptions build into SCM such as this value should allow
      the heartbeat processing thread to run at least three times more
      frequently than heartbeats and at least five times more than stale node
      detection time. If you specify a wrong value, SCM will gracefully refuse
      to run. For more info look at the node manager tests in SCM.

      In short, you don't need to change this.
    </description>
  </property>
  <property>
    <name>ozone.scm.http-address</name>
    <value>0.0.0.0:9876</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The address and the base port where the SCM web ui will listen on.

      If the port is 0 then the server will start on a free port.
    </description>
  </property>
  <property>
    <name>ozone.scm.http-bind-host</name>
    <value>0.0.0.0</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The actual address the SCM web server will bind to. If this
      optional address is set, it overrides only the hostname portion of
      ozone.scm.http-address.
    </description>
  </property>
  <property>
    <name>ozone.scm.http.enabled</name>
    <value>true</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      Property to enable or disable SCM web ui.
    </description>
  </property>
  <property>
    <name>ozone.scm.https-address</name>
    <value>0.0.0.0:9877</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The address and the base port where the SCM web UI will listen
      on using HTTPS.

      If the port is 0 then the server will start on a free port.
    </description>
  </property>
  <property>
    <name>ozone.scm.https-bind-host</name>
    <value>0.0.0.0</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The actual address the SCM web server will bind to using HTTPS.
      If this optional address is set, it overrides only the hostname portion of
      ozone.scm.https-address.
    </description>
  </property>
  <property>
    <name>ozone.scm.names</name>
    <value/>
    <tag>OZONE, REQUIRED</tag>
    <description>
      The value of this property is a set of DNS | DNS:PORT | IP
      Address | IP:PORT. Written as a comma separated string. e.g. scm1,
      scm2:8020, 7.7.7.7:7777.
      This property allows datanodes to discover where SCM is, so that
      datanodes can send heartbeat to SCM.
    </description>
  </property>
  <property>
    <name>ozone.scm.stale.node.interval</name>
    <value>5m</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The interval for stale node flagging. Please
      see ozone.scm.heartbeat.thread.interval before changing this value.
    </description>
  </property>
  <property>
    <name>ozone.trace.enabled</name>
    <value>false</value>
    <tag>OZONE, DEBUG</tag>
    <description>
      Setting this flag to true dumps the HTTP request/ response in
      the logs. Very useful when debugging REST protocol.
    </description>
  </property>

  <property>
    <name>ozone.key.preallocation.max.blocks</name>
    <value>64</value>
    <tag>OZONE, OM, PERFORMANCE</tag>
    <description>
      While allocating blocks from OM, this configuration limits the maximum
      number of blocks being allocated. This configuration ensures that the
      allocated block response do not exceed rpc payload limit. If client needs
      more space for the write, separate block allocation requests will be made.
    </description>
  </property>

  <property>
    <name>ozone.client.list.cache</name>
    <value>1000</value>
    <tag>OZONE, PERFORMANCE</tag>
    <description>
      Configuration property to configure the cache size of client list calls.
    </description>
  </property>

  <property>
    <name>ozone.server.default.replication</name>
    <value>3</value>
    <tag>OZONE</tag>
    <description>
      Default replication value. The actual number of replications can be
      specified when writing the key. The default is used if replication
      is not specified when creating key or no default replication set at
      bucket. Supported values:
      For Standalone: 1
      For Ratis: 3
      For Erasure Coding(EC) supported format:
      {ECCodec}-{DataBlocks}-{ParityBlocks}-{ChunkSize}
        ECCodec: Codec for encoding stripe. Supported values : XOR, RS (Reed Solomon)
        DataBlocks: Number of data blocks in a stripe.
        ParityBlocks: Number of parity blocks in a stripe.
        ChunkSize: Chunk size in bytes. E.g. 1024k, 2048k etc.
        Supported combinations of {DataBlocks}-{ParityBlocks} : 3-2, 6-3, 10-4
    </description>
  </property>

  <property>
    <name>ozone.server.default.replication.type</name>
    <value>RATIS</value>
    <tag>OZONE</tag>
    <description>
      Default replication type to be used while writing key into ozone. The
      value can be specified when writing the key, default is used when
      nothing is specified when creating key or no default value set at bucket.
      Supported values: RATIS, STAND_ALONE, CHAINED and EC.
    </description>
  </property>

  <property>
    <name>ozone.client.bucket.replication.config.refresh.time.ms</name>
    <value>30000</value>
    <tag>OZONE</tag>
    <description>
      Default time period to refresh the bucket replication config in o3fs
      clients. Until the bucket replication config refreshed, client will
      continue to use existing replication config irrespective of whether bucket
      replication config updated at OM or not.
    </description>
  </property>

  <property>
    <name>hdds.container.close.threshold</name>
    <value>0.9f</value>
    <tag>OZONE, DATANODE</tag>
    <description>
      This determines the threshold to be used for closing a container.
      When the container used percentage reaches this threshold,
      the container will be closed. Value should be a positive, non-zero
      percentage in float notation (X.Yf), with 1.0f meaning 100%.
    </description>
  </property>
  <property>
    <name>ozone.rest.client.http.connection.max</name>
    <value>100</value>
    <tag>OZONE, CLIENT</tag>
    <description>
      This defines the overall connection limit for the connection pool used in
      RestClient.
    </description>
  </property>
  <property>
    <name>ozone.rest.client.http.connection.per-route.max</name>
    <value>20</value>
    <tag>OZONE, CLIENT</tag>
    <description>
      This defines the connection limit per one HTTP route/host. Total max
      connection is limited by ozone.rest.client.http.connection.max property.
    </description>
  </property>

  <property>
    <name>ozone.om.open.key.cleanup.service.interval</name>
    <value>24h</value>
    <tag>OZONE, OM, PERFORMANCE</tag>
    <description>
      A background job that periodically checks open key entries and marks
      expired open keys for deletion. This entry controls the interval of this
      cleanup check. Unit could be defined with postfix (ns,ms,s,m,h,d)
    </description>
  </property>

  <property>
    <name>ozone.om.open.key.cleanup.service.timeout</name>
    <value>300s</value>
    <tag>OZONE, OM, PERFORMANCE</tag>
    <description>A timeout value of open key cleanup service. If this is set
      greater than 0, the service will stop waiting for the open key deleting
      completion after this time. If timeout happens to a large proportion of
      open key deletion, this value needs to be increased or
      ozone.om.open.key.cleanup.limit.per.task should be decreased.
      Unit could be defined with postfix (ns,ms,s,m,h,d)
    </description>
  </property>

  <property>
    <name>ozone.om.open.key.expire.threshold</name>
    <value>7d</value>
    <tag>OZONE, OM, PERFORMANCE</tag>
    <description>
      Controls how long an open key operation is considered active. Specifically, if a key
      has been open longer than the value of this config entry, that open key is considered as
      expired (e.g. due to client crash). Unit could be defined with postfix (ns,ms,s,m,h,d)
    </description>
  </property>

  <property>
    <name>ozone.om.open.key.cleanup.limit.per.task</name>
    <value>1000</value>
    <tag>OZONE, OM, PERFORMANCE</tag>
    <description>
      The maximum number of open keys to be identified as expired and marked
      for deletion by one run of the open key cleanup service on the OM.
      This property is used to throttle the actual number of open key deletions
      on the OM.
    </description>
  </property>

  <property>
    <name>hadoop.tags.custom</name>
    <value>OZONE,MANAGEMENT,SECURITY,PERFORMANCE,DEBUG,CLIENT,SERVER,OM,SCM,
      CRITICAL,RATIS,CONTAINER,REQUIRED,REST,STORAGE,PIPELINE,STANDALONE,S3GATEWAY,RECON</value>
  </property>

  <property>
    <name>ozone.tags.system</name>
    <value>OZONE,MANAGEMENT,SECURITY,PERFORMANCE,DEBUG,CLIENT,SERVER,OM,SCM,
      CRITICAL,RATIS,CONTAINER,REQUIRED,REST,STORAGE,PIPELINE,STANDALONE,S3GATEWAY,TOKEN,TLS,RECON</value>
  </property>


  <property>
    <name>hdds.rest.rest-csrf.enabled</name>
    <value>false</value>
    <description>
      If true, then enables Object Store REST server protection against
      cross-site request forgery (CSRF).
    </description>
  </property>

  <property>
    <name>hdds.rest.http-address</name>
    <value>0.0.0.0:9880</value>
    <description>The http address of Object Store REST server inside the
      datanode.</description>
  </property>


  <property>
    <name>hdds.rest.netty.high.watermark</name>
    <value>65535</value>
    <description>
      High watermark configuration to Netty for Object Store REST server.
    </description>
  </property>

  <property>
    <name>hdds.rest.netty.low.watermark</name>
    <value>32768</value>
    <description>
      Low watermark configuration to Netty for Object Store REST server.
    </description>
  </property>

  <property>
    <name>hdds.datanode.plugins</name>
    <value/>
    <description>
      Comma-separated list of HDDS datanode plug-ins to be activated when
      HDDS service starts as part of datanode.
    </description>
  </property>
  <property>
    <name>hdds.datanode.storage.utilization.warning.threshold</name>
    <value>0.75</value>
    <tag>OZONE, SCM, MANAGEMENT</tag>
    <description>
      If a datanode overall storage utilization exceeds more than this
      value, a warning will be logged while processing the nodeReport in SCM.
    </description>
  </property>

  <property>
    <name>hdds.datanode.storage.utilization.critical.threshold</name>
    <value>0.95</value>
    <tag>OZONE, SCM, MANAGEMENT</tag>
    <description>
      If a datanode overall storage utilization exceeds more than this
      value, the datanode will be marked out of space.
    </description>
  </property>

  <property>
    <name>hdds.datanode.metadata.rocksdb.cache.size</name>
    <value>64MB</value>
    <tag>OZONE, DATANODE, MANAGEMENT</tag>
    <description>
        Size of the block metadata cache shared among RocksDB instances on each
        datanode. All containers on a datanode will share this cache.
    </description>
  </property>

  <property>
    <name>hdds.command.status.report.interval</name>
    <value>30s</value>
    <tag>OZONE, DATANODE, MANAGEMENT</tag>
    <description>Time interval of the datanode to send status of commands
      executed since last report. Unit could be defined with
      postfix (ns,ms,s,m,h,d)</description>
  </property>
  <property>
    <name>ozone.scm.pipeline.destroy.timeout</name>
    <value>66s</value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>
      Once a pipeline is closed, SCM should wait for the above configured time
      before destroying a pipeline.
    </description>
  </property>
  <property>
    <name>ozone.scm.pipeline.creation.interval</name>
    <value>120s</value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>
      SCM schedules a fixed interval job using the configured interval to
      create pipelines.
    </description>
  </property>
  <property>
    <name>ozone.scm.pipeline.scrub.interval</name>
    <value>5m</value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>
      SCM schedules a fixed interval job using the configured interval to
      scrub pipelines.
    </description>
  </property>
  <property>
    <name>ozone.scm.expired.container.replica.op.scrub.interval</name>
    <value>5m</value>
    <tag>OZONE, SCM, CONTAINER</tag>
    <description>
      SCM schedules a fixed interval job using the configured interval to
      scrub expired container replica operation.
    </description>
  </property>
  <property>
    <name>ozone.scm.expired.container.replica.op.time.out</name>
    <value>30m</value>
    <tag>OZONE, SCM, CONTAINER</tag>
    <description>
      Timeout for the container replica operations(ADD/DELETE).After this
      timeout the command will be retied
    </description>
  </property>
  <property>
    <name>ozone.scm.pipeline.creation.auto.factor.one</name>
    <value>true</value>
    <tag>OZONE, SCM, PIPELINE</tag>
    <description>
      If enabled, SCM will auto create RATIS factor ONE pipeline.
    </description>
  </property>
  <property>
    <name>hdds.scm.safemode.threshold.pct</name>
    <value>0.99</value>
    <tag>HDDS,SCM,OPERATION</tag>
    <description> % of containers which should have at least one
      reported replica before SCM comes out of safe mode.
    </description>
  </property>

  <property>
    <name>hdds.scm.wait.time.after.safemode.exit</name>
    <value>5m</value>
    <tag>HDDS,SCM,OPERATION</tag>
    <description> After exiting safemode, wait for configured interval of
      time to start replication monitor and cleanup activities of unhealthy
      pipelines.
    </description>
  </property>

  <property>
    <name>hdds.scm.safemode.enabled</name>
    <value>true</value>
    <tag>HDDS,SCM,OPERATION</tag>
    <description>Boolean value to enable or disable SCM safe mode.
    </description>
  </property>

  <property>
    <name>hdds.scm.safemode.min.datanode</name>
    <value>1</value>
    <tag>HDDS,SCM,OPERATION</tag>
    <description>Minimum DataNodes which should be registered to get SCM out of
      safe mode.
    </description>
  </property>

  <property>
    <name>hdds.scm.safemode.pipeline-availability.check</name>
    <value>true</value>
    <tag>HDDS,SCM,OPERATION</tag>
    <description>
      Boolean value to enable pipeline availability check during SCM safe mode.
    </description>
  </property>

  <property>
    <name>hdds.scm.safemode.healthy.pipeline.pct</name>
    <value>0.10</value>
    <tag>HDDS,SCM,OPERATION</tag>
    <description>
      Percentage of healthy pipelines, where all 3 datanodes are reported in the
      pipeline.
    </description>
  </property>

  <property>
    <name>hdds.scm.safemode.atleast.one.node.reported.pipeline.pct</name>
    <value>0.90</value>
    <tag>HDDS,SCM,OPERATION</tag>
    <description>
      Percentage of pipelines, where at least one datanode is reported in the
      pipeline.
    </description>
  </property>

  <property>
    <name>hdds.container.action.max.limit</name>
    <value>20</value>
    <tag>DATANODE</tag>
    <description>
      Maximum number of Container Actions sent by the datanode to SCM in a
      single heartbeat.
    </description>
  </property>

  <property>
    <name>hdds.pipeline.action.max.limit</name>
    <value>20</value>
    <tag>DATANODE</tag>
    <description>
      Maximum number of Pipeline Actions sent by the datanode to SCM in a
      single heartbeat.
    </description>
  </property>
  <property>
    <name>hdds.scm.watcher.timeout</name>
    <value>10m</value>
    <tag>OZONE, SCM, MANAGEMENT</tag>
    <description>
      Timeout for the watchers of the HDDS SCM CommandWatchers. After this
      duration the Copy/Delete container commands will be sent again to the
      datanode unless the datanode confirms the completion.
    </description>
  </property>

  <property>
    <name>hdds.db.profile</name>
    <value>DISK</value>
    <tag>OZONE, OM, PERFORMANCE</tag>
    <description>This property allows user to pick a configuration
    that tunes the RocksDB settings for the hardware it is running
    on. Right now, we have SSD and DISK as profile options.</description>
  </property>

  <property>
    <name>hdds.datanode.replication.work.dir</name>
    <tag>DATANODE</tag>
    <description>Temporary which is used during the container replication
      betweeen datanodes. Should have enough space to store multiple container
      (in compressed format), but doesn't require fast io access such as SSD.
    </description>
  </property>

  <property>
    <name>hdds.scm.safemode.pipeline.creation</name>
    <value>true</value>
    <tag>HDDS,SCM,OPERATION</tag>
    <description>
      Boolean value to enable background pipeline creation in SCM safe mode.
    </description>
  </property>

  <property>
    <name>hdds.scm.kerberos.keytab.file</name>
    <value>/etc/security/keytabs/SCM.keytab</value>
    <tag>SCM, SECURITY, KERBEROS</tag>
    <description> The keytab file used by SCM daemon to login as its service principal.
    </description>
  </property>
  <property>
    <name>hdds.scm.kerberos.principal</name>
    <value>SCM/_HOST@REALM</value>
    <tag>SCM, SECURITY, KERBEROS</tag>
    <description>The SCM service principal. e.g. scm/_HOST@REALM.COM</description>
  </property>
  <property>
    <name>hdds.scm.http.auth.kerberos.principal</name>
    <value>HTTP/_HOST@REALM</value>
    <tag>SCM, SECURITY, KERBEROS</tag>
    <description>
      SCM http server service principal if SPNEGO is enabled for SCM http server.
    </description>
  </property>
  <property>
    <name>hdds.scm.http.auth.kerberos.keytab</name>
    <value>/etc/security/keytabs/HTTP.keytab</value>
    <tag>SCM, SECURITY, KERBEROS</tag>
    <description>
      The keytab file used by SCM http server to login as its service
      principal if SPNEGO is enabled for SCM http server.
    </description>
  </property>

  <property>
    <name>ozone.s3g.volume.name</name>
    <value>s3v</value>
    <tag>OZONE, S3GATEWAY</tag>
    <description>
      The volume name to access through the s3gateway.
    </description>
  </property>
  <property>
    <name>ozone.s3g.domain.name</name>
    <value/>
    <tag>OZONE, S3GATEWAY</tag>
    <description>List of Ozone S3Gateway domain names. If multiple
      domain names to be provided, they should be a "," separated.
      This parameter is only required when virtual host style pattern is
      followed.</description>
  </property>

  <property>
    <name>ozone.s3g.http-address</name>
    <value>0.0.0.0:9878</value>
    <tag>OZONE, S3GATEWAY</tag>
    <description>The address and the base port where the Ozone S3Gateway
      Server will
      listen on.</description>
  </property>

  <property>
    <name>ozone.s3g.http-bind-host</name>
    <value>0.0.0.0</value>
    <tag>OZONE, S3GATEWAY</tag>
    <description>The actual address the HTTP server will bind to. If this optional address
      is set, it overrides only the hostname portion of ozone.s3g.http-address.
      This is useful for making the Ozone S3Gateway HTTP server listen on all
      interfaces by setting it to 0.0.0.0.</description>
  </property>

  <property>
    <name>ozone.s3g.http.enabled</name>
    <value>true</value>
    <tag>OZONE, S3GATEWAY</tag>
    <description>The boolean which enables the Ozone S3Gateway server
      .</description>
  </property>

  <property>
    <name>ozone.s3g.https-address</name>
    <value/>
    <tag>OZONE, S3GATEWAY</tag>
    <description>Ozone S3Gateway serverHTTPS server address and port
      .</description>
  </property>

  <property>
    <name>ozone.s3g.https-bind-host</name>
    <value/>
    <tag>OZONE, S3GATEWAY</tag>
    <description>The actual address the HTTPS server will bind to. If this optional address
      is set, it overrides only the hostname portion of ozone.s3g.https-address.
      This is useful for making the Ozone S3Gateway HTTPS server listen on all
      interfaces by setting it to 0.0.0.0.</description>
  </property>

  <property>
    <name>ozone.s3g.http.auth.kerberos.principal</name>
    <value>HTTP/_HOST@REALM</value>
    <tag>OZONE, S3GATEWAY, SECURITY, KERBEROS</tag>
    <description>The server principal used by Ozone S3Gateway server. This is
      typically set to
      HTTP/_HOST@REALM.TLD The SPNEGO server principal begins with the prefix
      HTTP/ by convention.</description>
  </property>

  <property>
    <name>ozone.s3g.http.auth.kerberos.keytab</name>
    <value>/etc/security/keytabs/HTTP.keytab</value>
    <tag>OZONE, S3GATEWAY, SECURITY, KERBEROS</tag>
    <description>The keytab file used by the S3Gateway server to login as its
      service principal. </description>
  </property>

  <property>
    <name>ozone.om.save.metrics.interval</name>
    <value>5m</value>
    <tag>OZONE, OM</tag>
    <description>Time interval used to store the omMetrics in to a
      file. Background thread periodically stores the OM metrics in to a
      file. Unit could be defined with postfix (ns,ms,s,m,h,d)
    </description>
  </property>
  <property>
    <name>ozone.security.enabled</name>
    <value>false</value>
    <tag>OZONE, SECURITY, KERBEROS</tag>
    <description>True if security is enabled for ozone. When this property is
     true, hadoop.security.authentication should be Kerberos.
    </description>
  </property>
  <property>
    <name>ozone.security.http.kerberos.enabled</name>
    <value>false</value>
    <tag>OZONE, SECURITY, KERBEROS</tag>
    <description>True if Kerberos authentication for Ozone HTTP web consoles
      is enabled using the SPNEGO protocol. When this property is
      true, hadoop.security.authentication should be Kerberos and
      ozone.security.enabled should be set to true.
    </description>
  </property>
  <property>
    <name>ozone.http.filter.initializers</name>
    <value/>
    <tag>OZONE, SECURITY, KERBEROS</tag>
    <description>Set to org.apache.hadoop.security.AuthenticationFilterInitializer
      to enable Kerberos authentication for Ozone HTTP web consoles
      is enabled using the SPNEGO protocol. When this property is
      set, ozone.security.http.kerberos.enabled should be set to true.
    </description>
  </property>


  <property>
    <name>ozone.client.read.timeout</name>
    <value>30s</value>
    <tag>OZONE, CLIENT, MANAGEMENT</tag>
    <description>
      Timeout for ozone grpc client during read.
    </description>
  </property>

  <property>
    <name>ozone.om.unflushed.transaction.max.count</name>
    <value>10000</value>
    <tag>OZONE, OM</tag>
    <description>the unflushed transactions here are those requests that have been
      applied to OM state machine but not been flushed to OM rocksdb. when OM meets
      high concurrency-pressure and flushing is not fast enough, too many pending
      requests will be hold in memory and will lead to long GC of OM, which will slow
      down flushing further. there are some cases that flushing is slow, for example,
      1 rocksdb is on a HDD, which has poor IO performance than SSD.
      2 a big compaction is happening internally in rocksdb and write stall of
      rocksdb happens.
      3 long GC, which may caused by other factors.
      the property is to limit the max count of unflushed transactions, so that the
      maximum memory occupied by unflushed transactions is limited.
    </description>
  </property>

  <property>
    <name>ozone.om.lock.fair</name>
    <value>false</value>
    <description>If this is true, the Ozone Manager lock will be used in Fair
      mode, which will schedule threads in the order received/queued. If this is
      false, uses non-fair ordering. See
      java.util.concurrent.locks.ReentrantReadWriteLock
      for more information on fair/non-fair locks.
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.enable</name>
    <value>true</value>
    <tag>OZONE, OM, RATIS, MANAGEMENT</tag>
    <description>Property to enable or disable Ratis server on OM.
    Please note - this is a temporary property to disable OM Ratis server.
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.port</name>
    <value>9872</value>
    <tag>OZONE, OM, RATIS</tag>
    <description>
      The port number of the OzoneManager's Ratis server.
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.rpc.type</name>
    <value>GRPC</value>
    <tag>OZONE, OM, RATIS, MANAGEMENT</tag>
    <description>Ratis supports different kinds of transports like netty, GRPC,
      Hadoop RPC etc. This picks one of those for this cluster.
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.storage.dir</name>
    <value/>
    <tag>OZONE, OM, STORAGE, MANAGEMENT, RATIS</tag>
    <description>This directory is used for storing OM's Ratis metadata like
      logs. If this is not set then default metadata dirs is used. A warning
      will be logged if this not set. Ideally, this should be mapped to a
      fast disk like an SSD.
      If undefined, OM ratis storage dir will fallback to ozone.metadata.dirs.
      This fallback approach is not recommended for production environments.
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.segment.size</name>
    <value>4MB</value>
    <tag>OZONE, OM, RATIS, PERFORMANCE</tag>
    <description>The size of the raft segment used by Apache Ratis on OM.
      (4 MB by default)
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.segment.preallocated.size</name>
    <value>4MB</value>
    <tag>OZONE, OM, RATIS, PERFORMANCE</tag>
    <description>The size of the buffer which is preallocated for raft segment
      used by Apache Ratis on OM.(4 MB by default)
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.log.appender.queue.num-elements</name>
    <value>1024</value>
    <tag>OZONE, DEBUG, OM, RATIS</tag>
    <description>Number of operation pending with Raft's Log Worker.
    </description>
  </property>
  <property>
    <name>ozone.om.ratis.log.appender.queue.byte-limit</name>
    <value>32MB</value>
    <tag>OZONE, DEBUG, OM, RATIS</tag>
    <description>Byte limit for Raft's Log Worker queue.
    </description>
  </property>
  <property>
    <name>ozone.om.ratis.log.purge.gap</name>
    <value>1000000</value>
    <tag>OZONE, OM, RATIS</tag>
    <description>The minimum gap between log indices for Raft server to purge
      its log segments after taking snapshot.
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.server.request.timeout</name>
    <value>3s</value>
    <tag>OZONE, OM, RATIS, MANAGEMENT</tag>
    <description>The timeout duration for OM's ratis server request .</description>
  </property>

  <property>
    <name>ozone.om.ratis.server.retry.cache.timeout</name>
    <value>600000ms</value>
    <tag>OZONE, OM, RATIS, MANAGEMENT</tag>
    <description>Retry Cache entry timeout for OM's ratis server.</description>
  </property>

  <property>
    <name>ozone.om.ratis.minimum.timeout</name>
    <value>5s</value>
    <tag>OZONE, OM, RATIS, MANAGEMENT</tag>
    <description>The minimum timeout duration for OM's Ratis server rpc.
    </description>
  </property>

  <property>
    <name>ozone.om.leader.election.minimum.timeout.duration</name>
    <value>5s</value>
    <tag>OZONE, OM, RATIS, MANAGEMENT, DEPRECATED</tag>
    <description>DEPRECATED. Leader election timeout uses ratis
      rpc timeout which can be set via ozone.om.ratis.minimum.timeout.
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.server.leaderelection.pre-vote </name>
    <value>false</value>
    <tag>OZONE, OM, RATIS, MANAGEMENT</tag>
    <description>Enable/disable OM HA leader election pre-vote phase.
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.server.failure.timeout.duration</name>
    <value>120s</value>
    <tag>OZONE, OM, RATIS, MANAGEMENT</tag>
    <description>The timeout duration for ratis server failure detection,
      once the threshold has reached, the ratis state machine will be informed
      about the failure in the ratis ring.
    </description>
  </property>

  <property>
    <name>ozone.om.ratis.snapshot.dir</name>
    <value/>
    <tag>OZONE, OM, STORAGE, MANAGEMENT, RATIS</tag>
    <description>This directory is used for storing OM's snapshot
      related files like the ratisSnapshotIndex and DB checkpoint from leader
      OM.
      If undefined, OM snapshot dir will fallback to ozone.metadata.dirs.
      This fallback approach is not recommended for production environments.
    </description>
  </property>
  <property>
    <name>ozone.om.snapshot.provider.socket.timeout</name>
    <value>5000s</value>
    <tag>OZONE, OM, HA, MANAGEMENT</tag>
    <description>
      Socket timeout for HTTP call made by OM Snapshot Provider to request
      OM snapshot from OM Leader.
    </description>
  </property>
  <property>
    <name>ozone.om.snapshot.provider.connection.timeout</name>
    <value>5000s</value>
    <tag>OZONE, OM, HA, MANAGEMENT</tag>
    <description>
      Connection timeout for HTTP call made by OM Snapshot Provider to request
      OM snapshot from OM Leader.
    </description>
  </property>
  <property>
    <name>ozone.om.snapshot.provider.request.timeout</name>
    <value>5000ms</value>
    <tag>OZONE, OM, HA, MANAGEMENT</tag>
    <description>
      Connection request timeout for HTTP call made by OM Snapshot Provider to
      request OM snapshot from OM Leader.
    </description>
  </property>

  <property>
    <name>ozone.acl.authorizer.class</name>
    <value>org.apache.hadoop.ozone.security.acl.OzoneAccessAuthorizer</value>
    <tag>OZONE, SECURITY, ACL</tag>
    <description>Acl authorizer for Ozone.
    </description>
  </property>
  <property>
    <name>ozone.acl.enabled</name>
    <value>false</value>
    <tag>OZONE, SECURITY, ACL</tag>
    <description>Key to enable/disable ozone acls.</description>
  </property>
  <property>
    <name>ozone.om.kerberos.keytab.file</name>
    <value>/etc/security/keytabs/OM.keytab</value>
    <tag>OZONE, SECURITY, KERBEROS</tag>
    <description> The keytab file used by OzoneManager daemon to login as its
      service principal. The principal name is configured with
      ozone.om.kerberos.principal.
    </description>
  </property>
  <property>
    <name>ozone.om.kerberos.principal</name>
    <value>OM/_HOST@REALM</value>
    <tag>OZONE, SECURITY, KERBEROS</tag>
    <description>The OzoneManager service principal. Ex om/_HOST@REALM.COM</description>
  </property>
  <property>
    <name>ozone.om.http.auth.kerberos.principal</name>
    <value>HTTP/_HOST@REALM</value>
    <tag>OZONE, SECURITY, KERBEROS</tag>
    <description>
      Ozone Manager http server service principal if SPNEGO is enabled for om http server.
    </description>
  </property>
  <property>
    <name>ozone.om.http.auth.kerberos.keytab</name>
    <value>/etc/security/keytabs/HTTP.keytab</value>
    <tag>OZONE, SECURITY, KERBEROS</tag>
    <description>
      The keytab file used by OM http server to login as its service
      principal if SPNEGO is enabled for om http server.
    </description>
  </property>
  <property>
    <name>hdds.key.len</name>
    <value>2048</value>
    <tag>SCM, HDDS, X509, SECURITY</tag>
    <description>
      SCM CA key length.  This is an algorithm-specific metric, such as modulus length, specified in number of bits.
    </description>
  </property>
  <property>
    <name>hdds.key.dir.name</name>
    <value>keys</value>
    <tag>SCM, HDDS, X509, SECURITY</tag>
    <description>
      Directory to store public/private key for SCM CA. This is relative to ozone/hdds meteadata dir.
    </description>
  </property>
  <property>
    <name>hdds.block.token.expiry.time</name>
    <value>1d</value>
    <tag>OZONE, HDDS, SECURITY, TOKEN</tag>
    <description>
      Default value for expiry time of block token. 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>hdds.block.token.enabled</name>
    <value>false</value>
    <tag>OZONE, HDDS, SECURITY, TOKEN</tag>
    <description>True if block tokens are enabled, else false.</description>
  </property>
  <property>
    <name>hdds.container.token.enabled</name>
    <value>false</value>
    <tag>OZONE, HDDS, SECURITY, TOKEN</tag>
    <description>True if container tokens are enabled, else false.</description>
  </property>
  <property>
    <name>hdds.x509.file.name</name>
    <value>certificate.crt</value>
    <tag>OZONE, HDDS, SECURITY</tag>
    <description>Certificate file name.</description>
  </property>
  <property>
    <name>hdds.grpc.tls.provider</name>
    <value>OPENSSL</value>
    <tag>OZONE, HDDS, SECURITY, TLS</tag>
    <description>HDDS GRPC server TLS provider.</description>
  </property>
  <property>
    <name>hdds.grpc.tls.enabled</name>
    <value>false</value>
    <tag>OZONE, HDDS, SECURITY, TLS</tag>
    <description>If HDDS GRPC server TLS is enabled.</description>
  </property>
  <property>
    <name>hdds.x509.default.duration</name>
    <value>P365D</value>
    <tag>OZONE, HDDS, SECURITY</tag>
    <description>Default duration for which x509 certificates issued by SCM are
      valid. The formats accepted are based on the ISO-8601 duration format
      PnDTnHnMn.nS</description>
  </property>
  <property>
    <name>hdds.x509.dir.name</name>
    <value>certs</value>
    <tag>OZONE, HDDS, SECURITY</tag>
    <description>X509 certificate directory name.</description>
  </property>
  <property>
    <name>hdds.x509.max.duration</name>
    <value>P1865D</value>
    <tag>OZONE, HDDS, SECURITY</tag>
    <description>Max time for which certificate issued by SCM CA are valid.
      This duration is used for self-signed root cert and scm sub-ca certs
      issued by root ca. The formats accepted are based on the ISO-8601
      duration format PnDTnHnMn.nS</description>
  </property>
  <property>
    <name>hdds.x509.signature.algorithm</name>
    <value>SHA256withRSA</value>
    <tag>OZONE, HDDS, SECURITY</tag>
    <description>X509 signature certificate.</description>
  </property>
  <property>
    <name>ozone.scm.security.handler.count.key</name>
    <value>2</value>
    <tag>OZONE, HDDS, SECURITY</tag>
    <description>Threads configured for SCMSecurityProtocolServer.</description>
  </property>
  <property>
    <name>ozone.scm.security.service.address</name>
    <value/>
    <tag>OZONE, HDDS, SECURITY</tag>
    <description>Address of SCMSecurityProtocolServer.</description>
  </property>
  <property>
    <name>ozone.scm.security.service.bind.host</name>
    <value>0.0.0.0</value>
    <tag>OZONE, HDDS, SECURITY</tag>
    <description>SCM security server host.</description>
  </property>
  <property>
    <name>ozone.scm.security.service.port</name>
    <value>9961</value>
    <tag>OZONE, HDDS, SECURITY</tag>
    <description>SCM security server port.</description>
  </property>
  <property>
    <name>ozone.scm.service.ids</name>
    <value></value>
    <tag>OZONE, SCM, HA</tag>
    <description>
      Comma-separated list of SCM service Ids. This property allows the client
      to figure out quorum of OzoneManager address.
    </description>
  </property>
  <property>
    <name>ozone.scm.default.service.id</name>
    <value></value>
    <tag>OZONE, SCM, HA</tag>
    <description>
      Service ID of the SCM. If this is not set fall back to
      ozone.scm.service.ids to find the service ID it belongs to.
    </description>
  </property>
  <property>
    <name>ozone.scm.nodes.EXAMPLESCMSERVICEID</name>
    <value></value>
    <tag>OZONE, SCM, HA</tag>
    <description>
      Comma-separated list of SCM node Ids for a given SCM service ID (eg.
      EXAMPLESCMSERVICEID). The SCM service ID should be the value (one of the
      values if there are multiple) set for the parameter ozone.scm.service.ids.

      Unique identifiers for each SCM Node, delimited by commas. This will be
      used by SCMs in HA setup to determine all the SCMs
      belonging to the same SCM in the cluster. For example, if you
      used “scmService1” as the SCM service ID previously, and you wanted to
      use “scm1”, “scm2” and "scm3" as the individual IDs of the SCMs,
      you would configure a property ozone.scm.nodes.scmService1, and its value
      "scm1,scm2,scm3".
    </description>
  </property>
  <property>
    <name>ozone.scm.node.id</name>
    <value></value>
    <tag>OZONE, SCM, HA</tag>
    <description>
      The ID of this SCM node. If the SCM node ID is not configured it
      is determined automatically by matching the local node's address
      with the configured address.

      If node ID is not deterministic from the configuration, then it is set
      to the scmId from the SCM version file.
    </description>
  </property>
  <property>
    <name>ozone.scm.primordial.node.id</name>
    <value></value>
    <tag>OZONE, SCM, HA</tag>
    <description>
      optional config, if being set will cause scm --init to only take effect on
      the specific node and ignore scm --bootstrap cmd.
      Similarly, scm --init will be ignored on the non-primordial scm nodes.
      The config can either be set equal to the hostname or the node id of any
      of the scm nodes.
      With the config set, applications/admins can safely execute init and
      bootstrap commands safely on all scm instances.

      If a cluster is upgraded from non-ratis to ratis based SCM, scm --init
      needs to re-run for switching from
      non-ratis based SCM to ratis-based SCM on the primary node.
    </description>
  </property>
  <property>
    <name>ozone.scm.skip.bootstrap.validation</name>
    <value>false</value>
    <tag>OZONE, SCM, HA</tag>
    <description>
      optional config, the config when set to true skips the clusterId
      validation from leader scm during bootstrap
    </description>
  </property>

  <property>
    <name>ozone.scm.ratis.port</name>
    <value>9894</value>
    <tag>OZONE, SCM, HA, RATIS</tag>
    <description>
      The port number of the SCM's Ratis server.
    </description>
  </property>

  <property>
    <name>ozone.scm.grpc.port</name>
    <value>9895</value>
    <tag>OZONE, SCM, HA, RATIS</tag>
    <description>
      The port number of the SCM's grpc server.
    </description>
  </property>

  <property>
    <name>hdds.metadata.dir</name>
    <value/>
    <tag>X509, SECURITY</tag>
    <description>
      Absolute path to HDDS metadata dir.
    </description>
  </property>
  <property>
    <name>hdds.priv.key.file.name</name>
    <value>private.pem</value>
    <tag>X509, SECURITY</tag>
    <description>
      Name of file which stores private key generated for SCM CA.
    </description>
  </property>
  <property>
    <name>hdds.public.key.file.name</name>
    <value>public.pem</value>
    <tag>X509, SECURITY</tag>
    <description>
      Name of file which stores public key generated for SCM CA.
    </description>
  </property>
  <property>
    <name>ozone.manager.delegation.remover.scan.interval</name>
    <value>3600000</value>
    <description>
      Time interval after which ozone secret manger scans for expired
      delegation token.
    </description>
  </property>
  <property>
    <name>ozone.manager.delegation.token.renew-interval</name>
    <value>1d</value>
    <description>
      Default time interval after which ozone delegation token will
      require renewal before any further use.
    </description>
  </property>
  <property>
    <name>ozone.manager.delegation.token.max-lifetime</name>
    <value>7d</value>
    <description>
      Default max time interval after which ozone delegation token will
      not be renewed.
    </description>
  </property>

  <property>
    <name>ozone.fs.iterate.batch-size</name>
    <value>100</value>
    <tag>OZONE, OZONEFS</tag>
    <description>
      Iterate batch size of delete when use BasicOzoneFileSystem.
    </description>
  </property>
  <property>
    <name>ozone.manager.db.checkpoint.transfer.bandwidthPerSec</name>
    <value>0</value>
    <tag>OZONE</tag>
    <description>
      Maximum bandwidth used for Ozone Manager DB checkpoint download through
      the servlet.
    </description>
  </property>

  <property>
    <name>ozone.freon.http-address</name>
    <value>0.0.0.0:9884</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The address and the base port where the FREON web ui will listen on.
      If the port is 0 then the server will start on a free port.
    </description>
  </property>
  <property>
    <name>ozone.freon.http-bind-host</name>
    <value>0.0.0.0</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The actual address the Freon web server will bind to. If this
      optional address is set, it overrides only the hostname portion of
      ozone.freon.http-address.
    </description>
  </property>
  <property>
    <name>ozone.freon.http.enabled</name>
    <value>true</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      Property to enable or disable FREON web ui.
    </description>
  </property>
  <property>
    <name>ozone.freon.https-address</name>
    <value>0.0.0.0:9885</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The address and the base port where the Freon web server will listen
      on using HTTPS.
      If the port is 0 then the server will start on a free port.
    </description>
  </property>
  <property>
    <name>ozone.freon.https-bind-host</name>
    <value>0.0.0.0</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The actual address the Freon web server will bind to using HTTPS.
      If this optional address is set, it overrides only the hostname portion of
      ozone.freon.http-address.
    </description>
  </property>
  <property>
    <name>ozone.freon.http.auth.kerberos.principal</name>
    <value>HTTP/_HOST@REALM</value>
    <tag>SECURITY</tag>
    <description>
     Security principal used by freon.
    </description>
  </property>
  <property>
    <name>ozone.freon.http.auth.kerberos.keytab</name>
    <value>/etc/security/keytabs/HTTP.keytab</value>
    <tag>SECURITY</tag>
    <description>
       Keytab used by Freon.
    </description>
  </property>
  <property>
    <name>hdds.security.client.datanode.container.protocol.acl</name>
    <value>*</value>
    <tag>SECURITY</tag>
    <description>
      Comma separated list of users and groups allowed to access
      client datanode container protocol.
    </description>
  </property>
  <property>
    <name>hdds.security.client.scm.block.protocol.acl</name>
    <value>*</value>
    <tag>SECURITY</tag>
    <description>
      Comma separated list of users and groups allowed to access
      client scm block protocol.
    </description>
  </property>
  <property>
    <name>hdds.security.client.scm.certificate.protocol.acl</name>
    <value>*</value>
    <tag>SECURITY</tag>
    <description>
      Comma separated list of users and groups allowed to access
      client scm certificate protocol.
    </description>
  </property>
  <property>
    <name>hdds.security.client.scm.container.protocol.acl</name>
    <value>*</value>
    <tag>SECURITY</tag>
    <description>
      Comma separated list of users and groups allowed to access
      client scm container protocol.
    </description>
  </property>
  <property>
    <name>ozone.om.security.client.protocol.acl</name>
    <value>*</value>
    <tag>SECURITY</tag>
    <description>
      Comma separated list of users and groups allowed to access
      client ozone manager protocol.
    </description>
  </property>
  <property>
    <name>ozone.om.security.admin.protocol.acl</name>
    <value>*</value>
    <tag>SECURITY</tag>
    <description>
      Comma separated list of users and groups allowed to access ozone
      manager admin protocol.
    </description>
  </property>

  <property>
    <name>hdds.datanode.http.auth.kerberos.principal</name>
    <value>HTTP/_HOST@REALM</value>
    <tag>HDDS, SECURITY, MANAGEMENT, KERBEROS</tag>
    <description>
      The kerberos principal for the datanode http server.
    </description>
  </property>
  <property>
    <name>hdds.datanode.http.auth.kerberos.keytab</name>
    <value>/etc/security/keytabs/HTTP.keytab</value>
    <tag>HDDS, SECURITY, MANAGEMENT, KERBEROS</tag>
    <description>
      The kerberos keytab file for datanode http server
    </description>
  </property>
  <property>
    <name>hdds.datanode.http-address</name>
    <value>0.0.0.0:9882</value>
    <tag>HDDS, MANAGEMENT</tag>
    <description>
      The address and the base port where the Datanode web ui will listen on.
      If the port is 0 then the server will start on a free port.
    </description>
  </property>
  <property>
    <name>hdds.datanode.http-bind-host</name>
    <value>0.0.0.0</value>
    <tag>HDDS, MANAGEMENT</tag>
    <description>
      The actual address the Datanode web server will bind to. If this
      optional address is set, it overrides only the hostname portion of
      hdds.datanode.http-address.
    </description>
  </property>
  <property>
    <name>hdds.datanode.http.enabled</name>
    <value>true</value>
    <tag>HDDS, MANAGEMENT</tag>
    <description>
      Property to enable or disable Datanode web ui.
    </description>
  </property>
  <property>
    <name>hdds.datanode.https-address</name>
    <value>0.0.0.0:9883</value>
    <tag>HDDS, MANAGEMENT, SECURITY</tag>
    <description>
      The address and the base port where the Datanode web UI will listen
      on using HTTPS.

      If the port is 0 then the server will start on a free port.
    </description>
  </property>
  <property>
    <name>hdds.datanode.https-bind-host</name>
    <value>0.0.0.0</value>
    <tag>HDDS, MANAGEMENT, SECURITY</tag>
    <description>
      The actual address the Datanode web server will bind to using HTTPS.
      If this optional address is set, it overrides only the hostname portion of
      hdds.datanode.http-address.
    </description>
  </property>
  <property>
    <name>ozone.client.failover.max.attempts</name>
    <value>500</value>
    <description>
      Expert only. Ozone RpcClient attempts talking to each OzoneManager
      ipc.client.connect.max.retries (default = 10) number of times before
      failing over to another OzoneManager, if available. This parameter
      represents the number of times the client will failover before giving
      up. This value is kept high so that client does not give up trying to
      connect to OMs easily.
    </description>
  </property>
  <property>
    <name>ozone.client.wait.between.retries.millis</name>
    <value>2000</value>
    <description>
      Expert only. The time to wait, in milliseconds, between retry attempts
      to contact OM. Wait time increases linearly if same OM is retried
      again. If retrying on multiple OMs proxies in round robin fashion, the
      wait time is introduced after all the OM proxies have been attempted once.
    </description>
  </property>
  <property>
    <name>ozone.om.admin.protocol.max.retries</name>
    <value>20</value>
    <tag>OM, MANAGEMENT</tag>
    <description>
      Expert only. The maximum number of retries for Ozone Manager Admin
      protocol on each OM.
    </description>
  </property>
  <property>
    <name>ozone.om.admin.protocol.wait.between.retries</name>
    <value>1000</value>
    <tag>OM, MANAGEMENT</tag>
    <description>
      Expert only. The time to wait, in milliseconds, between retry attempts
      for Ozone Manager Admin protocol.
    </description>
  </property>
  <property>
    <name>ozone.recon.http.enabled</name>
    <value>true</value>
    <tag>RECON, MANAGEMENT</tag>
    <description>
      Property to enable or disable Recon web user interface.
    </description>
  </property>
  <property>
    <name>ozone.recon.http-address</name>
    <value>0.0.0.0:9888</value>
    <tag>RECON, MANAGEMENT</tag>
    <description>
      The address and the base port where the Recon web UI will listen on.

      If the port is 0, then the server will start on a free port. However, it
      is best to specify a well-known port, so it is easy to connect and see
      the Recon management UI.
    </description>
  </property>
  <property>
    <name>ozone.recon.http-bind-host</name>
    <value>0.0.0.0</value>
    <tag>RECON, MANAGEMENT</tag>
    <description>
      The actual address the Recon server will bind to. If this optional
      the address is set, it overrides only the hostname portion of
      ozone.recon.http-address.
    </description>
  </property>
  <property>
    <name>ozone.recon.https-bind-host</name>
    <value>0.0.0.0</value>
    <tag>RECON, MANAGEMENT, SECURITY</tag>
    <description>
      The actual address the Recon web server will bind to using HTTPS.
      If this optional address is set, it overrides only the hostname portion of
      ozone.recon.https-address.
    </description>
  </property>
  <property>
    <name>ozone.recon.https-address</name>
    <value>0.0.0.0:9889</value>
    <tag>RECON, MANAGEMENT, SECURITY</tag>
    <description>
      The address and the base port where the Recon web UI will listen
      on using HTTPS. If the port is 0 then the server will start on a free
      port.
    </description>
  </property>
  <property>
    <name>ozone.recon.http.auth.kerberos.keytab</name>
    <value>/etc/security/keytabs/HTTP.keytab</value>
    <tag>RECON, SECURITY, KERBEROS</tag>
    <description>
      The keytab file for HTTP Kerberos authentication in Recon.
    </description>
  </property>
  <property>
    <name>ozone.recon.http.auth.kerberos.principal</name>
    <value>HTTP/_HOST@REALM</value>
    <tag>RECON, SECURITY, KERBEROS</tag>
    <description>The server principal used by Ozone Recon server. This is
      typically set to HTTP/_HOST@REALM.TLD The SPNEGO server principal
      begins with the prefix HTTP/ by convention.
    </description>
  </property>
  <property>
    <name>ozone.recon.administrators</name>
    <value/>
    <tag>RECON, SECURITY</tag>
    <description>
      Recon administrator users delimited by a comma.
      This is the list of users who can access admin only information from recon.
      Users defined in ozone.administrators will always be able to access all
      recon information regardless of this setting.
    </description>
  </property>
  <property>
    <name>ozone.recon.administrators.groups</name>
    <value/>
    <tag>RECON, SECURITY</tag>
    <description>
      Recon administrator groups delimited by a comma.
      This is the list of groups who can access admin only information
      from recon.
      It is enough to either have the name defined in ozone.recon.administrators
      or be directly or indirectly in a group defined in this property.
    </description>
  </property>
  <property>
    <name>hdds.datanode.http.auth.type</name>
    <value>simple</value>
    <tag>DATANODE, SECURITY, KERBEROS</tag>
    <description> simple or kerberos. If kerberos is set, Kerberos SPNEOGO
      will be used for http authentication.
    </description>
  </property>
  <property>
    <name>ozone.freon.http.auth.type</name>
    <value>simple</value>
    <tag>FREON, SECURITY</tag>
    <description> simple or kerberos. If kerberos is set, Kerberos SPNEOGO
      will be used for http authentication.
    </description>
  </property>
  <property>
    <name>ozone.om.http.auth.type</name>
    <value>simple</value>
    <tag>OM, SECURITY, KERBEROS</tag>
    <description> simple or kerberos. If kerberos is set, Kerberos SPNEOGO
      will be used for http authentication.
    </description>
  </property>
  <property>
    <name>hdds.scm.http.auth.type</name>
    <value>simple</value>
    <tag>OM, SECURITY, KERBEROS</tag>
    <description> simple or kerberos. If kerberos is set, Kerberos SPNEOGO
      will be used for http authentication.
    </description>
  </property>
  <property>
    <name>ozone.recon.http.auth.type</name>
    <value>simple</value>
    <tag>RECON, SECURITY, KERBEROS</tag>
    <description> simple or kerberos. If kerberos is set, Kerberos SPNEOGO
      will be used for http authentication.
    </description>
  </property>
  <property>
    <name>ozone.s3g.http.auth.type</name>
    <value>simple</value>
    <tag>S3G, SECURITY, KERBEROS</tag>
    <description> simple or kerberos. If kerberos is set, Kerberos SPNEOGO
      will be used for http authentication.
    </description>
  </property>
  <property>
    <name>ozone.recon.db.dir</name>
    <value/>
    <tag>OZONE, RECON, STORAGE, PERFORMANCE</tag>
    <description>
      Directory where the Recon Server stores its metadata. This should
      be specified as a single directory. If the directory does not
      exist then the Recon will attempt to create it.

      If undefined, then the Recon will log a warning and fallback to
      ozone.metadata.dirs. This fallback approach is not recommended for
      production environments.
    </description>
  </property>
  <property>
    <name>ozone.scm.network.topology.schema.file</name>
    <value>network-topology-default.xml</value>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      The schema file defines the ozone network topology. We currently support
      xml(default) and yaml format. Refer to the samples in the topology
      awareness document for xml and yaml topology definition samples.
    </description>
  </property>
  <property>
    <name>ozone.network.topology.aware.read</name>
    <value>false</value>
    <tag>OZONE, PERFORMANCE</tag>
    <description>
      Whether to enable topology aware read to improve the read performance.
    </description>
  </property>
  <property>
    <name>ozone.recon.om.db.dir</name>
  <value/>
  <tag>OZONE, RECON, STORAGE</tag>
  <description>
    Directory where the Recon Server stores its OM snapshot DB. This should
    be specified as a single directory. If the directory does not
    exist then the Recon will attempt to create it.

    If undefined, then the Recon will log a warning and fallback to
    ozone.metadata.dirs. This fallback approach is not recommended for
    production environments.
  </description>
</property>
  <property>
    <name>ozone.recon.om.connection.request.timeout</name>
    <value>5000</value>
    <tag>OZONE, RECON, OM</tag>
    <description>
      Connection request timeout in milliseconds for HTTP call made by Recon to
      request OM DB snapshot.
    </description>
  </property>
  <property>
    <name>ozone.recon.om.connection.timeout</name>
    <value>5s</value>
    <tag>OZONE, RECON, OM</tag>
    <description>
      Connection timeout for HTTP call in milliseconds made by Recon to request
      OM snapshot.
    </description>
  </property>
  <property>
    <name>ozone.recon.scm.connection.request.timeout</name>
    <value>5s</value>
    <tag>OZONE, RECON, SCM</tag>
    <description>
      Connection request timeout in milliseconds for HTTP call made by Recon to
      request SCM DB snapshot.
    </description>
  </property>
  <property>
    <name>ozone.recon.scm.connection.timeout</name>
    <value>5s</value>
    <tag>OZONE, RECON, SCM</tag>
    <description>
      Connection timeout for HTTP call in milliseconds made by Recon to request
      SCM snapshot.
    </description>
  </property>
  <property>
    <name>ozone.recon.om.socket.timeout</name>
    <value>5s</value>
    <tag>OZONE, RECON, OM</tag>
    <description>
      Socket timeout in milliseconds for HTTP call made by Recon to request
      OM snapshot.
    </description>
  </property>
  <property>
    <name>ozone.recon.om.snapshot.task.initial.delay</name>
    <value>1m</value>
    <tag>OZONE, RECON, OM</tag>
    <description>
      Initial delay in MINUTES by Recon to request OM DB Snapshot.
    </description>
  </property>
  <property>
    <name>ozone.recon.om.snapshot.task.interval.delay</name>
    <value>10m</value>
    <tag>OZONE, RECON, OM</tag>
    <description>
      Interval in MINUTES by Recon to request OM DB Snapshot.
    </description>
  </property>
  <property>
    <name>ozone.recon.om.snapshot.task.flush.param</name>
    <value>false</value>
    <tag>OZONE, RECON, OM</tag>
    <description>
      Request to flush the OM DB before taking checkpoint snapshot.
    </description>
  </property>
  <property>
    <name>recon.om.delta.update.limit</name>
    <value>2000</value>
    <tag>OZONE, RECON</tag>
    <description>
      Recon each time get a limited delta updates from OM.
      The actual fetched data might be larger than this limit.
    </description>
  </property>
  <property>
    <name>recon.om.delta.update.loop.limit</name>
    <value>10</value>
    <tag>OZONE, RECON</tag>
    <description>
      The sync between Recon and OM consists of several small
      fetch loops.
    </description>
  </property>
  <property>
    <name>ozone.recon.scm.container.threshold</name>
    <value>100</value>
    <tag>OZONE, RECON, SCM</tag>
    <description>
      Threshold value for the difference in number of containers
      in SCM and RECON.
    </description>
  </property>
  <property>
    <name>ozone.recon.scm.snapshot.enabled</name>
    <value>false</value>
    <tag>OZONE, RECON, SCM</tag>
    <description>
      If enabled, SCM DB Snapshot is taken by Recon.
    </description>
  </property>
  <property>
    <name>hdds.tracing.enabled</name>
    <value>false</value>
    <tag>OZONE, HDDS</tag>
    <description>
      If enabled, tracing information is sent to tracing server.
    </description>
  </property>
  <property>
    <name>ozone.recon.task.thread.count</name>
    <value>1</value>
    <tag>OZONE, RECON</tag>
    <description>
      The number of Recon Tasks that are waiting on updates from OM.
    </description>
  </property>
  <property>
    <name>ozone.scm.datanode.admin.monitor.interval</name>
    <value>30s</value>
    <tag>SCM</tag>
    <description>
      This sets how frequently the datanode admin monitor runs to check for
      nodes added to the admin workflow or removed from it. The progress
      of decommissioning and entering maintenance nodes is also checked to see
      if they have completed.
    </description>
  </property>
  <property>
    <name>ozone.client.list.trash.keys.max</name>
    <value>1000</value>
    <tag>OZONE, CLIENT</tag>
    <description>
      The maximum number of keys to return for a list trash request.
    </description>
  </property>
  <property>
    <name>ozone.http.basedir</name>
    <value/>
    <tag>OZONE, OM, SCM, MANAGEMENT</tag>
    <description>
      The base dir for HTTP Jetty server to extract contents. If this property
      is not configured, by default, Jetty will create a directory inside the
      directory named by the java.io.tmpdir System property（/tmp by default）.
      While in production environment, it's strongly suggested to instruct Jetty
      to use a different parent directory by setting this property to the name
      of the desired parent directory. The value of the property will be used to
      set Jetty context attribute 'org.eclipse.jetty.webapp.basetempdir'.
      The directory named by this property must exist and be writeable.
    </description>
  </property>
  <property>
    <name>ozone.http.policy</name>
    <value>HTTP_ONLY</value>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <description>Decide if HTTPS(SSL) is supported on Ozone
      This configures the HTTP endpoint for Ozone daemons:
      The following values are supported:
      - HTTP_ONLY : Service is provided only on http
      - HTTPS_ONLY : Service is provided only on https
      - HTTP_AND_HTTPS : Service is provided both on http and https
    </description>
  </property>
  <property>
    <name>ozone.https.client.need-auth</name>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <value>false</value>
    <description>
      Whether SSL client certificate authentication is required
    </description>
  </property>
  <property>
    <name>ozone.https.client.keystore.resource</name>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <value>ssl-client.xml</value>
    <description>
      Resource file from which ssl client keystore
      information will be extracted
    </description>
  </property>
  <property>
    <name>ozone.https.server.keystore.resource</name>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <value>ssl-server.xml</value>
    <description>Resource file from which ssl server keystore
      information will be extracted
    </description>
  </property>
  <property>
    <name>ozone.s3g.client.buffer.size</name>
    <tag>OZONE, S3GATEWAY</tag>
    <value>4KB</value>
    <description>
      The size of the buffer which is for read block. (4KB by default).
    </description>
  </property>
  <property>
    <name>ssl.server.keystore.keypassword</name>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <value/>
    <description>Keystore key password for HTTPS SSL configuration
    </description>
  </property>
  <property>
    <name>ssl.server.keystore.location</name>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <value/>
    <description>
      Keystore location for HTTPS SSL configuration
    </description>
  </property>
  <property>
    <name>ssl.server.keystore.password</name>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <value/>
    <description>
      Keystore password for HTTPS SSL configuration
    </description>
  </property>
  <property>
    <name>ssl.server.truststore.location</name>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <value/>
    <description>
      Truststore location for HTTPS SSL configuration
    </description>
  </property>
  <property>
    <name>ssl.server.truststore.password</name>
    <tag>OZONE, SECURITY, MANAGEMENT</tag>
    <value/>
    <description>
      Truststore password for HTTPS SSL configuration
    </description>
  </property>
  <property>
    <name>hdds.datanode.ratis.server.request.timeout</name>
    <tag>OZONE, DATANODE</tag>
    <value>2m</value>
    <description>
      Timeout for the request submitted directly to Ratis in datanode.
    </description>
  </property>
  <property>
    <name>ozone.om.keyname.character.check.enabled</name>
    <tag>OZONE, OM</tag>
    <value>false</value>
    <description>If true, then enable to check if the key name
      contains illegal characters when creating/renaming key.
      For the definition of illegal characters, follow the
      rules in Amazon S3's object key naming guide.
    </description>
  </property>

  <property>
    <name>ozone.om.enable.filesystem.paths</name>
    <tag>OZONE, OM</tag>
    <value>false</value>
    <description>If true, key names will be interpreted as file system paths.
      "/" will be treated as a special character and paths will be normalized
      and must follow Unix filesystem path naming conventions. This flag will
      be helpful when objects created by S3G need to be accessed using OFS/O3Fs.
      If false, it will fallback to default behavior of Key/MPU create
      requests where key paths are not normalized and any intermediate
      directories will not be created or any file checks happens to check
      filesystem semantics.
    </description>
  </property>

  <property>
    <name>ozone.om.key.path.lock.enabled</name>
    <tag>OZONE, OM</tag>
    <value>false</value>
    <description>Defaults to false. If true, the fine-grained KEY_PATH_LOCK
      functionality is enabled. If false, it is disabled.
    </description>
  </property>

  <property>
    <name>ozone.client.key.provider.cache.expiry</name>
    <tag>OZONE, CLIENT, SECURITY</tag>
    <value>10d</value>
    <description>Ozone client security key provider cache expiration time.
    </description>
  </property>

  <property>
    <name>ozone.scm.info.wait.duration</name>
    <tag>OZONE, SCM, OM</tag>
    <value>10m</value>
    <description> Maximum amount of duration OM/SCM waits to get Scm Info/Scm
      signed cert during OzoneManager init/SCM bootstrap.
    </description>
  </property>

  <property>
    <name>ozone.scm.ca.list.retry.interval</name>
    <tag>OZONE, SCM, OM, DATANODE</tag>
    <value>10s</value>
    <description>SCM client wait duration between each retry to get Scm CA
      list. OM/Datanode obtain CA list during startup, and wait
      for the CA List size to be matched with SCM node count size plus
      1. (Additional one certificate is root CA certificate). If the received
      CA list size is not matching with expected count, this is the duration
      used to wait before making next attempt to get CA list.
    </description>
  </property>

  <property>
    <name>ozone.client.key.latest.version.location</name>
    <tag>OZONE, CLIENT</tag>
    <value>true</value>
    <description>Ozone client gets the latest version location.
    </description>
  </property>

  <property>
    <name>ozone.network.flexible.fqdn.resolution.enabled</name>
    <tag>OZONE, SCM, OM</tag>
    <value>false</value>
    <description>SCM, OM hosts will be able to resolve itself based on its host
      name instead of fqdn. It is useful for deploying to kubernetes
      environment, during the initial launching time when
      [pod_name].[service_name] is not resolvable yet because of the probe.
    </description>
  </property>

  <property>
    <name>ozone.network.jvm.address.cache.enabled</name>
    <tag>OZONE, SCM, OM, DATANODE</tag>
    <value>true</value>
    <description>Disable the jvm network address cache. In environment such as
      kubernetes, IPs of instances of scm, om and datanodes can be changed.
      Disabling this cache helps to quickly resolve the fqdn's to the new IPs.
    </description>
  </property>

  <property>
    <name>ozone.directory.deleting.service.interval</name>
    <value>1m</value>
    <tag>OZONE, PERFORMANCE, OM</tag>
    <description>Time interval of the directory deleting service. It runs on OM
      periodically and cleanup orphan directory and its sub-tree. For every
      orphan directory it deletes the sub-path tree structure(dirs/files). It
      sends sub-files to KeyDeletingService to deletes its blocks. Unit could
      be defined with postfix (ns,ms,s,m,h,d)
    </description>
  </property>
  <property>
    <name>ozone.path.deleting.limit.per.task</name>
    <value>10000</value>
    <tag>OZONE, PERFORMANCE, OM</tag>
    <description>A maximum number of paths(dirs/files) to be deleted by
      directory deleting service per time interval.
    </description>
  </property>

  <property>
    <name>ozone.scm.event.ContainerReport.thread.pool.size</name>
    <value>10</value>
    <tag>OZONE, SCM</tag>
    <description>Thread pool size configured to process container reports.
    </description>
  </property>

  <property>
    <name>ozone.scm.datanode.ratis.volume.free-space.min</name>
    <value>1GB</value>
    <tag>OZONE, DATANODE</tag>
    <description>Minimum amount of storage space required for each ratis
      volume on a datanode to hold a new pipeline.
      Datanodes with all its ratis volumes with space under this value
      will not be allocated a pipeline or container replica.
    </description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.storage.dir</name>
    <value></value>
    <tag>OZONE, SCM, HA, RATIS</tag>
    <description>Storage directory used by SCM to write Ratis logs.</description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.rpc.type</name>
    <value>GRPC</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>Ratis supports different kinds of transports like
      netty, GRPC， Hadoop RPC etc. This picks one of those for
      this cluster.
    </description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.segment.size</name>
    <value>4MB</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The size of the raft segment used by Apache Ratis on
      SCM. (4 MB by default)
    </description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.segment.preallocated.size</name>
    <value>4MB</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The size of the buffer which is preallocated for
      raft segment used by Apache Ratis on SCM.(4 MB by default)
    </description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.log.appender.queue.byte-limit</name>
    <value>32MB</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>Byte limit for Raft's Log Worker queue.</description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.log.appender.queue.num-elements</name>
    <value>1024</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>Number of operation pending with Raft's Log Worker.
    </description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.log.purge.enabled</name>
    <value>false</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>whether enable raft log purge.</description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.log.purge.gap</name>
    <value>1000000</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The minimum gap between log indices for Raft server to
      purge its log segments after taking snapshot.
    </description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.snapshot.threshold</name>
    <value>1000</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The threshold to trigger a Ratis taking snapshot
      operation for SCM.
    </description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.request.timeout</name>
    <value>30s</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The timeout duration for SCM's Ratis server RPC.</description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.server.retry.cache.timeout</name>
    <value>60s</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>Retry Cache entry timeout for SCM's Ratis server.</description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.leader.election.timeout</name>
    <value>5s</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The minimum timeout duration for SCM ratis leader
      election. Default is 1s.</description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.server.leaderelection.pre-vote</name>
    <value>false</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>Enable/disable SCM HA leader election pre-vote phase.</description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.leader.ready.wait.timeout</name>
    <value>60s</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The minimum timeout duration for waiting for
      leader readiness.</description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.leader.ready.check.interval</name>
    <value>2s</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The interval between ratis server performing
      a leader readiness check.
    </description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.server.failure.timeout.duration</name>
    <value>120s</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The timeout duration for ratis server failure
      detection, once the threshold has reached, the ratis state
      machine will be informed about the failure in the ratis ring.
    </description>
  </property>
  <property>
    <name>ozone.scm.ha.ratis.snapshot.dir</name>
    <value></value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>The ratis snapshot dir location.</description>
  </property>
  <property>
    <name>ozone.scm.ha.grpc.deadline.interval</name>
    <value>30m</value>
    <tag>SCM, OZONE, HA, RATIS</tag>
    <description>Deadline for SCM DB checkpoint interval.</description>
  </property>


  <property>
    <name>ozone.s3g.kerberos.keytab.file</name>
    <value>/etc/security/keytabs/s3g.keytab</value>
    <tag>OZONE, SECURITY, KERBEROS, S3GATEWAY</tag>
    <description> The keytab file used by S3Gateway daemon to login as its
      service principal. The principal name is configured with
      ozone.s3g.kerberos.principal.
    </description>
  </property>
  <property>
    <name>ozone.s3g.kerberos.principal</name>
    <value>s3g/_HOST@REALM</value>
    <tag>OZONE, SECURITY, KERBEROS, S3GATEWAY</tag>
    <description>The S3Gateway service principal.
      Ex: s3g/_HOST@REALM.COM</description>
  </property>
  <property>
    <name>hdds.container.checksum.verification.enabled</name>
    <value>true</value>
    <tag>OZONE, DATANODE</tag>
    <description> To enable/disable checksum verification of the
      containers.
    </description>
  </property>

  <property>
    <name>hadoop.http.idle_timeout.ms</name>
    <value>60000</value>
    <tag>OZONE, PERFORMANCE, S3GATEWAY</tag>
    <description>
      OM/SCM/DN/S3GATEWAY Server connection timeout in milliseconds.
    </description>
  </property>
  <property>
    <name>ozone.om.grpc.maximum.response.length</name>
    <value>134217728</value>
    <tag>OZONE, OM, S3GATEWAY</tag>
    <description>
      OM/S3GATEWAY OMRequest, OMResponse over grpc max message length (bytes).
    </description>
  </property>
  <property>
    <name>ozone.default.bucket.layout</name>
    <value/>
    <tag>OZONE, MANAGEMENT</tag>
    <description>
      Default bucket layout used by Ozone Manager during bucket creation when a client does not specify the
      bucket layout option. Supported values are OBJECT_STORE and FILE_SYSTEM_OPTIMIZED.
      OBJECT_STORE: This layout allows the bucket to behave as a pure object store and will not allow
      interoperability between S3 and FS APIs.
      FILE_SYSTEM_OPTIMIZED: This layout allows the bucket to support atomic rename/delete operations and
      also allows interoperability between S3 and FS APIs. Keys written via S3 API with a "/" delimiter
      will create intermediate directories.
    </description>
  </property>

  <property>
    <name>ozone.client.max.ec.stripe.write.retries</name>
    <value>10</value>
    <tag>CLIENT</tag>
    <description>
      When EC stripe write failed, client will request to allocate new block group and write the failed stripe into new
      block group. If the same stripe failure continued in newly acquired block group also, then it will retry by
      requesting to allocate new block group again. This configuration is used to limit these number of retries. By
      default the number of retries are 10.
    </description>
  </property>

  <property>
    <name>ozone.audit.log.debug.cmd.list.omaudit</name>
    <value></value>
    <tag>OM</tag>
    <description>
      A comma separated list of OzoneManager commands that are written to the OzoneManager audit logs only if the audit
      log level is debug. Ex: "ALLOCATE_BLOCK,ALLOCATE_KEY,COMMIT_KEY".
    </description>
  </property>

  <property>
    <name>ozone.audit.log.debug.cmd.list.scmaudit</name>
    <value></value>
    <tag>SCM</tag>
    <description>
      A comma separated list of SCM commands that are written to the SCM audit logs only if the audit
      log level is debug. Ex: "GET_VERSION,REGISTER,SEND_HEARTBEAT".
    </description>
  </property>

  <property>
    <name>ozone.audit.log.debug.cmd.list.dnaudit</name>
    <value></value>
    <tag>DN</tag>
    <description>
      A comma separated list of Datanode commands that are written to the DN audit logs only if the audit
      log level is debug. Ex: "CREATE_CONTAINER,READ_CONTAINER,UPDATE_CONTAINER".
    </description>
  </property>

  <property>
    <name>ozone.om.multitenancy.enabled</name>
    <value>false</value>
    <tag>OZONE, OM</tag>
    <description>Enable S3 Multi-Tenancy. If disabled, all S3 multi-tenancy requests are rejected.
    </description>
  </property>

  <property>
    <name>ozone.om.multitenancy.ranger.sync.interval</name>
    <value>10m</value>
    <tag>OZONE, OM</tag>
    <description>
      Determines how often the Multi-Tenancy Ranger background sync thread
      service should run. Background thread periodically checks
      Ranger policies and roles created by Multi-Tenancy feature.
      And overwrites them if obvious discrepancies are detected.
      Value should be set with a unit suffix (ns,ms,s,m,h,d)
    </description>
  </property>

  <property>
    <name>ozone.om.multitenancy.ranger.sync.timeout</name>
    <value>10s</value>
    <tag>OZONE, OM</tag>
    <description>
      The timeout for each Multi-Tenancy Ranger background sync thread run.
      If the timeout has been reached, a warning message will be logged.
    </description>
  </property>

  <property>
    <name>ozone.client.fs.default.bucket.layout</name>
    <value>FILE_SYSTEM_OPTIMIZED</value>
    <tag>OZONE, CLIENT</tag>
    <description>
      Default bucket layout value used when buckets are created using OFS.
      Supported values are LEGACY and FILE_SYSTEM_OPTIMIZED.
      FILE_SYSTEM_OPTIMIZED: This layout allows the bucket to support atomic rename/delete operations and
      also allows interoperability between S3 and FS APIs. Keys written via S3 API with a "/" delimiter
      will create intermediate directories.
    </description>
  </property>
</configuration>
