#
# 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 is used for falcon packaging only. ####
####################################################

*.domain=${falcon.app.type}

#### To configure falcon servers with prism ####
#prism should have the following properties
prism.all.colos=local
prism.falcon.local.endpoint=https://localhost:15443

# falcon server should have the following properties
falcon.current.colo=local

#default number of results per call, if numResults option is not specified then this value is used.
*.webservices.default.results.per.page=10

# retry count - to fetch the status from the workflow engine
*.workflow.status.retry.count=30

# Default configs to handle replication for late arriving feeds.
*.feed.late.allowed=true
*.feed.late.frequency=hours(3)
*.feed.late.policy=exp-backoff

# If true, Falcon skips oozie dryrun while scheduling entities.
*.falcon.skip.dryrun=false

# If set to false, the post processing action of Oozie workflows will not generate JMS notification for Falcon.
# If you are setting this to false, ensure you have enabled Oozie JMS notifications in oozie-site.xml.
# Else, all features such as failure retry, late data handling and metadata service will be disabled for 
# all entities on the Falcon server.
*.falcon.jms.notification.enabled=true

######### Proxyuser Configuration Start #########

#List of hosts the '#USER#' user is allowed to perform 'doAs 'operations from. The '#USER#' must be replaced with the
#username of the user who is allowed to perform 'doAs' operations. The value can be the '*' wildcard or a list of
#comma separated hostnames

*.falcon.service.ProxyUserService.proxyuser.#USER#.hosts=*

#List of groups the '#USER#' user is allowed to 'doAs 'operations. The '#USER#' must be replaced with the
#username of the user who is allowed to perform 'doAs' operations. The value can be the '*' wildcard or a list of
#comma separated groups

*.falcon.service.ProxyUserService.proxyuser.#USER#.groups=*

######### Proxyuser Configuration End #########
