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

# WARNING: DO NOT EDIT THIS FILE.
# All customizations must be created in a file "site.ducc.properties" that is in
# your ducc_runtime/resources.  DUCC's startup procedures will merge this file and
# your site.ducc.propeties into ducc.properties which is what DUCC will use.
# WARNING DO NOT EDIT THIS FILE.

# ====================================================================================
#   This configuration file contains most of the specifications for DUCC.
#
#   Two other important customizable files define the classes and nodes.
#
#   The class definition file is specified by the property 'ducc.rm.class.definitions'
#   and a sample called ducc.classes has been provided in DUCC_HOME/resources.
#
#   Node definitions are by default taken from ducc.nodes but this may be overridden
#   with the -n option on start_ducc.
#
#   The first two entries here are customized in site.ducc.properties by ducc_post_install.
#
# ====================================================================================

# The name of the node where DUCC runs.
ducc.head = <head-node>

# The full name of the Java command.
ducc.jvm  = <full-path-to-java-command>

# The name of the cluster as shown by the Web Server.
ducc.cluster.name=Apache UIMA-DUCC

# Specify location of private resources directory.  UIMA-3892
ducc.private.resources = ${DUCC_HOME}/resources.private

# Location of security home directory.  When non-empty the userid is appended and it replaces the
# default of <user.home> as the location of the keys used in request validation.
ducc.security.home =

# Name any site-local jars
#ducc.local.jars = 

# Declare which components to load into the jvm on process startup.
ducc.jms.provider=activemq

# ---------------------------------------------------
# ---------------------------------------------------
# Define the ActivemQ broker configuration. 
#    ducc.broker.protocol - Ddefine broker protocol. Should typically be 
#                           tcp. *** Dont specify : or // ***
# ducc.broker.hostname    - The name of the host where the broker is running.
# ducc.broker.port        - The broker's connection port
# ducc.broker.url.decoration - The broker *client* url decoration.
#        recoveryInterval=30000 - Specifies an interval between recovery attempts,
#                                 i.e when  a connection is being refreshed, 
#                                 in milliseconds
#        jms.useCompression=true - Compress message body
# ducc.broker.name        - the broker name - must match the actual broker name
#                           in the broker config.  THIS IS NOT THE BROKER HOSTNAME
#                           WHICH IS CONFIGURED IN ducc.broker.hostname.
# ducc.broker.jmx.port    - the Broker's jmx port
#
ducc.broker.protocol=tcp
ducc.broker.hostname=${ducc.head}
ducc.broker.port=61617

# Broker decorations: 
#    useCompression: true, compress JMS cargo 
ducc.broker.url.decoration=jms.useCompression=true

ducc.broker.name=localhost
ducc.broker.jmx.port=1100
#
# ActiveMQ credentials file used to authenticate DUCC daemons with the broker.
# 
ducc.broker.credentials.file=${ducc.private.resources}/ducc-broker-credentials.properties

# ActiveMQ Auto-management configuration
#    docc.broker.automanage    - if true, DUCC will start and stop the broker as needed.  
#                                Otherwise, the installation is responsible for
#                                managing ActiveMQ
#    ducc.broker.memor.options - If automanaged, the memory configuration passed to the JVM
#    ducc.broker.configuration - If automanaged, the location of the ActiveMQ broker configuration
#    ducc.broker.home          - If automanaged, the location of the ActiveMQ installation
#    ducc.broker.server.url.decoration - If automanaged, the broker URL decoration
#

ducc.broker.automanage = true
ducc.broker.memory.options = -Xmx1G

ducc.broker.configuration = conf/activemq-ducc.xml
ducc.broker.home = ${DUCC_HOME}/apache-uima/apache-activemq

# transport.soWriteTimeout=45000, 45sec timeout on write operations to the socket.
ducc.broker.server.url.decoration = transport.soWriteTimeout=45000

# To enable tracing of RM messages arriving in OR and NodeMetrics arriving in WS.
#ducc.transport.trace = orchestrator:RmStateDuccEvent webserver:NodeMetricsUpdateDuccEvent

