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

################################
# 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 autentication provider name list, which is a list of class names
authenticationProviders: 
# 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

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

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

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

connectorsDirectory: ./connectors
