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

[DEFAULT]
install=%(env.pwd)s/../../../..
user=%(env.user)s

[agitator]
kill=kill -9
ssh=ssh -q -A -o StrictHostKeyChecking=no
sleep=300
sleep.restart=30
sleep.jitter=30

[accumulo]
home=%(install)s/accumulo
tserver.kill.min=1
tserver.kill.max=1
tserver.frequency=0.8

master.kill.min=1
master.kill.max=1
master.frequency=0.1

gc.kill.min=1
gc.kill.max=1
gc.frequency=0.1

[hadoop]
home=%(install)s/hadoop
bin=%(home)s/bin
datanode.frequency=0.8
datanode.kill.min=1
datanode.kill.max=1
namenode.frequency=0.05
namenode.kill.min=1
namenode.kill.max=1
secondarynamenode.frequency=0.05
secondarynamenode.kill.min=1
secondarynamenode.kill.max=1

[zookeeper]
home=%(install)s/zookeeper
frequency=0.05
