#########################################
### This is the default configuration for gearpump
### To use the application, you at least need to change gearpump.cluster to point to right master
#########################################

### Configurations that are shared by all services and all user applications...
gearpump {

  ##############################
  ### Required to change!!
  ### You need to set the master cluster address here
  ###
  ###
  ### For example, you may start three master
  ### on node1: bin/master -ip node1 -port 3000
  ### on node2: bin/master -ip node2 -port 3000
  ### on node3: bin/master -ip node3 -port 3000
  ###
  ### Then you need to set the cluster.masters = ["node1:3000","node2:3000","node3:3000"]
  cluster {
    masters = ["127.0.0.1:3000"]
  }

  ##############################
  ### Required to change!!
  ### You need to set the actual host name here
  ###
  hostname = "127.0.0.1"

  ## How many slots each worker contains
  worker.slots = 1000

  ## The class responsable for launching the executor process.
  ## User can switch to "org.apache.gearpump.cluster.worker.CGroupProcessLauncher" to enable CGroup support.
  worker.executor-process-launcher = "org.apache.gearpump.cluster.worker.DefaultExecutorProcessLauncher"

  ## To enable worker use cgroup to make resource isolation,
  ## set gearpump.worker.executor-process-launcher = "org.apache.gearpump.cluster.worker.CGroupProcessLauncher"
  ##
  ## Before enable it, you should also make sure:
  ## 	1. Linux version (>= 2.6.18)
  ## 	2. Have installed cgroup (check the file's existence:/proc/cgroups)
  ## You can get more information from http://gearpump.apache.org/releases/latest/deployment-resource-isolation.html
  ##
  ## For cgroup root, it represents the root node in CGroup's hierarchythe.
  ## It's full path in local file system is "${cpu_mount_point} + root".
  ## The cpu_mount_point is the cpu subsystem's mount poing in CGroup.
  ## The root dir should be consistent with the part configured in /etc/cgconfig.conf
  cgroup {
    root = "gearpump"

    ## This config only works when cgroup is enabled.
    ## The value means the number of CPU cores per executor can use, -1 means no limitation.
    cpu-core-limit-per-executor = 1
  }

  ## Whether to enable remote-debug mode.
  ## In remote debug mode, every executor process will bind to a free port, and
  ## listen for remote jvm debug.
  remote-debug-executor-jvm = false

  ### When the resource cannot be allocated in the timeout, then
  ### the appmaster will shutdown itself.
  resource-allocation-timeout-seconds = 120

  ##
  ## Executor share same process of worker
  worker.executor-share-same-jvm-as-worker = false

  ## Number of executors to launch when starting an application
  application.executor-num = 1

  ###########################
  ### Change the dispather for tasks
  ### If you don't know what this is about, don't change it
  ###########################

  task-dispatcher = "gearpump.shared-thread-pool-dispatcher"

  ### verbose gc
  ### turn on JVM verbose GC
  ### We will use -verbose:gc -Xloggc: -XX:+PrintGCDetails
  ### -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution
  ### -XX:+PrintGCApplicationConcurrentTime
  ### -XX:+PrintGCApplicationStoppedTime
  verbose-gc = false

  ###########################
  ### Metrics setting,
  ### If you want to use metrics, please change
  ###########################

  ### Flag to enable metrics
  metrics {
    enabled = true

    ### We will take one metric out of ${sample.rate}
    ### This config will slightly impact the application's performance, larger rate often brings higher throughput.
    sample-rate = 1

    report-interval-ms = 3000

    # reporter = "logfile"
    # reporter = "graphite"
    reporter = "akka"

    graphite {
      ## Graphite host settings
      host = "127.0.0.1"
      port = 2003
    }

    logfile {

    }

    ## Coarse-grain history metrics, which have a larger timespan but sparse data points
    retainHistoryData {
      # max hours of history data to retain
      # Note: due to implementation limitation(we store all history in memory),
      # please don't set this to too big which may exhaust memory.
      hours = 72

      # time interval between two data points for history data (unit: ms)
      # Usually this value is set to a big value so that we only store
      # coarse-grain data
      intervalMs = 3600000
    }

    ## fine-grain recent metrics which just happened, which have a smaller timespan but dense data points
    retainRecentData {

      # max seconds of recent data to retain,
      # THis is for the fine-grain data
      seconds = 300

      # time interval between two data points for recent data (unit: ms)
      intervalMs = 15000
    }
    akka {
      ### For this reporter, at most we will return max-limit-on-query metric item.
      max-limit-on-query = 1000

      ### Whitelist for Metrics Aggregator class.
      ### See class [[MetricsAggregator]] for more information.
      metrics-aggregator-class {
        ## Format org.apache.gearpump.KeyFullClassName = ""
      }
    }
  }

  #######################################
  ### Logging settings
  #######################################
  # The log dir for daemon processes
  log.daemon.dir = "logs"

  # The log dir for applications
  log.application.dir = "logs"

  serializers {
    ## Follow this format when adding new serializer for new message types
    #    "yourpackage.YourClass" = "yourpackage.YourSerializerForThisClass"

    ## If you intend to use default serializer for this class, then you can write this
    #    "yourpackage.YourClass" = ""
  }

  ### client's timeout (in second) to connect to master and wait for the response
  masterclient.timeout = 90

  ### Gearpump has built-in serialization framework using Kryo.
  ### User are allowed to use a different serialization framework, like Protobuf
  ### See [org.apache.gearpump.serializer.FastKryoSerializationFramework] to find how
  ### a custom serialization framework can be defined.
  serialization-framework = "org.apache.gearpump.serializer.FastKryoSerializationFramework"

  ### Define where the submitted jar file will be stored at

  ### This path follows the hadoop path schema
  ### For HDFS, use hdfs://host:port/path/
  ### For HDFS HA, use hdfs://namespace/path/
  ### For shared NFS folder, use file:///your_nfs_mapping_directory
  ### jarstore.rootpath = "jarstore/" will points to relative directory where master is started.
  ### jarstore.rootpath = "/jarstore/" will points to absolute directory on master server
  jarstore.rootpath = "jarstore/"

  #########################
  ### Scheduller for master, it will use this scheduler to schedule resource for
  ### different applications.
  ### If you don't know what is this about, don't change it
  #########################
  scheduling {
    scheduler-class = "org.apache.gearpump.cluster.scheduler.PriorityScheduler"
  }

  #############################################
  # Default Configuration for REST, WebSocket, Http services
  #############################################

  #########################
  ### services can be started by a command line tool bin/services
  ### If you don't know what is this about, don't change it
  #########################
  services {
    host = "0.0.0.0"
    http = 8090
    supervisor-actor-path = ""

    ## To get a detail config string with origin and comments, change this to false.
    config-render-option-concise = true
  }

  ## Time out setting to start a new executor system
  ## It takes a bit longer time than expected as a new JVM is created
  start-executor-system-timeout-ms = 120000

  #############################################
  ## Default Configuration for Gearpump Netty transport layer
  ## If you don't know what is this about, don't change it
  #############################################
  netty {
    buffer-size = 5242880
    max-retries = 30
    base-sleep-ms = 100
    max-sleep-ms = 1000
    message-batch-size = 262144
    flush-check-interval = 5
    dispatcher = "gearpump.shared-thread-pool-dispatcher"
  }

  ###################
  ### Appmaster JVM argument configuration
  ###################
  appmaster {
    vmargs = "-server -Xms512M -Xmx1024M -Xss1M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseParNewGC -XX:NewRatio=3 -Djava.rmi.server.hostname=localhost"
    extraClasspath = ""
  }

  ###################
  ### Executor argument configuration
  ### Executor JVM can contains multiple tasks
  ###################
  executor {
    vmargs = "-server -Xms512M -Xmx1024M -Xss1M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseParNewGC -XX:NewRatio=3  -Djava.rmi.server.hostname=localhost"
    extraClasspath = ""
  }

  ### Streaming related configuration
  streaming {
    ## We will timeout the task if it cannot register itself to AppMaster in time.
    register-task-timeout-ms = 120000

    ## ack once after sending ack-once-every-message-count messages.
    ack-once-every-message-count = 100

    ## max pending message per task to task connection. If pending message size is
    ## over this, then the flow control will not allow further sending.
    ## This value should be bigger than ack-once-every-message-count
    max-pending-message-count-per-connection = 1000
  }

  ##################################
  ### Akka Dispatcher configurations
  ### If you don't know what is this about, don't change it
  ##################################
  shared-thread-pool-dispatcher {
    mailbox-type = "akka.dispatch.SingleConsumerOnlyUnboundedMailbox"
    throughput = 100
    fork-join-executor {
      parallelism-factor = 2
      parallelism-max = 8
      parallelism-min = 2
    }
  }

  single-thread-dispatcher {
    type = PinnedDispatcher
  }

  ###########################
  ### Configuration for yarn module
  ###########################
  yarn {
    ## By default the owner of yarn application(Here is a Gearpump cluster) is the one who
    ## launches yarnclient.
    ## Now you delegat to other users by setting following config.
    # user = "guest"

    client {
      package-path = "/usr/lib/gearpump/gearpump.zip"
    }

    applicationmaster {
      ## Memory of YarnAppMaster
      command = "$JAVA_HOME/bin/java -Xmx512m"
      memory = "512"
      vcores = "1"
      queue = "default"
    }

    master {
      ## Memory of master daemon
      command = "$JAVA_HOME/bin/java  -Xmx512m"
      memory = "512"
      vcores = "1"
    }

    worker {
      ## memory of worker daemon
      command = "$JAVA_HOME/bin/java  -Xmx512m"
      containers = "1"
      ## This also contains all memory for child executors.
      memory = "4096"
      vcores = "1"
    }
    services {
      enabled = true
    }
  }
}