# By default, use Linux OS authentication (via PAM)
#ducc.authentication.implementer=org.apache.uima.ducc.ws.authentication.LinuxAuthenticationManager
# Specify users allowed to login (default is all users can login)
#ducc.authentication.users.include = user1 user2
# Specify users not allowed to login (default is all users can login; if user is in both include and exclude lists, then exclude is enforced)
#ducc.authentication.users.exclude = user1 user3
# Specify groups allowed to login (default is all groups can login)
#ducc.authentication.groups.include = groupA groupB
# Specify groups not allowed to login (default is all groups can login; if group is in both include and exclude lists, then exclude is enforced)
#ducc.authentication.groups.exclude = groupA groupC

# Access UIMA message catalogs
ducc.locale.language=en
ducc.locale.country=us

# Specify a minimum amount of free swap space available on a node.
# If an agent detects free swap space dipping below the value defined
# below, it will find the fattest (in terms of memory) process in its
# inventory and kill it. The value of the parameter below is expressed
# in KB.
# Initially disabled by setting the threshold at 0.
#   Set this to 1GB equiv
ducc.node.min.swap.threshold=0

# administrative endpoint for all ducc components
ducc.admin.endpoint=ducc.admin.channel
# endpoint type choices[topic]
ducc.admin.endpoint.type=topic


# jmx port number for Ducc process. Each Ducc process will attempt
# to use this port for its JMX Connector. If the port is not available
# port+1 will be used until an available port is found.
ducc.jmx.port=2099

ducc.agent.jvm.args        = -Xmx500M
ducc.orchestrator.jvm.args = -Xmx1G
ducc.rm.jvm.args           = -Xmx1G
ducc.pm.jvm.args           = -Xmx1G
ducc.sm.jvm.args           = -Xmx1G
ducc.ws.jvm.args           = -Xmx2G -Djava.util.Arrays.useLegacyMergeSort=true

# ========== General Configuration block ==========

# Max number of work-item CASes for each job (default is "unlimited")
# Note: formerly known as ducc.threads.limit
ducc.job.max.pipelines.count = 5000

# ========== CLI Configuration block ==========
# These environment values are included on job/service/AP submissions
ducc.environment.propagated = USER HOME LANG DUCC_SERVICE_INSTANCE

# No timeout on CLI requests
ducc.cli.httpclient.sotimeout=0
#------------------------------------------------------------------------------
#	off,  // CLI submit and cancel signature enforcement disabled
#	on,   // CLI submit and cancel signature enforcement enabled (default)
ducc.signature.required=on
#------------------------------------------------------------------------------

# ========== Web Server Configuration block ==========
ducc.ws.configuration.class=org.apache.uima.ducc.ws.config.WebServerConfiguration

# This endpoint is used for webserver self test to determine viability of broker.
# After 3 missed messages to self via broker, webserver considers broker to be down.
ducc.ws.state.update.endpoint=ducc.ws.state
# endpoint type choices[topic]
ducc.ws.state.update.endpoint.type=topic
ducc.ws.state.publish.rate=5000

# Optionally configure the webserver to run on a non-head node
# ducc.ws.node = my.node.com
# Optionally configure the webserver IP address
# ducc.ws.ipaddress = <fill in an IP address>
# Optionally configure the webserver IP port for HTTP requests, default is 42133
ducc.ws.port = 42133
# Optionally configure the webserver IP port for HTTPS requests, default is 42155
ducc.ws.port.ssl = 42155
# Optionally configure the webserver ssl pw for  HTTPS requests, default is quackquack
# See private/ducc.private.properties
# Optionally configure the webserver login session timeout, in minutes, default is 60
ducc.ws.session.minutes = 60
# Optionally configure the webserver job automatic cancel timeout, default is 10. To disable feature specify 0.
#   Employed when user specifies --wait_for_completion flag on job submission, in which case the job monitor
#   program must visit http://<host>:<port>/ducc-servlet/proxy-job-status?id=<job-id> within this expiry time
#   else the job will be automatically canceled (unless feature disabled) by the webserver acting as the 
#   administrator ducc (which must be specified in the ducc.administrators file).
ducc.ws.automatic.cancel.minutes = 5
# Optionally configure the webserver max history entries for each of Jobs/Reservations/Services
ducc.ws.max.history.entries = 4096
# Specify the ducc webserver jsp compilation directory 
# Note: This directory is removed then recreated on each webserver restart
ducc.ws.jsp.compilation.directory = /tmp/ducc/jsp
# Specify login enabled (default is true)
ducc.ws.login.enabled = false
# For node visualization - if true,strip domain names from labels for cleaner visuals
ducc.ws.visualization.strip.domain = true
# Optionally configure the webserver request log, default is 0 (meaning no request logging)
# Logs are written to DUCC_HOME/logs/webserver
ducc.ws.requestLog.RetainDays = 30

