Destination Options
Info
These options configure behaviour in the Destination editor Properties field. They apply to a specific Destination and use the scheduler., incoming., alias. and mqtt. prefixes.
scheduler.* — Transfer Scheduler Options
These options affect the transfer requests created for the destination queue.
Timing & scheduling
| Option | Type | Default | Description |
scheduler.activeTimeRange | String | none | Comma-separated list of time ranges during which the destination scheduler is active. Use it to process dissemination only within selected windows |
scheduler.asap | Boolean | disabled | Set the schedule time to “now” for each submitted transfer. This overrides the -asap option from the ecpds command, but transfers can still wait behind other queued work or lower priority |
scheduler.delay | Duration | none | Add an extra delay to the scheduled time of each submitted transfer. This is cumulative with delays already set through ecpds -delay or incoming.delay |
scheduler.lifetime | Duration | none | Set the lifetime of submitted transfer requests. Once the lifetime expires, the transfer is marked expired and is no longer available for dissemination or download |
scheduler.standby | Boolean | none | Change the standby flag of submitted transfer requests |
scheduler.version | String | none | Set an optional version for submitted transfer requests. Supported placeholders include $date, $timestamp, $destination, $target, $original and $timefile |
scheduler.dateformat | String | platform default | Date format used for the $date placeholder inside scheduler.version |
Queue management & request attributes
| Option | Type | Default | Description |
scheduler.transfergroup | String | none | Change the transfergroup assigned to submitted transfer requests |
scheduler.noRetrieval | Boolean | none | Change the noRetrieval flag of submitted transfer requests |
scheduler.resetQueueOnChange | Boolean | disabled | Reset affected destination queues when new data files arrive through the retrieval scheduler. Useful when newly queued transfers should immediately take priority over transfers already loaded in memory |
scheduler.masterToNotifyOnDone | Hostname | none | Notify another master when a transfer completes successfully so the matching transfer on that master can be stopped. Matching is based on destination name, target name and transfer unique key; the remote master must be reachable via RMI |
scheduler.forceStop | Boolean | disabled | Force all transfer requests submitted to this destination into STOP status when failOnDestinationNotFound is enabled on the master |
Requeue & duplicate handling
| Option | Type | Default | Description |
scheduler.requeueon | JavaScript expression | none | Check for another transfer in the same destination with the same target name but a different transfer ID, then put the current transfer on hold when the expression evaluates as a duplicate. Available variables: $time1, $time2, $size1, $size2, $destination, $target |
scheduler.requeuepattern | Regex | none | Regex selecting target names that should be checked by scheduler.requeueon |
scheduler.requeueignore | Regex | none | Regex selecting target names that should be skipped by scheduler.requeueon |
Force overrides
| Option | Type | Default | Description |
scheduler.force | Multi-line rule set | none | Override scheduler parameters for selected files. Supported parameters include scheduler.lifetime, scheduler.delay, scheduler.noRetrieval, scheduler.asap, scheduler.transfergroup and scheduler.standby. Rules can be single-line (asap=yes;standby=never;pattern=E1(.*)) or multi-line using operators .=, ==, =., !=. With ==, a filename wrapped in {} is treated as a regex |
Quick-start example — business-hours scheduling
scheduler.activeTimeRange = "06:00-18:00,20:00-22:00"
scheduler.delay = "15m"
scheduler.lifetime = "3d"
scheduler.version = "$destination-$date-$target"
scheduler.dateformat = "yyyyMMdd"
Quick-start example — hold larger duplicate files
scheduler.requeueon = "$size2 > $size1"
scheduler.requeuepattern = "(.*)\.grib"
scheduler.requeueignore = "(.*)\.tmp"
Quick-start example — force rules per filename
scheduler.force = "
(== {avhrr_n.*}) standby=never;delay=2h
(.= E1) asap=yes;transfergroup=internet
(=. .tmp) standby=always
"
incoming.* — Destination Portal Options
These options control how files pushed to or pulled from this Destination behave in the Data Portal. They are destination-level settings, unlike portal.*, which applies to a specific Data User.
Upload scheduling & lifecycle
| Option | Type | Default | Description |
incoming.standby | Boolean | none | Force uploaded files into standby mode |
incoming.priority | Integer | none | Set the priority of files pushed through the Data Portal |
incoming.delay | Duration | 0 | Delay the scheduled time of files pushed through the Data Portal. By default, the scheduled time is the current time |
incoming.lifetime | Duration | none | Set the lifetime of files pushed through the Data Portal. Expired transfers become unavailable for dissemination or download |
incoming.version | String | none | Set an optional version for uploaded files. Supported placeholders include $date, $timestamp, $destination, $target, $original and $timefile |
incoming.dateformat | String | platform default | Date format used for the $date placeholder inside incoming.version and incoming.metadata |
incoming.event | Boolean | disabled | Generate an event when a user pushes a file through the Data Portal, allowing downstream notification systems such as MQTT to react |
Temporary upload handling
| Option | Type | Default | Description |
incoming.tmpDetect | Boolean | disabled | Treat uploaded files as temporary based on incoming.tmpPattern. Temporary files remain in standby until the user renames them to their final name |
incoming.tmpPattern | Regex | (^\.)|(\.tmp$) | Regex used by incoming.tmpDetect to identify temporary files. By default, a file is temporary when its basename starts with . and/or ends with .tmp (case-insensitive) |
| Option | Type | Default | Description |
incoming.metadata | String | none | Define metadata for uploaded files. Supported placeholders include $date, $timestamp, $destination, $target, $original and $timefile |
incoming.failOnMetadataParsingError | Boolean | disabled | Discard the file when incoming.metadata cannot be parsed successfully |
Listing & presentation
| Option | Type | Default | Description |
incoming.rootdir | String | Destination name | Alternate name shown for this destination path in the Data Portal |
incoming.sort | String | none | Sort the Data Portal listing by size, target name, or time |
incoming.order | String | none | Sort direction when incoming.sort is set: asc or desc |
Transfer-rate limits & quotas
| Option | Type | Default | Description |
incoming.maxBytesPerSecForInput | ByteRate | none | Cap the transfer rate for downloads via the Data Portal |
incoming.maxBytesPerSecForOutput | ByteRate | none | Cap the transfer rate for uploads via the Data Portal |
incoming.maxUploadBytes | ByteSize | none | Maximum bytes that may be uploaded to this destination within the rolling window defined by incoming.uploadPeriod. New upload connections are refused once the limit is reached |
incoming.uploadPeriod | Duration | none | Rolling time window for incoming.maxUploadBytes. Both must be set to activate the upload quota |
incoming.maxDownloadBytes | ByteSize | none | Maximum bytes that may be downloaded from this destination within the rolling window defined by incoming.downloadPeriod. New download connections are refused once the limit is reached |
incoming.downloadPeriod | Duration | none | Rolling time window for incoming.maxDownloadBytes. Both must be set to activate the download quota |
incoming.priority = "80"
incoming.delay = "10m"
incoming.version = "$date-$target"
incoming.dateformat = "yyyyMMddHHmm"
incoming.metadata = "source=portal;target=$target;version=$date"
incoming.event = "yes"
Quick-start example — temporary uploads and quotas
incoming.tmpDetect = "yes"
incoming.tmpPattern = "(.*)\.partial|(.*)\.tmp"
incoming.maxUploadBytes = "100GB"
incoming.uploadPeriod = "24h"
incoming.maxBytesPerSecForOutput = "20MB"
alias.* — Destination Alias Options
Conditional aliasing
| Option | Type | Default | Description |
alias.pattern | Multi-line rule set | none | Select which files should be aliased to the target destination and optionally enforce alias parameters before the alias is created |
alias.pattern accepts comma-separated parameters such as:
- selectors:
pattern=..., ignore=... - alias attributes:
lifetime=..., priority=..., asap=..., event=..., delay=... - date controls for
$date: dateformat=..., datedelta=..., datesource=..., datepattern=... - target rewriting with placeholders such as
$name, $path, $parent, $destination, $alias and $date
For multi-line rules, each line uses this format:
({operator} target) parameter1=value1,parameter2=value2
Supported operators are ==, !=, .= and =.. With ==, a target wrapped in {} is interpreted as a regex.
Quick-start example — alias GRIB files only
alias.pattern = "pattern=(.*)\.grib,ignore=(.*)\.tmp,lifetime=P2D,priority=80,asap=yes"
Quick-start example — rewrite targets per pattern
alias.pattern = "
(== {(.*)\.dat}) lifetime=P2D,priority=80,asap=yes,event=no,delay=PT15M,target=/archive/$target
(.= M) target=/mirror/$date/$target,dateformat=MMdd,datedelta=-1,datesource=$target[2..12],datepattern=yyyyMMddHH
"
mqtt.* — MQTT Publishing Options
These options control MQTT notifications published when destination transfer requests complete.
| Option | Type | Default | Description |
mqtt.publish | Boolean | disabled | Publish MQTT notifications when transfer requests for this destination complete, provided those transfers triggered events through acquisition.event or incoming.event |
mqtt.topic | String | destinationName/ | MQTT topic to publish to. If the topic ends with / — including the default case when no topic is specified — the target name is appended |
mqtt.qos | Integer | broker/client default | MQTT Quality of Service level: 0 (at most once), 1 (at least once), or 2 (exactly once) |
mqtt.expiryInterval | Duration | Transfer expiry time | How long the broker should retain an undelivered message when subscribers are unavailable |
mqtt.contentType | MIME type | none | Content type describing the MQTT payload format, for example application/json |
mqtt.clientId | String | none | Publish messages to a specific MQTT client connected to the HiveMQ broker |
mqtt.retain | Boolean | disabled | Set the MQTT retain flag so the broker stores the latest message on the topic and delivers it to new subscribers until it expires or is replaced |
Quick-start example — retained JSON notifications
incoming.event = "yes"
mqtt.publish = "yes"
mqtt.topic = "ecpds/data/"
mqtt.qos = "1"
mqtt.contentType = "application/json"
mqtt.retain = "yes"