# This file shows all possible parameters with defaults. For some values, CAF
# computes a value at runtime if the configuration does not provide a value. For
# example, "caf.scheduler.max-threads" has no hard-coded default and instead
# adjusts to the number of cores available.
caf {
  # Parameters selecting a default scheduler.
  scheduler {
    # Use the work stealing implementation. Accepted alternative: "sharing".
    policy = "stealing"
    # Maximum number of messages actors can consume in single run (int64 max).
    max-throughput = 9223372036854775807
    # # Maximum number of threads for the scheduler. No hardcoded default.
    # max-threads = ... (detected at runtime)
  }
  # Prameters for the work stealing scheduler. Only takes effect if
  # caf.scheduler.policy is set to "stealing".
  work-stealing {
    # Number of zero-sleep-interval polling attempts.
    aggressive-poll-attempts = 100
    # Frequency of steal attempts during aggressive polling.
    aggressive-steal-interval = 10
    # Number of moderately aggressive polling attempts.
    moderate-poll-attempts = 500
    # Frequency of steal attempts during moderate polling.
    moderate-steal-interval = 5
    # Sleep interval between poll attempts.
    moderate-sleep-duration = 50us
    # Frequency of steal attempts during relaxed polling.
    relaxed-steal-interval = 1
    # Sleep interval between poll attempts.
    relaxed-sleep-duration = 10ms
  }
  # Parameters for the I/O module.
  middleman {
    # Configures whether MMs try to span a full mesh.
    enable-automatic-connections = false
    # Application identifiers of this node, prevents connection to other CAF
    # instances with incompatible identifiers.
    app-identifiers = ["generic-caf-app"]
    # Maximum number of consecutive I/O reads per broker.
    max-consecutive-reads = 50
    # Heartbeat message interval in ms (0 disables heartbeating).
    heartbeat-interval = 0ms
    # Configures whether the MM attaches its internal utility actors to the
    # scheduler instead of dedicating individual threads (needed only for
    # deterministic testing).
    attach-utility-actors = false
    # Configures whether the MM starts a background thread for I/O activity.
    # Setting this to true allows fully deterministic execution in unit test and
    # requires the user to trigger I/O manually.
    manual-multiplexing = false
    # # Configures how many background workers are spawned for deserialization.
    # # No hardcoded default.
    # workers = ... (detected at runtime)
  }
  # Parameters for logging.
  logger {
    # # Note: File logging is disabled unless a 'file' section exists that
    # # contains a setting for 'verbosity'.
    # file {
    #   # File name template for output log files.
    #   path = "actor_log_[PID]_[TIMESTAMP]_[NODE].log"
    #   # Format for rendering individual log file entries.
    #   format = "%r %c %p %a %t %C %M %F:%L %m%n"
    #   # Minimum severity of messages that are written to the log. One of:
    #   # 'quiet', 'error', 'warning', 'info', 'debug', or 'trace'.
    #   verbosity = "trace"
    #   # A list of components to exclude in file output.
    #   excluded-components = []
    # }
    # # Note: Console output is disabled unless a 'console' section exists that
    # # contains a setting for 'verbosity'.
    # console {
    #   # Enabled colored output when writing to a TTY if set to true.
    #   colored = true
    #   # Format for printing log lines (implicit newline at the end).
    #   format = "[%c:%p] %d %m"
    #   # Minimum severity of messages that are written to the console. One of:
    #   # 'quiet', 'error', 'warning', 'info', 'debug', or 'trace'.
    #   verbosity = "trace"
    #   # A list of components to exclude in console output.
    #   excluded-components = []
    # }
  }
}