# --------------------------------------------------------------
#    name: ducc.ws.banner.message
# purpose: display banner message on all main pages
# choices: default=none
#  change: effective immediately
#ducc.ws.banner.message = Do not adjust your set.  This is a message from your DUCC administrator.

# ========== Web Server Configuration block ==========

# ========== Job Driver Configuration block ==========
ducc.jd.configuration.class=org.apache.uima.ducc.transport.configuration.jd.JobDriverConfiguration
ducc.jd.state.update.endpoint=ducc.jd.state
# endpoint type choices[topic]
ducc.jd.state.update.endpoint.type=topic
ducc.jd.state.publish.rate=15000
# This is a human-readable string used to form queue names for the JMS queues used to pass 
# CASs from the Job Driver to the Job Processes. The completed queue named comprises the prefix 
# concatenated with the DUCC assigned Job number.
ducc.jd.queue.prefix=ducc.jd.queue.
# After dispatching a work item to UIMA-AS client for processing, the number of minutes that the Job Driver will
# wait for two callbacks (queued and assigned) before considering the work item lost. The elapsed time for the 
# callbacks is normally sub-second. Intermittent network problems may cause unusual spikes.
# If not specified, default value is 5 minutes.
ducc.jd.queue.timeout.minutes=5
# If not specified, default value is 24 hrs (24*60 minutes)
ducc.default.process.per.item.time.max = 1440
# If not specified, default max time in minutes allowed for AE initialization.
ducc.default.process.init.time.max = 120
#   The following 5 values comprise the specification used by the DUCC Orchestrator daemon to request an 
#   allocation from the DUCC Resource Manager for Job Driver use. The values given below are the defaults.
ducc.jd.host.class=JobDriver
ducc.jd.host.description=Job Driver
ducc.jd.host.memory.size=2GB
ducc.jd.host.number.of.machines=1
ducc.jd.host.user=System
#	For a newly started Job, the number of JP UIMA initialization failures
#	allowed until at least one JP succeeds - otherwise, the Job self-destructs.
#	Default is 1.
ducc.jd.startup.initialization.error.limit=1
#   The next 4 values are related - each JD is assigned a piece of the Job Driver host memory which,
#   along with the size of the CR's type system, limits the number of active work-item CASes in a job.
#   To avoid swapping the max heap size should also be restricted.
# Memory size in MB allocated for each JD (default 300)
ducc.jd.share.quantum = 400
#   The number of "slices" of size "jd.share.quantum" kept in reserve.
#   The Orchestrator makes Reservation requests to RM to get Reservations
#   (Job Driver hosts) each of which is then subdivided into "slices", one 
#   per JD.  This number specifies the number of unused "slices" that should 
#   be kept on-hand in anticipation of newly submitted jobs (default 2)
ducc.jd.share.quantum.reserve.count = 3
# The maximum length of a work-item name returned by CAS.getDocumentText().
# Truncation is enforced beyond this limit.
# If not specified, there is no limit.
ducc.jd.workitem.name.maximum.length = 64

# Extra JVM args to be appended to any user-supplied "driver_jvm_args"
# Dynamic: changes to this property immediately affect new submitted work
# Flag: -DUimaAsCasTracking will add to logs: 
#        UIMA-AS client & service trigger internal tracing including RefId,
#        UIMA-AS client onBeforeMessageSendHandler callbacks including RefId, and
#        UIMA-AS client onBeforeProcessCAS callbacks including RefId
# Flag: -DUimaAsClientTracking will add to jd.out.log: 
#        core pool size changes, 
#        UIMA-AS client sendAndReceive invocations, 
#        UIMA-AS client onBeforeMessageSendHandler callbacks, and
#        UIMA-AS client onBeforeProcessCAS callbacks
# Note: should contain an Xmx a little below the "ducc.jd.share.quantum" value
#       the Xmx entry is ignored if the user has specified one
ducc.driver.jvm.args  = -Xmx300M

