<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-->

<configuration>
  <property>
    <name>instance</name>
    <value>${@//site/client/instance.name}</value>
    <description>Accumulo Instance Name.</description>
  </property>
  <property>
    <name>zookeepers</name>
    <value>${@//site/accumulo-site/instance.zookeeper.host}</value>
    <description>Zookeeper hosts.</description>
  </property>
  <property>
    <name>port</name>
    <value>42424</value>
    <description>Proxy port.</description>
  </property>
  <property>
    <name>protocolFactory</name>
    <value>org.apache.thrift.protocol.TCompactProtocol$Factory</value>
    <description>Proxy protocol factory.</description>
  </property>
  <property>
    <name>tokenClass</name>
    <value>org.apache.accumulo.core.client.security.tokens.PasswordToken</value>
    <description>Class to use for accumulo user authentication.</description>
  </property>
  <property>
    <name>maxFrameSize</name>
    <value>16M</value>
    <description>Max frame size.</description>
  </property>
  <property>
    <name>useMockInstance</name>
    <value>false</value>
    <description>Only used for testing.</description>
  </property>
  <property>
    <name>useMiniAccumulo</name>
    <value>false</value>
    <description>Only used for testing.</description>
  </property>
</configuration>
