<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<configuration>
  <property>
    <name>hdds.profiler.endpoint.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>ozone.scm.block.client.address</name>
    <value>localhost</value>
  </property>
  <property>
    <name>ozone.csi.owner</name>
    <value>hadoop</value>
  </property>
  <property>
    <name>ozone.csi.socket</name>
    <value>/tmp/csi.sock</value>
  </property>
  <property>
    <name>ozone.scm.client.address</name>
    <value>localhost</value>
  </property>
  <property>
    <name>ozone.metadata.dirs</name>
    <value>/tmp/metadata</value>
  </property>
  <property>
    <name>ozone.scm.names</name>
    <value>localhost</value>
  </property>
  <property>
    <name>ozone.om.address</name>
    <value>localhost</value>
  </property>
  <property>
    <name>ozone.scm.container.size</name>
    <value>1G</value>
  </property>
  <property>
    <name>hdds.datanode.storage.utilization.critical.threshold</name>
    <value>0.99</value>
  </property>
  <property>
    <name>hdds.prometheus.endpoint.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>ozone.recon.address</name>
    <value>localhost:9891</value>
  </property>
  <property>
    <name>ozone.recon.db.dir</name>
    <value>/tmp/recon</value>
  </property>
  <property>
    <name>datanode.replication.port</name>
    <value>0</value>
  </property>
</configuration>
