# This line is required. It pulls in default overrides from the embedded cromwell # `reference.conf` (in core/src/main/resources) needed for proper performance of cromwell. include required(classpath("application")) # Cromwell HTTP server settings webservice { #port = 8000 #interface = 0.0.0.0 #binding-timeout = 5s #instance.name = "reference" } akka { # Optionally set / override any akka settings http { server { # Increasing these timeouts allow rest api responses for very large jobs # to be returned to the user. When the timeout is reached the server would respond # `The server was not able to produce a timely response to your request.` # https://gatkforums.broadinstitute.org/wdl/discussion/10209/retrieving-metadata-for-large-workflows # request-timeout = 20s # idle-timeout = 20s } } } # Cromwell "system" settings system { # If 'true', a SIGINT will trigger Cromwell to attempt to abort all currently running jobs before exiting #abort-jobs-on-terminate = false # If 'true', a SIGTERM or SIGINT will trigger Cromwell to attempt to gracefully shutdown in server mode, # in particular clearing up all queued database writes before letting the JVM shut down. # The shutdown is a multi-phase process, each phase having its own configurable timeout. See the Dev Wiki for more details. #graceful-server-shutdown = true # Cromwell will cap the number of running workflows at N #max-concurrent-workflows = 5000 # Cromwell will launch up to N submitted workflows at a time, regardless of how many open workflow slots exist #max-workflow-launch-count = 50 # Number of seconds between workflow launches #new-workflow-poll-rate = 20 # Since the WorkflowLogCopyRouter is initialized in code, this is the number of workers #number-of-workflow-log-copy-workers = 10 # Default number of cache read workers #number-of-cache-read-workers = 25 io { # Global Throttling - This is mostly useful for GCS and can be adjusted to match # the quota availble on the GCS API #number-of-requests = 100000 #per = 100 seconds # Number of times an I/O operation should be attempted before giving up and failing it. #number-of-attempts = 5 } # Maximum number of input file bytes allowed in order to read each type. # If exceeded a FileSizeTooBig exception will be thrown. input-read-limits { #lines = 128000 #bool = 7 #int = 19 #float = 50 #string = 128000 #json = 128000 #tsv = 128000 #map = 128000 #object = 128000 } abort { # These are the default values in Cromwell, in most circumstances there should not be a need to change them. # How frequently Cromwell should scan for aborts. scan-frequency: 30 seconds # The cache of in-progress aborts. Cromwell will add entries to this cache once a WorkflowActor has been messaged to abort. # If on the next scan an 'Aborting' status is found for a workflow that has an entry in this cache, Cromwell will not ask # the associated WorkflowActor to abort again. cache { enabled: true # Guava cache concurrency. concurrency: 1 # How long entries in the cache should live from the time they are added to the cache. ttl: 20 minutes # Maximum number of entries in the cache. size: 100000 } } # Cromwell reads this value into the JVM's `networkaddress.cache.ttl` setting to control DNS cache expiration dns-cache-ttl: 3 minutes } workflow-options { # These workflow options will be encrypted when stored in the database #encrypted-fields: [] # AES-256 key to use to encrypt the values in `encrypted-fields` #base64-encryption-key: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" # Directory where to write per workflow logs #workflow-log-dir: "cromwell-workflow-logs" # When true, per workflow logs will be deleted after copying #workflow-log-temporary: true # Workflow-failure-mode determines what happens to other calls when a call fails. Can be either ContinueWhilePossible or NoNewCalls. # Can also be overridden in workflow options. Defaults to NoNewCalls. Uncomment to change: #workflow-failure-mode: "ContinueWhilePossible" default { # When a workflow type is not provided on workflow submission, this specifies the default type. #workflow-type: WDL # When a workflow type version is not provided on workflow submission, this specifies the default type version. #workflow-type-version: "draft-2" # To set a default hog group rather than defaulting to workflow ID: #hogGroup: "static" } } # Optional call-caching configuration. call-caching { enabled = true invalidate-bad-cache-results = true } docker { hash-lookup { # Set this to match your available quota against the Google Container Engine API #gcr-api-queries-per-100-seconds = 1000 # Time in minutes before an entry expires from the docker hashes cache and needs to be fetched again #cache-entry-ttl = "20 minutes" # Maximum number of elements to be kept in the cache. If the limit is reached, old elements will be removed from the cache #cache-size = 200 # How should docker hashes be looked up. Possible values are "local" and "remote" # "local": Lookup hashes on the local docker daemon using the cli # "remote": Lookup hashes on docker hub and gcr #method = "remote" } } aws { application-name = "cromwell" auths = [{ name = "default" scheme = "default" }] region = ${AWS_REGION} } engine { filesystems { s3 { auth = "default" } } } # You probably don't want to override the language factories here, but the strict-validation and enabled fields might be of interest: # # `enabled`: Defaults to `true`. Set to `false` to disallow workflows of this language/version from being run. # `strict-validation`: Specifies whether workflows fail if the inputs JSON (or YAML) file contains values which the workflow did not ask for (and will therefore have no effect). languages { WDL { versions { "draft-2" { # language-factory = "languages.wdl.draft2.WdlDraft2LanguageFactory" # config { # strict-validation: true # enabled: true # caching { # # WDL Draft 2 namespace caching is off by default, this value must be set to true to enable it. # enabled: false # # Guava cache concurrency # concurrency: 2 # # How long entries in the cache should live from the time of their last access. # ttl: 20 minutes # # Maximum number of entries in the cache (i.e. the number of workflow source + imports => namespace entries). # size: 1000 # } # } } # draft-3 is the same as 1.0 so files should be able to be submitted to Cromwell as 1.0 # "draft-3" { # language-factory = "languages.wdl.draft3.WdlDraft3LanguageFactory" # config { # strict-validation: true # enabled: true # } # } "1.0" { # 1.0 is just a rename of draft-3, so yes, they really do use the same factory: # language-factory = "languages.wdl.draft3.WdlDraft3LanguageFactory" # config { # strict-validation: true # enabled: true # } } } } CWL { versions { "v1.0" { # language-factory = "languages.cwl.CwlV1_0LanguageFactory" # config { # strict-validation: false # enabled: true # } } } } } # Here is where you can define the backend providers that Cromwell understands. # The default is a local provider. # To add additional backend providers, you should copy paste additional backends # of interest that you can find in the cromwell.example.backends folder # folder at https://www.github.com/broadinstitute/cromwell # Other backend providers include SGE, SLURM, Docker, udocker, Singularity. etc. # Don't forget you will need to customize them for your particular use case. backend { # Override the default backend. default = "AWSBATCH" providers { AWSBATCH { actor-factory = "cromwell.backend.impl.aws.AwsBatchBackendLifecycleActorFactory" config { root = ${ROOT_DIR} numSubmitAttempts = 10 numCreateDefinitionAttempts = 10 auth = "default" default-runtime-attributes { queueArn = ${JOB_QUEUE_ARN} , scriptBucketName = ${S3BUCKET} } filesystems { s3 { auth = "default" duplication-strategy: ["hard-link", "soft-link", "copy"] } } } } } } services { MetadataService { } Instrumentation { } HealthMonitor { config { } } LoadController { config { # The load controller service will periodically look at the status of various metrics its collecting and make an # assessment of the system's load. If necessary an alert will be sent to the rest of the system. # This option sets how frequently this should happen # To disable load control, set this to "Inf" # control-frequency = 5 seconds } } } database { profile = "slick.jdbc.HsqldbProfile$" db { driver = "org.hsqldb.jdbcDriver" url = """ jdbc:hsqldb:file:cromwell-executions/cromwell-db/cromwell-db; shutdown=false; hsqldb.default_table_type=cached;hsqldb.tx=mvcc; hsqldb.result_max_memory_rows=10000; hsqldb.large_data=true; hsqldb.applog=1; hsqldb.lob_compressed=true; hsqldb.script_format=3 """ connectionTimeout = 120000 numThreads = 1 } migration { # For databases with a very large number of symbols, selecting all the rows at once can generate a variety of # problems. In order to avoid any issue, the selection is paginated. This value sets how many rows should be # retrieved and processed at a time, before asking for the next chunk. #read-batch-size = 100000 # Because a symbol row can contain any arbitrary wdl value, the amount of metadata rows to insert from a single # symbol row can vary from 1 to several thousands (or more). To keep the size of the insert batch from growing out # of control we monitor its size and execute/commit when it reaches or exceeds writeBatchSize. # write-batch-size = 100000 } }