# Max number of threads in Jetty thread pool servicing incoming
# HTTP requests 
# ducc.driver.jetty.max.threads = 100
# Max idle time for jetty threads (in millis). When a thread exceeds
# its idle time it will be terminated.
# ducc.driver.jetty.thread.idletime = 60000
# Extra JVM args to be appended to any user-supplied "process_jvm_args"
# Dynamic: changes to this property immediately affect new submitted work
# ducc.process.jvm.args=-XX:+HeapDumpOnOutOfMemoryError

# --------------------------------------------------------------
#    name: ducc.jd.communications.scheme
# purpose: specify communications scheme between JD and JPs
# choices: [http,https] default=https
#  change: effective immediately for new jobs
ducc.jd.communications.scheme=https

# --------------------------------------------------------------
#    name: ducc.jd.error.handler.class
# purpose: specify error handler
# default: org.apache.uima.ducc.ErrorHandler
#  change: effective immediately for new jobs
ducc.jd.error.handler.class = org.apache.uima.ducc.ErrorHandler

# --------------------------------------------------------------
#    name: ducc.jd.error.handler.args
# purpose: configure error handler
# choices: max_job_errors=<e> max_timeout_retrys_per_workitem=<r>
#  change: effective immediately for new jobs
ducc.jd.error.handler.args = max_job_errors=15 max_timeout_retrys_per_workitem=0

# ========== Job Driver Configuration block ==========

# ========== Service Manager Configuration block ========== 
# Class used to implement the SM - internals only, don't change.
ducc.sm.configuration.class=org.apache.uima.ducc.sm.config.ServiceManagerConfiguration
# Name of the AMQ topic used to communicate with SM - internals, don't change
ducc.sm.state.update.endpoint=ducc.sm.state
# AMQ protocol to use - internals, don't change
ducc.sm.state.update.endpoint.type=topic
# Default pinger
ducc.sm.default.monitor.class = org.apache.uima.ducc.cli.UimaAsPing
# max consecutive init failures or ping failures for ping-only services before we stop starting things
ducc.sm.instance.failure.max 5
# backward compatibility
ducc.sm.instance.failure.limit ${ducc.sm.instance.failure.max}
# failure window size in MINUTES. 
ducc.sm.instance.failure.window 30
# max consecutive instance init failures before we stop trying to start things
ducc.sm.init.failure.limit  1
# How often services are monitored to insure they're responding, in milliseconds
ducc.sm.meta.ping.rate = 60000
# How many consecutive missed pings are required to mark a service unresponsive
ducc.sm.meta.ping.stability =  10
# How long to wait for a ping to respond, in milliseconds
ducc.sm.meta.ping.timeout =  15000
# Port the CLI uses to contact SM
ducc.sm.http.port=19989
# Node where SM resides 
ducc.sm.http.node=${ducc.head}
# How long to keep a reference-started service alive after the last referencing job exits
ducc.sm.default.linger=300000
# === END == Service Manager Configuration block ========== 

# ========== Orchestrator Configuration block ==========
ducc.orchestrator.configuration.class=org.apache.uima.ducc.orchestrator.config.OrchestratorConfiguration
#------------------------------------------------------------------------------
#	cold, // Recover: All is lost			         		    JD host: employ new
#	warm, // Recover: Unmanaged Reservations only (default) 	JD host: employ new
ducc.orchestrator.start.type=warm
#------------------------------------------------------------------------------
ducc.orchestrator.state.update.endpoint=ducc.orchestrator.state
# endpoint type choices[topic]
ducc.orchestrator.state.update.endpoint.type=topic
ducc.orchestrator.state.publish.rate=10000
#------------------------------------------------------------------------------
# How long between between maintenance cycles (in milliseconds)
# Each maintenance cycle the orchestrator removes obsolete JD queues (MqReaper)
# and performs health related activities (HealthMonitor) including: capping JPs
# for a Jobs that have too many initialization failures and terminating Jobs whose 
# JDs have failed.
ducc.orchestrator.maintenance.rate=60000
#------------------------------------------------------------------------------
# orchestrator's jetty http port
ducc.orchestrator.http.port=19988
# Node where OR is running. This is needed by CLI  to compose a URL to access OR jetty server
ducc.orchestrator.http.node=${ducc.head}
#------------------------------------------------------------------------------
# Specify if reserving an entire machine is allowed
# This could be a bad idea when a cluster has very few, very large machines.
ducc.orchestrator.unmanaged.reservations.accepted=true
# ========== Orchestrator Configuration block ==========

