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

###############################
## Accumulo Proxy configuration
###############################

# Port to run proxy on
port=42424
# Set to true if you wish to use an Mini Accumulo Cluster
useMiniAccumulo=false
protocolFactory=org.apache.thrift.protocol.TCompactProtocol$Factory
tokenClass=org.apache.accumulo.core.client.security.tokens.PasswordToken
maxFrameSize=16M

########################################################################

################################
## Accumulo client configuration
################################

## NOTE - All properties that have a default are set with it. Properties that
## are uncommented must be set by the user.

## Instance properties
## --------------
## Name of Accumulo instance to connect to
instance.name=myinstance

## Zookeeper connection information for Accumulo instance
instance.zookeepers=localhost:2181

## Zookeeper session timeout
#instance.zookeepers.timeout=30s


## Authentication properties
## --------------
## Authentication method (i.e password, kerberos, PasswordToken, KerberosToken, etc)
auth.type=password

## Accumulo principal/username for chosen authentication method
auth.principal=root

## Authentication token (ex. mypassword, /path/to/keytab)
auth.token=secret


## Batch Writer properties
## --------------
## The durability used to write to the write-ahead log. Legal values are: none, which skips the write-ahead log; log, which sends the data to the write-ahead log, but does nothing to make it durable; flush, which pushes data to the file system; and sync, which ensures the data is written to disk. Setting this property will change the durability for the BatchWriter session. A value of "default" will use the table's durability setting. 
#batch.writer.durability=default

## Max amount of time (in seconds) to hold data in memory before flushing it
#batch.writer.latency.max=120s

## Max memory (in bytes) to batch before writing
#batch.writer.memory.max=50M

## Maximum number of threads to use for writing data to tablet servers.
#batch.writer.threads.max=3

## Max amount of time (in seconds) an unresponsive server will be re-tried. An exception is thrown when this timeout is exceeded. Set to zero for no timeout.
#batch.writer.timeout.max=0


## Batch Scanner properties
## --------------
## Number of concurrent query threads to spawn for querying
#batch.scanner.num.query.threads=3


## Scanner properties
## --------------
## Number of key/value pairs that will be fetched at time from tablet server
#scanner.batch.size=1000


## SSL properties
## --------------
## Enable SSL for client RPC
#ssl.enabled=false

## Password used to encrypt keystore
#ssl.keystore.password=

## Path to SSL keystore file
#ssl.keystore.path=

## Type of SSL keystore
#ssl.keystore.type=jks

## Password used to encrypt truststore
#ssl.truststore.password=

## Path to SSL truststore file
#ssl.truststore.path=

## Type of SSL truststore
#ssl.truststore.type=jks

## Use JSSE system properties to configure SSL
#ssl.use.jsse=false


## SASL properties
## --------------
## Enable SASL for client RPC
#sasl.enabled=false

## Kerberos principal/primary that Accumulo servers use to login
#sasl.kerberos.server.primary=accumulo

## SASL quality of protection. Valid values are 'auth', 'auth-int', and 'auth-conf'
#sasl.qop=auth


## Tracing properties
## --------------
## A list of span receiver classes to send trace spans
#trace.span.receivers=org.apache.accumulo.tracer.ZooTraceClient

## The zookeeper node where tracers are registered
#trace.zookeeper.path=/tracers

