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

###################
# Common properties
###################

# HDFS root path. Should match 'fs.defaultFS' property in Hadoop's core-site.xml
test.common.hdfs.root=hdfs://localhost:8020
# YARN resource manager hostname. Should match 'yarn.resourcemanager.hostname' property in Hadoop's yarn-site.xml
test.common.yarn.resource.manager=localhost
# Memory (in MB) given to each container (if running in YARN)
test.common.yarn.container.memory.mb=1024
# Number of cores given to each container (if running in YARN)
test.common.yarn.container.cores=1

###################################
# Continuous ingest test properties
###################################

# Common
# ------
# Accumulo table used by continuous tests
test.ci.common.accumulo.table=ci
# Number of tablets that should exist in Accumulo table when created
test.ci.common.accumulo.num.tablets=20
# Optional authorizations that if specified will be randomly selected by scanners and walkers
# Format: a,b|a,b,c|c
test.ci.common.auths=

# Ingest
# ------
# Number of entries each ingest client should write
test.ci.ingest.client.entries=9223372036854775807
# Minimum random row to generate
test.ci.ingest.row.min=0
# Maximum random row to generate
test.ci.ingest.row.max=9223372036854775807
# Maximum number of random column families to generate
test.ci.ingest.max.cf=32767
# Maximum number of random column qualifiers to generate
test.ci.ingest.max.cq=32767
# Optional visibilities (in CSV format) that if specified will be randomly selected by ingesters for
# each linked list
test.ci.ingest.visibilities=
# Checksums will be generated during ingest if set to true
test.ci.ingest.checksum=true
# Enables periodic pausing of ingest
test.ci.ingest.pause.enabled=false
# Minimum wait between ingest pauses (in seconds)
test.ci.ingest.pause.wait.min=120
# Maximum wait between ingest pauses (in seconds)
test.ci.ingest.pause.wait.max=180
# Minimum pause duration (in seconds)
test.ci.ingest.pause.duration.min=60
# Maximum pause duration (in seconds)
test.ci.ingest.pause.duration.max=120

# Batch walker
# ------------
# Sleep time between batch scans (in ms)
test.ci.batch.walker.sleep.ms=10000
# Scan batch size
test.ci.batch.walker.batch.size=10000

# Walker
# ------
# Sleep time between scans (in ms)
test.ci.walker.sleep.ms=10000

# Scanner
# -------
# Sleep time between scans (in ms)
test.ci.scanner.sleep.ms=10000
# Scanner entries
test.ci.scanner.entries=5000

# Verify
# -----
# Maximum number of mapreduce mappers
test.ci.verify.max.maps=64
# Number of mapreduce reducers
test.ci.verify.reducers=64
# Perform the verification directly on the files while the table is offline
test.ci.verify.scan.offline=false
# Comma separated list of auths to use for verify
test.ci.verify.auths=
# Location in HDFS to store output. Must not exist.
test.ci.verify.output.dir=/tmp/ci-verify
