# 
# 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.
# 
description                    type #1 item count "small" 

driver_descriptor_CR           org.apache.uima.ducc.test.randomsleep.FixedSleepCR
driver_descriptor_CR_overrides jobfile=${DUCC_HOME}/examples/uima-ducc-vm/jobs/least.inputs compression=1 error_rate=0.0
driver_jvm_args                -Xmx100M

process_descriptor_AE          org.apache.uima.ducc.test.randomsleep.FixedSleepAE
classpath                      ${DUCC_HOME}/lib/uima-ducc/examples/*:${DUCC_HOME}/apache-uima/lib/*
process_jvm_args               -Xmx100M 
process_per_item_time_max      12
environment                    AE_INIT_TIME=90000 AE_INIT_RANGE=30000 INIT_ERROR=0 LD_LIBRARY_PATH=/yet/a/nother/dumb/path
process_deployments_max        999
