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

# ====================================================================================
#   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
#
#   For a new installation the first two entries below MUST be modified.
#
# ====================================================================================


# Identify the node where DUCC runs. Updated by ducc_post_install. 
ducc.head = <head-node>

# Name the JVM.  Updated by ducc_post_install
ducc.jvm  = <full-path-to-java-command>

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

# 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: 
#    maxInactivityDuration: 0, turn off broker detection of inactive connections
#    useCompression: true, compress JMS cargo 
#    closeAsync: false, block waiting until the JMS connection is closed. This
#                 setting reduces number of open sockets. 
ducc.broker.url.decoration=wireFormat.maxInactivityDuration=0&jms.useCompression=true&closeAsync=false


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_HOME}/activemq/conf/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
#                                manageing 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}/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 MB.
# 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

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

# 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
# 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
ducc.ws.port.ssl.pw = quackquack
# 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 jsp comp dir
ducc.ws.jsp.compilation.directory = /tmp/ducc/jsp
# Specify login enabled (default is true)
ducc.ws.login.enabled = false
# ========== Web Server Configuration block ==========

# ========== Job Driver Configuration block ==========
ducc.jd.configuration.class=org.apache.uima.ducc.jd.config.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
#   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
#   The next 3 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
# Max number of work-item CASes for each job (default is "unlimited")
ducc.threads.limit    = 500
# Extra JVM args to be appended to any user-supplied "driver_jvm_args"
# Note: should contain an Xmx a little below the "ducc.jd.share.quantum" value
#       the Xmx entry is ignored if the user has speccified one
ducc.driver.jvm.args  = -Xmx300M

# Extra JVM args to be appended to any user-supplied "process_jvm_args"
# ducc.process.jvm.args=-XX:+HeapDumpOnOutOfMemoryError
# ========== 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 wiht 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
# 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 unresponive
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
#------------------------------------------------------------------------------
ducc.orchestrator.abbreviated.state.update.endpoint=ducc.orchestrator.abbreviated.state
# endpoint type choices[topic]
ducc.orchestrator.abbreviated.state.update.endpoint.type=topic
ducc.orchestrator.abbreviated.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 recoveres state from an OR publication,
# instread of waiting for init.stability for nodes to check in. 
ducc.rm.state.update.endpoint.type=topic
# Frequency in milliseconds the RM publishes state.  Increase to 60000 for larger systems
# to avoid thrashing.
ducc.rm.state.publish.rate = 10000
# 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 thescheduler classes - found in DUCC_HOME/resources
ducc.rm.class.definitions = ducc.classes
# 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

# 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

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 30 intervals defined by ducc.agent.node.inventory.publish.rate
ducc.agent.node.inventory.publish.rate.skip=30
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/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.                                                                 
ducc.agent.launcher.process.init.timeout=7200000
# exclude the following user ids while detecting rogue processes
ducc.agent.rogue.process.user.exclusion.filter=root,postfix,ntp,nobody,daemon,100
#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=false
# 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
# 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
#
# 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

# UIMA AS Managed Process Configuration block
ducc.uima-as.configuration.class=org.apache.uima.ducc.agent.deploy.uima.UimaAsServiceConfiguration
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}/lib/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}/resources/dd2spring.xsl

# 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.common.uima.DuccJobProcessFC