### Configuration only visible to master nodes..
gearpump-master {
  extensions = [
    "akka.cluster.ddata.DistributedData$"
  ]
  akka {
    #########################################
    ### For log level of Master, you need to change both log4j.properties and this entry
    #########################################
    loglevel = "INFO"

    log-dead-letters = off
    log-dead-letters-during-shutdown = off
    actor {
      ## Master forms a akka cluster
      provider = "akka.cluster.ClusterActorRefProvider"
    }
    cluster {
      roles = ["master"]
      ## TODO: in integration test, 15s may be too small
      ## auto-down-unreachable-after = 90s
      ## The value of this setting will impact master HA recovery time
      auto-down-unreachable-after = 15s
    }
    remote {
      log-remote-lifecycle-events = off
    }
  }
}

### Configuration only visible to worker nodes...
gearpump-worker {
  ## Add worker overrided config
  akka {
    #########################################
    ### For log level of Worker, you need to change both log4j.properties and this entry
    #########################################
    loglevel = "INFO"
    log-dead-letters = off
    log-dead-letters-during-shutdown = off
    actor {
      provider = "akka.remote.RemoteActorRefProvider"
    }
    cluster {
      roles = ["worker"]
    }
    remote {
      log-remote-lifecycle-events = off
    }
  }
}