# Resource Manager Configuration block
ducc.rm.configuration.class=org.apache.uima.ducc.rm.config.ResourceManagerConfiguration
# Queue name for broadcast RM state
ducc.rm.state.update.endpoint=ducc.rm.state
# If enabled, RM tries to start as soon as it recovers state from an OR publication,
# instead of waiting for init.stability for nodes to check in. 
ducc.rm.state.update.endpoint.type=topic
# the frequency, relative to or publications, at which RM runs a schedule
ducc.rm.state.publish.ratio = 1

# maximum allotment in GB for Non-preemptable shares - default is unlimited
#ducc.rm.global_allotment = 360

# Base size of dram quantum in Gb
ducc.rm.share.quantum = 1
# Implementation class for actual scheduling algorithm
ducc.rm.scheduler = org.apache.uima.ducc.rm.scheduler.NodepoolScheduler
# File defining the scheduler classes - found in DUCC_HOME/resources
ducc.rm.class.definitions = ducc.classes
# File defining the user registry.  Optional, need not exist.  Found in DUCC_HOME/resources.
ducc.rm.user.registry  = ducc.users
# default memory, in GB, if not specified 
ducc.rm.default.memory = 4
# number of node metrics heartbeats to wait for before rm starts up
ducc.rm.init.stability = 2
# number of missed node metrics updates to consider node down
ducc.rm.node.stability = 5
# which policy to use when shrinking/evicting shares - alternatively, SHRINK_BY_MACHINE
ducc.rm.eviction.policy = SHRINK_BY_INVESTMENT
# max nodes to initially allocate until init is complete
ducc.rm.initialization.cap = 1
# When true, jobs expand not all at once after init, but a bit slower, doubling each epoch
# until max fair-share is set.  If false, jobs increase immediately to their fair share,
# at the cost of mass evictions.
ducc.rm.expand.by.doubling = true
# Predict when a job will end and avoid expanding if not needed
ducc.rm.prediction = true
# Add this fudge factor (milliseconds) to the expansion target when using prediction
ducc.rm.prediction.fudge = 120000
# What is minimum number of processes for a job before we do defrag? If a job has less than this amount
# RM may attempt defragmentation to bring the processes up to this value.
ducc.rm.fragmentation.threshold = 8
# Endpoint for RM admin CLI
ducc.rm.admin.endpoint = ducc.rm.admin.channel
ducc.rm.admin.endpoint.type = queue

# Agent Configuration block
ducc.agent.configuration.class=org.apache.uima.ducc.agent.config.AgentConfiguration
ducc.agent.request.endpoint=ducc.agent
# endpoint type choices[topic]
ducc.agent.request.endpoint.type=topic

# Endpoint where uima as service wrapper reports status
ducc.agent.managed.process.state.update.endpoint=ducc.managed.process.state.update
# endpoint type choices[socket]
ducc.agent.managed.process.state.update.endpoint.type=socket
# endpoint parameters which are transport specific. For socket
# transport params are:
#  - transferExchange=true - include Camel Exchange wrapper in a message 
#  - synch=false - use socket transport for one-way messaging (no replies neeeded)
ducc.agent.managed.process.state.update.endpoint.params=transferExchange=true&sync=false

# max UID reserved by OS. This is used to detect rogue processes and to report
# available memory on a node.
ducc.agent.node.metrics.sys.gid.max=500


