<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
 * Copyright 2007 The Apache Software Foundation
 *
 * 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>hbase.regionserver.msginterval</name>
    <value>1000</value>
    <description>Interval between messages from the RegionServer to HMaster
    in milliseconds.  Default is 15. Set this value low if you want unit
    tests to be responsive.
    </description>
  </property>
  <property>
    <name>hbase.client.pause</name>
    <value>5000</value>
    <description>General client pause value.  Used mostly as value to wait
    before running a retry of a failed get, region lookup, etc.</description>
  </property>
  <property>
    <name>hbase.master.meta.thread.rescanfrequency</name>
    <value>10000</value>
    <description>How long the HMaster sleeps (in milliseconds) between scans of
    the root and meta tables.
    </description>
  </property>
  <property>
    <name>hbase.server.thread.wakefrequency</name>
    <value>1000</value>
    <description>Time to sleep in between searches for work (in milliseconds).
    Used as sleep interval by service threads such as META scanner and log roller.
    </description>
  </property>
  <property>
    <name>hbase.regionserver.handler.count</name>
    <value>5</value>
    <description>Count of RPC Server instances spun up on RegionServers
    Same property is used by the HMaster for count of master handlers.
    Default is 10.
    </description>
  </property>
  <property>
    <name>hbase.master.lease.period</name>
    <value>6000</value>
    <description>Length of time the master will wait before timing out a region
    server lease. Since region servers report in every second (see above), this
    value has been reduced so that the master will notice a dead region server
    sooner. The default is 30 seconds.
    </description>
  </property>
  <property>
    <name>hbase.master.info.port</name>
    <value>-1</value>
    <description>The port for the hbase master web UI
    Set to -1 if you do not want the info server to run.
    </description>
  </property>
  <property>
    <name>hbase.regionserver.info.port</name>
    <value>-1</value>
    <description>The port for the hbase regionserver web UI
    Set to -1 if you do not want the info server to run.
    </description>
  </property>
  <property>
    <name>hbase.regionserver.info.port.auto</name>
    <value>true</value>
    <description>Info server auto port bind. Enables automatic port
    search if hbase.regionserver.info.port is already in use.
    Enabled for testing to run multiple tests on one machine.
    </description>
  </property>
  <property>
    <name>hbase.master.lease.thread.wakefrequency</name>
    <value>3000</value>
    <description>The interval between checks for expired region server leases.
    This value has been reduced due to the other reduced values above so that
    the master will notice a dead region server sooner. The default is 15 seconds.
    </description>
  </property>
  <property>
    <name>hbase.regionserver.optionalcacheflushinterval</name>
    <value>10000</value>
    <description>
    Amount of time to wait since the last time a region was flushed before
    invoking an optional cache flush. Default 60,000.
    </description>
  </property>
  <property>
    <name>hbase.regionserver.safemode</name>
    <value>false</value>
    <description>
    Turn on/off safe mode in region server. Always on for production, always off
    for tests.
    </description>
  </property>
  <property>
    <name>hbase.hregion.max.filesize</name>
    <value>67108864</value>
    <description>
    Maximum desired file size for an HRegion.  If filesize exceeds
    value + (value / 2), the HRegion is split in two.  Default: 256M.

    Keep the maximum filesize small so we split more often in tests.
    </description>
  </property>
  <property>
    <name>hadoop.log.dir</name>
    <value>${user.dir}/../logs</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>21818</value>
    <description>Property from ZooKeeper's config zoo.cfg.
    The port at which the clients will connect.
    </description>
  </property>
</configuration>