#########################################
### For log level of Akka class, you need to change both log4j.properties and this entry
#########################################
#akka.loglevel = "INFO"

### configurations only visible to UI server.
gearpump-ui {
  ## Security related settings
  gearpump.ui-security {

    ## Whether enable authentication for UI Server
    authentication-enabled = false

    ## User-Password based authenticator
    ##
    ## User-Password based authenticator is always enabled when
    ## gearpump.ui-security.authentication-enabled = true
    ##
    ## With User-Password based authenticator inplace, user can still enable auxiliary
    ## authentication channel like OAuth2.
    ##
    ## User can replace this with a custom User-Password based authenticator,
    ## which implements interface org.apache.gearpump.security.Authenticator
    ##
    authenticator = "org.apache.gearpump.security.ConfigFileBasedAuthenticator"

    ## Configuration options for authenticator org.apache.gearpump.security.ConfigFileBasedAuthenticator
    config-file-based-authenticator = {
      ## Format: username = "password_hash_value"
      ## password_hash_value can be generated by running shell tool:
      ## bin/gear org.apache.gearpump.security.PasswordUtil -password <your raw password>

      ## Admin users have super permission to do everything
      admins = {
        ## Default Admin. Username: admin, password: admin
        ## !!! Please replace this builtin account for production cluster for security reason. !!!
        "admin" = "AeGxGOxlU8QENdOXejCeLxy+isrCv0TrS37HwA=="
      }

      ## normal user have special permission for certain operations.
      users = {
        ## "user" = "AeGxGOxlU8QENdOXejCeLxy+isrCv0TrS37HwA=="
      }

      ## Guest user can only view the UI with minimum permission. With no permission to submit/change/kill
      ## a running application.
      guests = {
        ## Default guest. Username: guest, Password: guest
        ## !!! Please replace this builtin account for production cluster for security reason. !!!
        "guest" = "ws+2Dy/FHX4cBb3uKGTR64kZWlWbC91XZRRoew=="
      }
    }

    ## Whether to enable auxiliary OAuth2 Authentication channel.
    ##
    ## NOTE: This requires config {{{gearpump.ui-security.authentication-enabled = true}}}
    ##
    ## NOTE: User-Password based authenticator will also be enabled.
    ##
    ## NOTE: OAuth2 authentication requires that the Gearpump server can directly access the OAuth2 server.
    ## Please make sure you have configured web proxy properly if applies.
    ## To configure http proxy on Windows:
    ## {{{
    ## > set JAVA_OPTS=-Dhttp.proxyHost=xx.com -Dhttp.proxyPort=8088 -Dhttps.proxyHost=xx.com -Dhttps.proxyPort=8088
    ## > bin\services
    ## }}}
    ##
    ## To configure http proxy on Linux:
    ## {{{
    ## $ export JAVA_OPTS="-Dhttp.proxyHost=xx.com -Dhttp.proxyPort=8088 -Dhttps.proxyHost=xx.com -Dhttps.proxyPort=8088"
    ## $ bin/services
    ## }}}
    oauth2-authenticator-enabled = true
    oauth2-authenticators {
      ## Please modify the list if you have customized OAuth2 provider, like Facebook, Twitter...

      ## OAuth2 Authenticator with Google Plus+
      ##
      ## For steps to enable OAuth2 Authentication on Google, please view docs/deployment-ui-authentication.md
      ##
      "google" {
        "class" = "org.apache.gearpump.services.security.oauth2.impl.GoogleOAuth2Authenticator"

        ## Please replace "127.0.0.1:8090" with your address of UI service.
        "callback" = "http://127.0.0.1:8090/login/oauth2/google/callback"

        ## Client Id and client secret you applied on Google.
        ##
        ## !!NOTE!! Replace clientID and clientSecret with your own application to avoid
        ## potential privacy leakage, the values set here represents as a test application.
        "clientid" = "170234147043-a1tag68jtq6ab4bi11jvsj7vbaqcmhkt.apps.googleusercontent.com"
        "clientsecret" = "ioeWLLDipz2S7aTDXym2-obe"

        ## The default role we assign to user when user get authenticated by Google.
        ##
        ## TODO: should allow some user group have a different role, like admin.
        ##
        ## Available values: guest, user, admin, with:
        ##   1. guest can only view the application status,
        ##   2. user can submit and modify application.
        ##   3. admin can manage the cluster resource, like adding or removing machines.
        "default-userrole" = "guest"

        ## Login icon disiplayed on UI server frontend
        icon = "/icons/google.png"
      }

      ## OAuth2 Authenticator for CloudFoundry UAA server (https://github.com/cloudfoundry/uaa/).
      ##
      ## For steps to enable OAuth2 Authentication for UAA, please view docs/deployment-ui-authentication.md
      ##
      "cloudfoundryuaa" {
        "class" = "org.apache.gearpump.services.security.oauth2.impl.CloudFoundryUAAOAuth2Authenticator"

        ## Please replace "127.0.0.1:8090" with your address of UI service.
        "callback" = "http://127.0.0.1:8090/login/oauth2/cloudfoundryuaa/callback"

        ## Client Id and client secret you applied on UAA.
        ##
        ## !!NOTE!! Replace clientID and clientSecret with your own application to avoid
        ## potential privacy leakage, the values set here serves as a test application.
        "clientid" = "<your client id registered on UAA>"
        "clientsecret" = "<your client secret registered on UAA>"

        ## The default role we assign to user when user get authenticated by UAA.
        ##
        ## TODO: should allow some user group have a different role, like admin.
        ##
        ## Available values: guest, user, admin, with:
        ##   1. guest can only view the application status,
        ##   2. user can submit and modify application.
        ##   3. admin can manage the cluster resource, like adding or removing machines.
        "default-userrole" = "guest"

        ## Login icon disiplayed on UI server frontend
        icon = "/icons/uaa.png"

        ## Cloud Foundry UAA Login Endpoint. Prefixed by "http://" or "https://"
        ##
        ## !!NOTE!! Please relace uaahost with your actual Cloudfounudry UAA login endpoint, the
        ## value set here serves as an example.
        uaahost = "http://<cloud foundry login endpoint>"

        ## Whether to enable additional authorization check.
        ## If the user fails the check, then Gearpump would log user out.
        additional-authenticator-enabled = true

        ## Define how to do additional authorization check. The class should implement
        ## interface CloudFoundryUAAOAuth2Authenticator.AdditionalAuthenticator
        additional-authenticator = {
          "class" = "org.apache.gearpump.services.security.oauth2.impl.CloudFoundryUAAOAuth2Authenticator$OrganizationAccessChecker"

          ## Please fill the Cloud Foundry API endpoint and organization GUID
          "organization-url" = "http://<cloud foundry api endpoint>/v2/organizations/<organization-guid>"
        }
      }
    }
  }

  ## Akka http dispatcher settings.
  akka.stream.materializer.dispatcher = "gearpump.ui-default-dispatcher"

  ## Timeout settings for akka-http
  akka.http.server.idle-timeout = 300 s

  ## When uploading a large job jar, it takes a long time to launch the job jar in cluster
  ## before we respond to client.
  akka.http.server.request-timeout = 600 s
}

## Configurations only visible on Linux or Mac.
gearpump-linux {
  ### On windows, the value must be larger than 10ms, check
  ### https://github.com/akka/akka/blob/master/akka-actor/src/main/scala/akka/actor/Scheduler.scala#L204
  akka.scheduler.tick-duration = 1
}