ducc.agent.node.metrics.publish.rate=30000
ducc.agent.node.metrics.endpoint=ducc.node.metrics
# endpoint type choices[topic]
ducc.agent.node.metrics.endpoint.type=topic
# Rate at which an agent publishes its process inventory
# The agent will only publish at this rate if there are
# changes since the last publish.
ducc.agent.node.inventory.publish.rate=10000
# If no changes in inventory, publish every 3 intervals defined by ducc.agent.node.inventory.publish.rate
ducc.agent.node.inventory.publish.rate.skip=3
ducc.agent.node.inventory.endpoint=ducc.node.inventory
# endpoint type choices[topic]
ducc.agent.node.inventory.endpoint.type=topic
# ducc.agent.launcher.thread.pool.size - Deprecated
#ducc.agent.launcher.thread.pool.size=10
# enable/disable use of ducc_ling
# ducc.agent.launcher.use.ducc_spawn: true, use ducc_ling. Default: false
ducc.agent.launcher.use.ducc_spawn=true
# specify location of ducc_ling in the filesystem
ducc.agent.launcher.ducc_spawn_path=${DUCC_HOME}/admin/${os.arch}/ducc_ling
# Max amount of time (in millis) agent allows the process to stop before issuing kill -9
ducc.agent.launcher.process.stop.timeout=60000
# Max time in millis allowed for AE initialization. Default 2 hours 7200000. - Deprecated
#ducc.agent.launcher.process.init.timeout=7200000
# exclude the following user ids while detecting rogue processes
ducc.agent.rogue.process.user.exclusion.filter=
#exclude the following processes while detecting rogue processes
ducc.agent.rogue.process.exclusion.filter=sshd:,-bash,-sh,/bin/sh,/bin/bash,grep,ps
# Fudge Factor (in terms of percantage) that agent uses to multiply a share size when 
# determining if a JP exceeds its alloted memory, which is calculated as follows
# (fudge factor/100)*share size + share size. If this number exceeds JPs RSS, the agent
# kills the process.  
ducc.agent.share.size.fudge.factor=5
# Enable/Disable CGroup support. 
ducc.agent.launcher.cgroups.enable=true

# Define location of cgroups utils like cgexec. For mixed clusters with different 
# flavors of unix, the utilities may be in different places. In such case, add a
# a comma separated list of paths like this:
# ducc.agent.launcher.cgroups.utils.dir=/usr/bin,<OS 1 path>,<OS 2 path>
ducc.agent.launcher.cgroups.utils.dir=/usr/bin,/bin
# Set cgroup memory.swappiness
ducc.agent.launcher.cgroups.swappiness=10
# number of retries to use when cgcreate fails
ducc.agent.launcher.cgroups.max.retry.count=1
# amount by which to increase delay (in msecs) between each retry
ducc.agent.launcher.cgroups.retry.delay.factor=2000
# exclusion file to enable node based exclusion for cgroups and aps
# syntax:  <node>=cgroups,ap
# the above will exclude node from using cgroups and/or prevent deployment of APs
ducc.agent.exclusion.file=${DUCC_HOME}/resources/exclusion.nodes
# Define cgroup control subsystems used to enforce fair share on a node
ducc.agent.launcher.cgroups.subsystems=memory,cpu
# Define script which will collect total swap used by a given process. This
# script is launched by an agent via duccling and running as the owner
# of the process.  
ducc.agent.swap.usage.script=${DUCC_HOME}/bin/ducc_get_process_swap_usage.sh

#
# Uncomment the following line to support auto reaping of rogue processes by Ducc's Agent
# ducc.agent.rogue.process.reaper.script=${DUCC_HOME}/admin/ducc_reap_rogues.sh
#
# Process Manager Configuration block
ducc.pm.configuration.class=org.apache.uima.ducc.pm.config.ProcessManagerConfiguration
ducc.pm.request.endpoint=ducc.pm
# endpoint type choices[queue]
ducc.pm.request.endpoint.type=queue
#------------------------------------------------------------------------------
ducc.pm.state.update.endpoint=ducc.pm.state
# endpoint type choices[topic]
ducc.pm.state.update.endpoint.type=topic
ducc.pm.state.publish.rate=15000

# New Configuration classes supporting the DUCC 2.0 isolation from user code. 
ducc.uima-as.configuration.class=org.apache.uima.ducc.transport.configuration.jp.JobProcessConfiguration
ducc.job-process.configuration.class=org.apache.uima.ducc.transport.configuration.jp.JobProcessConfiguration
ducc.service.configuration.class=org.apache.uima.ducc.transport.configuration.service.ServiceConfiguration

