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

####################
# Worker Settings
####################

workerId: standalone
workerHostname: localhost
workerPort: 6750
workerPortTls: 6751

# Configuration Store connection string
configurationStoreServers: localhost:2181
# ZooKeeper session timeout in milliseconds
zooKeeperSessionTimeoutMillis: 30000
# ZooKeeper operation timeout in seconds
zooKeeperOperationTimeoutSeconds: 30

################################
# Function package management
################################

numFunctionPackageReplicas: 1
downloadDirectory: /tmp/pulsar_functions
# Classname of Pluggable JVM GC metrics logger that can log GC specific metrics
# jvmGCMetricsLoggerClassName: 

#################################################################
# Function metadata managment (assignment, scheduling, and etc)
#################################################################

# Configure the pulsar client used by function metadata management
#
# points 
pulsarServiceUrl: pulsar://localhost:6650
pulsarWebServiceUrl: http://localhost:8080
# the authentication plugin to be used by the pulsar client used in worker service
# clientAuthenticationPlugin:
# the authentication parameter to be used by the pulsar client used in worker service
# clientAuthenticationParameters:

# Bookie Authentication
#
# Authentication plugin to use when connecting to bookies
# bookkeeperClientAuthenticationPlugin:
# BookKeeper auth plugin implementatation specifics parameters name and values
# bookkeeperClientAuthenticationParametersName:
# Parameters for bookkeeper auth plugin
# bookkeeperClientAuthenticationParameters:


# pulsar topics used for function metadata management

pulsarFunctionsNamespace: public/functions
pulsarFunctionsCluster: standalone
functionMetadataTopicName: metadata
clusterCoordinationTopicName: coordinate
# Number of threads to use for HTTP requests processing. Default is set to 8
numHttpServerThreads: 8

# function assignment and scheduler

schedulerClassName: "org.apache.pulsar.functions.worker.scheduler.RoundRobinScheduler"
functionAssignmentTopicName: "assignments"
failureCheckFreqMs: 30000
rescheduleTimeoutMs: 60000
initialBrokerReconnectMaxRetries: 60
assignmentWriteMaxRetries: 60
instanceLivenessCheckFreqMs: 30000
# Frequency how often worker performs compaction on function-topics
topicCompactionFrequencySec: 1800


###############################
# Function Runtime Management
###############################

#threadContainerFactory:
#  threadGroupName: "Thread Function Container Group"
processContainerFactory:
  logDirectory:
  # change the jar location only when you put the java instance jar in a different location
  javaInstanceJarLocation:
  # change the python instance location only when you put the python instance jar in a different location
  pythonInstanceLocation:
  # change the extra dependencies location:
  extraFunctionDependenciesDir:
#kubernetesContainerFactory:
#  # uri to kubernetes cluster, leave it to empty and it will use the kubernetes settings in function worker
#  k8Uri:
#  # the kubernetes namespace to run the function instances. it is `default`, if this setting is left to be empty
#  jobNamespace:
#  # the docker image to run function instance. by default it is `apachepulsar/pulsar`
#  pulsarDockerImageName:
#  # the root directory of pulsar home directory in `pulsarDockerImageName`. by default it is `/pulsar`.
#  # if you are using your own built image in `pulsarDockerImageName`, you need to set this setting accordingly
#  pulsarRootDir:
#  # this setting only takes effects if `k8Uri` is set to null. if your function worker is running as a k8 pod,
#  # setting this to true is let function worker to submit functions to the same k8s cluster as function worker
#  # is running. setting this to false if your function worker is not running as a k8 pod.
#  submittingInsidePod: false
#  # setting the pulsar service url that pulsar function should use to connect to pulsar 
#  # if it is not set, it will use the pulsar service url configured in worker service
#  pulsarServiceUrl:
#  # setting the pulsar admin url that pulsar function should use to connect to pulsar
#  # if it is not set, it will use the pulsar admin url configured in worker service
#  pulsarAdminUrl:
#  # the custom labels that function worker uses to select the nodes for pods
#  customLabels:
#  # the directory for dropping extra function dependencies
#  # if it is not an absolute path, it is relative to `pulsarRootDir`
#  extraFunctionDependenciesDir:
#  # Additional memory padding added on top of the memory requested by the function per on a per instance basis
#  percentMemoryPadding: 10

## A set of the minimum amount of resources functions must request.
## Support for this depends on function runtime.
## Only kubernetes runtime currently supports this.
# functionInstanceMinResources:
#   cpu: 1
#   ram: 1073741824
#   disk: 10737418240

############################################
# security settings for worker service
############################################

# Enforce authentication
authenticationEnabled: false
# Enforce authorization on accessing functions api
authorizationEnabled: false
# Set of authentication provider name list, which is a list of class names
authenticationProviders:
# Authorization provider fully qualified class-name
authorizationProvider: org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider
# Set of role names that are treated as "super-user", meaning they will be able to access any admin-api
superUserRoles: 

#### tls configuration for worker service
# Enable TLS
tlsEnabled: false
# Path for the TLS certificate file
tlsCertificateFilePath: 
# Path for the TLS private key file
tlsKeyFilePath: 
# Path for the trusted TLS certificate file 
tlsTrustCertsFilePath:
# Accept untrusted TLS certificate from client 
tlsAllowInsecureConnection: false
# Tls cert refresh duration in seconds (set 0 to check on every new connection) 
tlsCertRefreshCheckDurationSec: 300

########################
# State Management
########################

# the service url points to bookkeeper table service
# stateStorageServiceUrl: bk://localhost:4181

########################
# Connectors
########################

connectorsDirectory: ./connectors