ducc.uima-as.endpoint=ducc.job.managed.service
# endpoint type choices[socket]
ducc.uima-as.endpoint.type=socket
# endpoint parameters which are transport specific. For socket
# transport params are:
#  - transferExchange=true - include Camel Exchange wrapper in a message 
#  - synch=false - use socket transport for one-way messaging (no replies neeeded)
ducc.uima-as.endpoint.params=transferExchange=true&sync=false

# saxon8.jar - Saxon is an XSLT and XQuery processor. It is used by UIMA-AS
#              when deploying a service.
ducc.uima-as.saxon.jar.path=file:${DUCC_HOME}/apache-uima/saxon/saxon8.jar

# dd2spring.xsl - contains a set of rules used when transforming 
#                 UIMA-AS deployment descriptor into SpringFramework's 
#                 context file used to deploy UIMA-AS based service.
ducc.uima-as.dd2spring.xsl.path=${DUCC_HOME}/apache-uima/bin/dd2spring.xsl

# maximum amount of time to wait for a response from the JD. This value
# is used by the JP when sending requests to the JD. 
ducc.process.request.timeout=30000

# Define process container class for DD jobs to instantiate and invoke via reflection. 
# The container provides classpath  isolation for user defined analytics.
# The container is instantiated with classes from a System classloader.
ducc.process.uima.as.container.class = org.apache.uima.ducc.user.jp.UimaASProcessContainer

# Define process container class for non-DD jobs to instantiate and invoke via reflection. 
# The container provides classpath  isolation for user defined analytics.
# The container is instantiated with classes from a System classloader.
ducc.process.uima.container.class = org.apache.uima.ducc.user.jp.UimaProcessContainer

# define the sleep time (millis) for JP to use when JD sends empty CAS. In this case the
# JD's CR has processed its collection. The JP threads need to slow down sending
# requests
ducc.process.thread.sleep.time=60000

# Custom Flow Controller to use for Ducc Job Processes that don't provide a process_DD descriptor
ducc.flow-controller.specifier=org.apache.uima.ducc.FlowController


# DATABASE PROPERTIES

# Name of the database host - initially disabled until database is created.
# Overridden in site.ducc.properties by ducc_post_install or db_create.
ducc.database.host            = --disabled--

# Database JMX host. Default is to allow only local JMX access.  Specify the real name for remote access.
ducc.database.jmx.host = localhost
# Database JMX port.
ducc.database.jmx.port = 7199

#-----------------------------------
# DATABASE MEMORY TUNING
#    WARNING: if you're not sure what these do you should probably not change them as incorrect
#             values can adversly affect the database, the database node, or both.
#    Given that.  If you're running on a mostly small system, e.g. 8GB or less, probably you
#    should set ducc.database.mem.heap to 1 or 2 GB and ducc.database.mem.new to 100M
#
#    By default we allow cassandra to calculate these for us.
#
# IMPORTANT: if you set one of these you MUST set both, or cassandra will refuse to start.
#-----------------------------------
# Database xmx.  If not set, cassandra will calculate it for you.
#ducc.database.mem.heap = 4G
# Database setting for 'young' generation.  If not set, cassandra will calculate it for you
#ducc.database.mem.new = 100M
#-----------------------------------
k# END OF DATABASE MEMORY TUNING
#-----------------------------------


# This class implementes the persistence interface for the services registry
#ducc.service.persistence.impl = org.apache.uima.ducc.database.StateServicesDb
ducc.service.persistence.impl  = org.apache.uima.ducc.common.persistence.services.StateServices

# This class implements the persistence interface for Job, Reservation, Service, and AP instances, plus
# the Orchestrator checkpoint.
#ducc.job.history.impl         = org.apache.uima.ducc.database.HistoryManagerDb
ducc.job.history.impl          = org.apache.uima.ducc.transport.event.common.history.HistoryPersistenceManager

#ducc.rm.persistence.impl     = org.apache.uima.ducc.database.RmStatePersistence
ducc.rm.persistence.impl      = org.apache.uima.ducc.common.persistence.rm.NullRmStatePersistence

# end database things -------------------------------------------------------------------------------

