Data Mover: ecmwf.properties¶
The Mover's ecmwf.properties configures its Master connection, public protocol listeners, data repository, retrieval behaviour and shared runtime. This reference includes options read by the implementation even if they are absent from the supplied template.
See also the Master and Monitor references.
The optional ECaccess transfer module requires Master RMI connectivity and the existing ECproxyPlugin callback listener. Its gateway properties belong to Hosts, not a new Mover provider section.
File location and overrides¶
The source template is etc/mover/conf/ecmwf.properties. Its RPM path is /usr/local/ecpds/mover/conf/ecmwf.properties; the launcher selects it with the ecmwf.properties JVM property.
Use /etc/ecpds/mover.cnf or the container/service environment for launcher settings such as addresses, ports, operational mode and shared secrets. The template's ${...} expressions resolve JVM properties, section references or supported methods, not arbitrary environment variables.
The final #include "${mover.etc}/ecmwf.properties" loads local overrides, normally from /etc/ecpds/mover/ecmwf.properties. This is an active directive, not a commented-out example. Do not include the file into itself. See the configuration syntax and loading rules.
For example:
Restart the affected Mover after changing service configuration unless a feature explicitly supports live updates.
Reading this reference¶
Code fallback means the reader's value when the option is absent, not the explicit shipped value. A dash means no assignment in the template. null means the reader supplies no fallback; it does not guarantee that omitting the setting is valid. Different reader fallbacks are listed separately, with source links. Java expressions are preserved for context-dependent defaults. Credentials are not reproduced.
Rows marked template entry have no direct literal reader in this process's reviewed sources. Some entries are substitutions or retained compatibility settings; named-socket and open-map readers are described separately.
Names are case-sensitive. Duration-reading options accept suffixes such as s, m, h and d; bare configured durations mean hours. Plain numeric socket timeouts are milliseconds. Rates in [TestModule] are bytes per second; file-content settings take a path, while their fallback is content.
Operational guidance¶
Public listeners, portal links and control-channel authentication are separate:
[PluginList]selects services to start; plugin sections configure them. Advertising a protocol in[DataPortal]does not start its listener.[HttpPlugin]serves the Data Portal, REST control channel, optional S3 endpoint and WebDAV. Restricting public portal access does not replace control-channel authentication.[Security] rccSharedSecretsigns REST control requests between relays and regular Movers.cliSharedSecretprotects a different direct-socket connection; do not confuse the two.[MoverProxy]configures a control-plane HTTP tunnel. It is not an OpenTelemetry exporter or a generic outbound transfer proxy.[ProxySocket] plainText=yesdisables TLS on that socket. Keep internal traffic on trusted networks and review TLS verification before exposing it.[Mover] operationalaffects work availability and test behaviour. The[TestModule]options are not normal production transfer-rate limits.
Movers follow the Master's transfer-tracing decision and forward completed spans through the existing control connection. They need no OpenTelemetry Collector endpoint, credentials or SDK configuration; see Event Logging.
For transfer-module settings and per-user portal policy, use the linked references in the dynamic-families section below. Those defaults can affect many transfers, so prefer a Host or User override when only one entity needs a different policy.
Option catalogue¶
Shared components and optional modules consume their settings only when used; listing an option does not activate that component. Named socket sections inherit [SocketConfig], then apply their own overrides.
[CallBack]¶
Exported callback endpoint. serverFactory and clientFactory are Java socket-factory classes. This section also accepts the named socket overrides described below.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
clientFactory | null (no reader fallback) | ecmwf.common.rmi.RMIClientSocketFactory | CallBackObject:150 |
keepAlive | Inherits [SocketConfig] keepAlive | yes | Template:89 |
listenAddress | Inherits [SocketConfig] listenAddress | ${Login[internalAddress]} | Template:84 |
port | 9000 | ${Ports[callBack]} | CallBackObject:54 |
publicAddress | Inherits [SocketConfig] publicAddress | ${Login[internalAddress]} | Template:85 |
serverFactory | null (no reader fallback) | ecmwf.common.rmi.RMIServerSocketFactory | CallBackObject:116 |
[Command]¶
External helper commands. ecauth overrides the token-generation executable; sh selects the ECios shell command.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
sh | null (no reader fallback) | - | ForkECios:169 |
[DataPortal]¶
Public endpoint hints and protocol visibility in portal pages. Empty public URLs/hosts let the portal derive values from the request/listener. These switches do not enable or disable the actual FTP, SFTP or S3 listeners. Per-user portal settings can override global hints.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
ftpEnabled | true | - | RESTServer:2615 |
ftpPublicHost | Empty string | - | RESTServer:2610 |
ftpPublicPort | Empty string | - | RESTServer:2611 |
httpsPublicBaseUrl | Empty string | - | RESTServer:2608 |
registrationAdminEmail | Empty string | - | RESTServer:1923; RESTServer:2118 |
s3Enabled | true | - | RESTServer:2614 |
s3PublicEndpointUrl | Empty string | - | RESTServer:2609 |
sftpEnabled | true | - | RESTServer:2616 |
sftpPublicHost | Empty string | - | RESTServer:2612 |
sftpPublicPort | Empty string | - | RESTServer:2613 |
[ECauthModule]¶
ECauth connection and host-list cache. Durations control connection timeout, refresh polling, refresh frequency and cached-entry lifetime. Credentials here identify the ECauth service account.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
connectionTimeout | 10000 ms (duration fallback) | 30s | Tools:163; Tools:253; Tools:359 |
hostListManagerDelay | 10000 ms (duration fallback) | 10s | ECauthModule:1258 |
hostListManagerFrequency | params.length > 2 ? Format.getDuration(params[2]) : 5 * Timer.ONE_MINUTE ms (duration fallback) | 5m | ECauthModule:431 |
hostListManagerLifeTime | 3600000 ms (duration fallback) | 1h | ECauthModule:430 |
listenAddress | Inherits [SocketConfig] listenAddress | ${Login[internalAddress]} | Template:181 |
pass | ecauth | Protected value/reference | ECauthModule:300 |
protocol | ssh | ssh | ECauthModule:253; ECauthModule:301 |
user | ecauth | ecauth | ECauthModule:299 |
[ECios]¶
ECios helper start/kill socket timeouts, in milliseconds. Also accepts named socket overrides.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
killSoTimeout | 15000 | - | ForkECios:258 |
startSoTimeout | 15000 | - | ForkECios:179 |
[ECpdsClient]¶
ECpds socket-client read timeout in milliseconds. This is distinct from the server-side plugin timeout.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
soTimeOut | 60000 | - | ECpdsClient:95 |
[ECpdsPlugin]¶
Master ECpds listener and request-processing behaviour. checkPort requires a privileged client source port when enabled. SocketSoTimeout applies to accepted request sockets in milliseconds. resetDataTransferSchedulesByGroup resets schedules on group completion. The section also accepts named socket options.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
host | Cnf.at("Login", "hostName", "localhost") | - | ECpdsClient:83 |
port | Cnf.at("Ports", "ecpds", 6640) | - | ECpdsClient:86 |
[ECproxyPlugin]¶
Mover ECproxy data listener and repository. Explicit TCP options override the accepted socket's existing values. Buffer sizes are bytes; socket timeouts are milliseconds. Also accepts named socket settings.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
SocketSoTimeout | 60000 | - | ECproxyPlugin:423 |
keepAlive | socket.getKeepAlive() | - | ECproxyPlugin:175 |
listenAddress | Inherits [SocketConfig] listenAddress | ${Login[externalAddress]} | Template:155 |
port | null (no reader fallback) | ${Ports[ecproxy]} | ECproxyPlugin:147 |
publicAddress | Inherits [SocketConfig] publicAddress | ${Login[externalAddress]} | Template:156 |
receiveBufferSize | -1 | - | ECproxyPlugin:171 |
repository | /tmp | ${mover.data} | RegularFile:102 |
repository | null (no reader fallback) | ${mover.data} | MoverServer:1476 |
sendBufferSize | -1 | - | ECproxyPlugin:167 |
soTimeOut | Inherits [SocketConfig] soTimeOut | 600000 | Template:158 |
tcpNoDelay | socket.getTcpNoDelay() | - | ECproxyPlugin:176 |
[ExecModule]¶
Defaults for the executable transfer module. script runs after file reception; dir falls back to the transfer directory. synchronous waits for command completion, returnCode is its accepted exit status, and usePipe supplies arguments on standard input. mkdirs creates parent directories and usetmp stages reception in a temporary file. Empty prefix and suffix select an effective .tmp suffix.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
args | Empty string | - | ExecModule:121 |
dir | dir | - | ExecModule:117 |
mkdirs | true | - | ExecModule:122 |
prefix | Empty string | - | ExecModule:124 |
returnCode | 0 | - | ExecModule:120 |
script | System.getProperty("ecmwf.dir", "../..") + "/gateway/bin/ectrans" | - | ExecModule:112 |
suffix | Empty string | - | ExecModule:125 |
synchronous | true | - | ExecModule:118 |
usePipe | false | - | ExecModule:119 |
usetmp | true | - | ExecModule:123 |
[ExecutorManager]¶
Opt-in virtual-thread execution for the shared executor. This is not a general scheduler concurrency limit.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
allowVirtualThread | false | - | ExecutorManager:79 |
[FTPActiveSocket]¶
FTP server active-data sockets. Accepts every named socket option below, in addition to these direct readers.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
reuseAddress | true | yes | DataSocket:165 |
soTimeOut | Inherits [SocketConfig] soTimeOut | 300000 | Template:244 |
[FTPPassiveSocket]¶
FTP server passive-data sockets. boundAddress controls the address used for passive binding. Also accepts named socket settings, including local-port ranges.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
backLog | 1 | - | DataSocket:80 |
boundAddress | boundAddress | - | DataSocket:99 |
soTimeOut | Inherits [SocketConfig] soTimeOut | 300000 | Template:240 |
[Filter]¶
Streaming compression/decompression command definitions. The four fly.* keys are read by the stream manager. The template also retains pre.out.* definitions, but the current source has no direct reader for those entries.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
fly.in.lbzip2 | Empty command list | lbzip2 -d | StreamManagerImp:234 |
fly.in.zstd | Empty command list | zstd -d --no-progress -c | StreamManagerImp:242 |
fly.out.lbzip2 | Empty command list | lbzip2 -c | StreamManagerImp:136 |
fly.out.zstd | Empty command list | zstd -6 -T0 --no-progress -c | StreamManagerImp:144 |
pre.out.bzip2a | No direct literal reader; template entry | ${mover.sh}/bzip2 $1 $2 | Template:194 |
pre.out.gzip | No direct literal reader; template entry | ${mover.sh}/gzip $1 $2 | Template:193 |
pre.out.lbzip2 | No direct literal reader; template entry | ${mover.sh}/lbzip2 $1 $2 | Template:195 |
[FtpDomainList]¶
Virtual FTP/SFTP domain mappings; arbitrary domain names are supported. * is the fallback. Domain mappings select backing filesystem/domain implementations, not network listener addresses.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
* | null (no reader fallback) | * | DOMAIN:47; MinaFileSystemAccessor:781 |
data | No mapping; uses * fallback | data: | Template:235 |
[FtpModuleList]¶
FTP extension-module lists. Keys select extensions; * supplies the default list. Values are comma-separated module definitions consumed by the FTP utility.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
* | Empty list | - | Util:217 |
[FtpPlugin]¶
FTP control listener and behaviour. welcome, browser and help are file paths; tail is response text. passive, rest and extended affect FTP features. hidden is a list of hidden virtual domains. alwaysCheckOnRETR requests retrieval-time checks. The section also accepts named socket options.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
alwaysCheckOnRETR | false | yes | RETR:165 |
browser | browser.ftp | ${mover.conf}/ftp/browser.txt | PASS:165 |
dataTimeOut | No direct literal reader; template entry | 600000 | Template:221 |
ext | Empty list | Empty string | Util:317 |
extended | false | yes | FEAT:49 |
extended | true | yes | FtpPlugin:284 |
help | help.ftp | ${mover.conf}/ftp/help.txt | HELP:57 |
hidden | Empty list | Empty string | DOMAIN:53 |
listenAddress | Inherits [SocketConfig] listenAddress | ${Login[externalAddress]} | Template:218 |
passive | true | yes | CurrentContext:150 |
port | 21 | ${Ports[ftp]} | DataSocket:129 |
port | null (no reader fallback) | ${Ports[ftp]} | FtpPlugin:129 |
port | Empty string | ${Ports[ftp]} | RESTServer:2604 |
rest | true | - | FEAT:50; FtpPlugin:288 |
soTimeOut | Inherits [SocketConfig] soTimeOut | 600000 | Template:220 |
tail | Direct comments to ecaccess@ecmwf.int | ${mover.title} | ALIAS:86; CHMOD:90; DOMAIN:89; UMASK:69 |
welcome | welcome.ftp | ${mover.conf}/ftp/welcome.txt | PASS:166 |
[HttpPlugin]¶
Jetty listener, pool, protocol and portal settings. Thread limits are counts; idleThreadsTimeout and idleTimeout are milliseconds; buffer/header limits are bytes. http/https=-1 leaves that connector disabled. On Movers, S3 skew is seconds and S3 request limits are bytes; CORS and DNS mappings apply to portal paths. On the Monitor, only the shared Jetty/HTTP2 readers listed here apply; its HTTPS listener is in [MonitorPlugin].
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
checkControlChannelIsSecure | false | - | RESTServer:3456 |
compression | true | - | HttpPlugin:393 |
corsAllowOrigin | Empty string | - | HttpPlugin:274 |
dnsPathList | Empty list | - | HttpPlugin:287 |
enabledProtocols | TLSv1.3,TLSv1.2 | TLSv1.3,TLSv1.2 | HttpPlugin:446 |
excludeCipherSuites | "SSL_RSA_WITH_DES_CBC_SHA", "SSL_DHE_RSA_WITH_DES_CBC_SHA", "SSL_DHE_DSS_WITH_DES_CBC_SHA", "SSL_RSA_EXPORT_WITH_RC4_40_MD5", "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA" | - | HttpPlugin:459 |
homeFile | null (no reader fallback) | ${mover.conf}/http/home.html | RESTServer:123 |
htdocs | null (no reader fallback) | ${mover.htdocs} | HttpPlugin:188 |
http | -1 | ${Ports[http]} | HttpPlugin:181 |
http2Enabled | true | - | HttpPlugin:474 |
https | -1 | ${Ports[https]} | HttpPlugin:182 |
idleThreadsTimeout | 60000 | - | HttpPlugin:193 |
idleTimeout | 120000 | - | HttpPlugin:488; HttpPlugin:497 |
listenAddress | 0.0.0.0 | ${Login[externalAddress]} | HttpPlugin:186 |
logHeadersAndUri | false | - | RESTServer:3093; RESTServer:3461 |
loginFile | null (no reader fallback) | ${mover.conf}/http/login.html | RESTServer:132 |
maxThreads | 400 | - | HttpPlugin:192 |
minThreads | 40 | - | HttpPlugin:193 |
outputBufferSize | 32768 | - | HttpPlugin:202 |
portalFile | null (no reader fallback) | ${mover.conf}/http/portal.html | RESTServer:126 |
registerFile | null (no reader fallback) | ${mover.conf}/http/register.html | RESTServer:129 |
requestHeaderSize | 8192 | - | HttpPlugin:203 |
responseHeaderSize | 8192 | - | HttpPlugin:204 |
s3AuthenticationType | AWS_V2_OR_V4 | - | HttpPlugin:258 |
s3Enabled | true | - | HttpPlugin:251 |
s3IgnoreUnknownHeaders | true | - | HttpPlugin:260 |
s3MaximumTimeSkew | 900 | - | HttpPlugin:261 |
s3ServicePath | /s3 | - | HttpPlugin:253; HttpPlugin:394; RESTServer:2605 |
s3V4MaxNonChunkedRequestSize | 33554432 | - | HttpPlugin:259 |
wantClientAuth | false | - | HttpPlugin:443 |
webdavEnabled | true | - | HttpPlugin:350; RESTServer:2617 |
webdavPath | /webdav | - | HttpPlugin:352; HttpPlugin:395; RESTServer:2606 |
[HttpPluginSSL]¶
Optional explicit HTTPS store configuration. If this section exists, keyStorePath and keyStorePassword must be supplied: the normal [Security] fallback branch is not used. Trust-store values default to the selected key store; store type defaults to PKCS12.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
keyStorePassword | null (no reader fallback) | - | HttpPlugin:421 |
keyStorePath | null (no reader fallback) | - | HttpPlugin:420 |
keyStoreType | PKCS12 | - | HttpPlugin:422 |
trustStorePassword | storePassword | - | HttpPlugin:452 |
trustStorePath | storePath | - | HttpPlugin:451 |
trustStoreType | storeType | - | HttpPlugin:453 |
[IO]¶
Local repository I/O implementation. byteBufferSizeInMb sets the buffer size in MiB; pool idle age is seconds. Direct buffers and pooling only apply when the byte-buffer path is used. channelForce, channelForceMetadata and fdSync govern persistence/sync behaviour; changing them trades durability and performance.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
byteBufferDirect | true | - | RegularFile:76 |
byteBufferPool | true | - | RegularFile:70 |
byteBufferPoolMaxIdleSec | 60 | - | RegularFile:86 |
byteBufferSizeInMb | 1 | - | RegularFile:79 |
byteBufferUse | true | - | RegularFile:73 |
channelForce | true | - | RegularFile:67 |
channelForceMetadata | true | - | RegularFile:82 |
fdSync | true | - | RegularFile:64 |
[IncomingUsersManagementThread]¶
Incoming-user synchronization polling (delay, milliseconds) and maximum wait duration.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
delay | 2000 | - | MoverServer:325 |
maxWaitTime | 120000 ms (duration fallback) | - | MoverServer:306 |
[InterruptibleRMIServerSideSocket]¶
Cleanup interval for server-side interruptible RMI socket state, in minutes.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
cleanupIntervalInMinutes | 5 | - | InterruptibleRMIServerSocket:355 |
[InterruptibleRMISocket]¶
Interruptible RMI stream-buffer pooling. Buffer size is bytes and buffer TTL is minutes.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
bufferSize | 65536 | - | InterruptibleRMISocket:160 |
bufferTTLInMinutes | 5 | - | InterruptibleRMISocket:164 |
usePooledBufferedStreams | true | - | InterruptibleRMISocket:65 |
[Login]¶
Component identity, registration credential and addresses. root defaults to the hostname in normal service readers. Several utility readers use their own hostname/service fallback, so removing identity settings is not recommended. External/internal addresses are primarily consumed through template references and named socket sections.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
externalAddress | No direct literal reader; template entry | ${Login[hostName]} | Template:21 |
hostName | InetAddress.getLocalHost().getHostName() | ${ecmwf.common.ecaccess.ECaccessInit.getHostName()} | PluginContainer:149; MoverServer:592 |
hostName | localhost | ${ecmwf.common.ecaccess.ECaccessInit.getHostName()} | ECpdsClient:83 |
hostName | null (no reader fallback) | ${ecmwf.common.ecaccess.ECaccessInit.getHostName()} | MoverServer:1501 |
internalAddress | No direct literal reader; template entry | ${mover.internalAddress} | Template:23 |
masterServer | No direct literal reader; template entry | ${master.address} | Template:19 |
password | null (no reader fallback) | Protected value/reference | MoverServer:1526 |
root | Cnf.at("Login", "hostName") | - | MoverServer:1501 |
service | Cnf.at("Login", "hostName", InetAddress.getLocalHost().getHostName()) | - | PluginContainer:149; MoverServer:591 |
[LoginManagement]¶
Failed-login throttling and ban tracking. active enables enforcement; max is consecutive failures. timer, wait and the login-path delay are seconds. The cleanup thread also reads delay as a raw millisecond polling interval with a different fallback; both readers are shown. whitelist bypasses these checks for matching entries.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
active | false | - | LoginManagement:52 |
delay | 4 | - | LoginManagement:75 |
delay | 600000 | - | LoginManagement:288 |
max | 20 | - | LoginManagement:70 |
timer | 3600 | - | LoginManagement:58 |
wait | 300 | - | LoginManagement:78 |
whitelist | Empty list | - | LoginManagement:64 |
[MasterREST]¶
Continental/relay Master REST update interval, in milliseconds.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
delay | 15000 | - | MasterREST:319 |
[MasterServer]¶
Master host and RMI registry port used by a regular Mover.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
host | null (no reader fallback) | ${Login[masterServer]} | MoverServer:1116 |
port | 6601 | ${Ports[master]} | MoverServer:1117 |
[Monitor]¶
External service-status integration, independent of the web monitoring UI. activated enables it, debug logs submissions and dontSend suppresses delivery. delay is a duration: the template's bare 120 means 120 hours, whereas the code fallback is five minutes.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
activated | false | no | MonitorManager:72 |
debug | false | no | MonitorManager:78 |
delay | 300000 ms (duration fallback) | 120 | MonitorManager:75 |
dontSend | false | no | MonitorManager:81 |
[Mover]¶
Operational availability and whether successful processing removes the uncompressed working file.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
operational | true | ${mover.operation} | MoverServer:196 |
unlinkUncompressedFileOnSuccess | false | - | MoverServer:4954 |
[MoverProvider]¶
Mover-side provider cache and portal-session caching. Timeout/TTL values are milliseconds.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
cacheTimeout | 900000 | - | MoverProvider:89 |
debug | false | - | MoverProvider:395; MoverProvider:430 |
portalSessionTtlMs | 3600000 | - | MoverProvider:94 |
[MoverProxy]¶
HTTP control-plane tunnel endpoints and connection timeout in milliseconds. trustAllCerts=true disables certificate verification for this REST client; do not treat that default as a production recommendation.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
connectTimeout | -1 | - | MoverServer:3635 |
httpMover | Empty string | - | MoverServer:3635 |
httpProxy | Empty string | - | MoverServer:3634 |
trustAllCerts | true | - | RESTClient:102 |
[MqttPlugin]¶
Embedded MQTT/MQTTS broker listener ports, configuration and persistent data paths. -1 leaves a connector unconfigured. Expiry settings are durations. priority and startPriority order the embedded broker extension and its startup; they are not Java thread priorities.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
configurationFolder | null (no reader fallback) | ${mover.conf}/mqtt | MqttPlugin:168 |
dataFolder | null (no reader fallback) | ${mover.mqtt} | MqttPlugin:169 |
listenAddress | 0.0.0.0 | ${Login[externalAddress]} | MqttPlugin:141 |
messageExpiryMaxInterval | 604800000 ms (duration fallback) | - | MqttPlugin:145 |
mqtt | -1 | ${Ports[mqtt]} | MqttPlugin:136 |
mqtts | -1 | ${Ports[mqtts]} | MqttPlugin:137 |
priority | 0 | - | MqttPlugin:164 |
sessionExpiryMaxInterval | 3600000 ms (duration fallback) | - | MqttPlugin:143 |
startPriority | 1000 | - | MqttPlugin:165 |
[NetworkWeather]¶
Network Weather admission/control limits. Values are counts except maxConfigurationBytes and maxControlResponseBytes, which are bytes. The Monitor controls activation; these settings bound accepted work rather than enabling probes.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
maxControlResponseBytes | 65536 | - | WeatherLimits:35 |
[Other]¶
Shared utilities. buffer is an I/O buffer size in bytes; ticketWaitDuration is a raw millisecond timeout. ecauthTokenCache enables token caching. dontCheckIp bypasses the provider's client-address check during subscription. tmp is retained in templates; the launcher separately sets the JVM temporary directory.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
buffer | 65536 | 131072 | CurrentContext:132 |
ticketWaitDuration | 120000 | - | MoverServer:1713 |
tmp | No direct literal reader; template entry | ${mover.tmp} | Template:273 |
[PluginList]¶
Template-defined configuration; see the reader links for its consuming component.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
ecproxy | No plugin definition | ecmwf.ecpds.mover.plugin.ecproxy.ECproxyPlugin,maxConnections=2000,inverseResolution=no | Template:47 |
ftp | No plugin definition | ecmwf.common.ftpd.FtpPlugin,maxConnections=2000,inverseResolution=no | Template:45 |
http | No plugin definition | ecmwf.ecpds.mover.plugin.http.HttpPlugin | Template:43 |
mqtt | No plugin definition | ecmwf.ecpds.mover.plugin.mqtt.MqttPlugin | Template:44 |
ssh | No plugin definition | ecmwf.ecpds.mover.plugin.ssh.SshPlugin | Template:46 |
[Ports]¶
Template port substitutions. Most keys are only referenced by listener sections and therefore have no independent code default. ecpds also has a direct client-reader fallback.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
callBack | No direct literal reader; template entry | ${port.callback} | Template:37 |
ecpds | 6640 | - | ECpdsClient:86 |
ecproxy | No direct literal reader; template entry | ${port.ecproxy} | Template:33 |
ftp | No direct literal reader; template entry | ${port.ftp} | Template:34 |
http | No direct literal reader; template entry | ${port.http} | Template:29 |
https | No direct literal reader; template entry | ${port.https} | Template:30 |
master | No direct literal reader; template entry | ${port.master} | Template:36 |
mqtt | No direct literal reader; template entry | ${port.mqtt} | Template:31 |
mqtts | No direct literal reader; template entry | ${port.mqtts} | Template:32 |
ssh | No direct literal reader; template entry | ${port.ssh} | Template:35 |
[ProxySocket]¶
Proxy data/control socket settings. plainText chooses non-TLS transport and otherwise depends on the connection's addresses. host/port select the control endpoint; dataHost/dataPort can select the data endpoint separately. cipherSuites is the TLS suite list. Also accepts named socket options.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
cipherSuites | Empty list | - | ProxySocket:396 |
cipherSuites | null (no reader fallback) | - | ProxySocket:400 |
dataHost | Cnf.at("ProxySocket", "host", socketConfig.getPublicAddress()) | - | ProxySocket:485; ProxySocket:567 |
dataHost | null (no reader fallback) | - | ProxySocket:487; ProxySocket:569 |
dataPort | Cnf.at("ProxySocket", "port", 646) | - | ProxySocket:486; ProxySocket:568 |
host | localName | - | ProxySocket:156 |
host | socketConfig.getPublicAddress() | - | ProxySocket:206; ProxySocket:485; ProxySocket:518; ProxySocket:567; ProxySocket:602; ProxySocket:679; ProxySocket:729 |
plainText | localAddress.equals(definedAddress) | yes | ProxySocket:163 |
port | 646 | - | ProxySocket:207; ProxySocket:486; ProxySocket:519; ProxySocket:568; ProxySocket:603; ProxySocket:680; ProxySocket:730 |
[RESTClient]¶
REST client diagnostics. Debug logging can expose request metadata; enable only for troubleshooting.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
debug | false | - | RESTClient:90 |
[RMIClientSocketFactory]¶
Template-defined configuration; see the reader links for its consuming component.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
interruptible | Inherits [SocketConfig] interruptible | yes | Template:102 |
keepAlive | Inherits [SocketConfig] keepAlive | yes | Template:103 |
listenAddress | Inherits [SocketConfig] listenAddress | ${Login[internalAddress]} | Template:100 |
publicAddress | Inherits [SocketConfig] publicAddress | ${Login[internalAddress]} | Template:101 |
[RMIServerSocketFactory]¶
Template-defined configuration; see the reader links for its consuming component.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
interruptible | Inherits [SocketConfig] interruptible | yes | Template:95 |
keepAlive | Inherits [SocketConfig] keepAlive | yes | Template:96 |
listenAddress | Inherits [SocketConfig] listenAddress | ${Login[internalAddress]} | Template:93 |
publicAddress | Inherits [SocketConfig] publicAddress | ${Login[internalAddress]} | Template:94 |
[ReplicationHost]¶
Template-defined configuration; see the reader links for its consuming component.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
listenAddress | No direct literal reader; template entry | ${Login[internalAddress]} | Template:176 |
[ReportCommand]¶
Executable commands for Mover and remote-Host reports. Host commands expand $host, $port and $listenAddress.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
host | host-report | ${mover.sh}/report $host $port $listenAddress | MoverServer:2166 |
mover | mover-report | ${mover.sh}/report | MoverServer:2131 |
[ResourceTracker]¶
Shared runtime-resource diagnostics. defaultDebugFrequency counts resource-close events between debug reports; it is not a time interval.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
defaultDebugFrequency | 10000 | - | ResourceTracker:45 |
enabled | true | - | ResourceTracker:42 |
[RetrievalInputStream]¶
Retrieval stream buffering and cancellation, plus progress-monitor update duration. A negative monitored fallback leaves periodic monitoring unconfigured.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
buffered | false | yes | MoverServer:1992; MoverServer:2428 |
interruptible | false | yes | MoverServer:1996; MoverServer:2432 |
monitored | -1 ms (duration fallback) | 1m | MoverServer:2448; ECproxyPlugin:332 |
[Scheduler]¶
Worker cadence, concurrency and watchdogs. *JammedTimeout, maximumDuration* and timeOut* read durations; a negative timeout leaves that execution limit unset. *TimeRanges accepts configured execution windows. max*Threads values are concurrency counts; cacheRatio scales prefetch. The legacy purgeDataBase/updateECUsers intervals are hours, with optional clock-time lists.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
downloadRepository | 5000 ms (duration fallback) | 1s | MoverServer:6113 |
downloadRepositoryJammedTimeout | 300000 ms (duration fallback) | 5m | MoverServer:6114 |
liveStatsRepository | 2000 ms (duration fallback) | - | MoverServer:6429 |
liveStatsRepositoryJammedTimeout | 300000 ms (duration fallback) | - | MoverServer:6430 |
trafficAccounting | 10000 ms (duration fallback) | - | MoverServer:6365 |
trafficAccountingJammedTimeout | 300000 ms (duration fallback) | - | MoverServer:6369 |
transferRepository | 5000 ms (duration fallback) | 1s | MoverServer:5895 |
transferRepositoryJammedTimeout | 300000 ms (duration fallback) | 5m | MoverServer:5896 |
[ScriptManager]¶
JavaScript/Graal engine settings. runningTimeout and longRunningTime are milliseconds. resourceLimits=0 leaves the statement limit disabled. Shared engines, compilation and virtual-thread execution are independent switches.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
allowExperimentalOptions | false | - | ScriptManager:96 |
allowVirtualThread | false | - | ScriptManager:101 |
engineCompilation | true | - | ScriptManager:98 |
longRunningTime | 1000 | - | ScriptManager:79 |
resourceLimits | 0 | - | ScriptManager:95 |
runningTimeout | 10000 | - | ScriptManager:76 |
useSharedEngine | true | - | ScriptManager:95 |
warnVirtualThreadSupport | false | - | ScriptManager:97 |
[Security]¶
Authentication, secret protection, socket TLS and optional HTTPS store defaults. SSL store readers can fall back to JVM javax.net.ssl.* properties; HTTPS has its own fallback path. JCE settings protect stored secrets and are not HTTPS cipher settings. checkCertificates=no disables certificate checks. See the TLS and control-channel guides before changing these values.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
SSLKeyStore | System.getProperty("javax.net.ssl.keyStore") | ${mover.etc}/ecpds-mover.pfx | SSLSocketFactory:64 |
SSLKeyStore | null (no reader fallback) | ${mover.etc}/ecpds-mover.pfx | HttpPlugin:427; HttpPlugin:433 |
SSLKeyStore | System.getProperty("javax.net.ssl.keyStore", null) | ${mover.etc}/ecpds-mover.pfx | HttpPlugin:426 |
SSLKeyStoreAlgorithm | System.getProperty("sun.SSL.keymanager.type", "SunX509") | - | SSLSocketFactory:76 |
SSLKeyStorePassword | System.getProperty("javax.net.ssl.keyStorePassword") | Protected value/reference | SSLSocketFactory:68 |
SSLKeyStorePassword | null (no reader fallback) | Protected value/reference | HttpPlugin:429 |
SSLKeyStorePassword | System.getProperty("javax.net.ssl.keyStorePassword", null) | Protected value/reference | HttpPlugin:428 |
SSLKeyStoreType | System.getProperty("javax.net.ssl.keyStoreType", "PKCS12") | - | SSLSocketFactory:72; HttpPlugin:430 |
SSLTrustStore | System.getProperty("javax.net.ssl.trustStore", KEY_STORE_PATH) | - | SSLSocketFactory:80 |
SSLTrustStoreAlgorithm | System.getProperty("sun.SSL.trustmanager.type", KEY_STORE_ALGORITHM) | - | SSLSocketFactory:92 |
SSLTrustStorePassword | System.getProperty("javax.net.ssl.trustStorePassword", KEY_STORE_PASSWORD) | - | SSLSocketFactory:84 |
SSLTrustStorePassword | System.getProperty("javax.net.ssl.trustStorePassword", storePassword) | - | HttpPlugin:456 |
SSLTrustStorePath | System.getProperty("javax.net.ssl.trustStorePath", storePath) | - | HttpPlugin:455 |
SSLTrustStoreType | System.getProperty("javax.net.ssl.trustStoreType", KEY_STORE_TYPE) | - | SSLSocketFactory:88 |
SSLTrustStoreType | System.getProperty("javax.net.ssl.trustStoreType", storeType) | - | HttpPlugin:457 |
SSLVersion | TLSv1.3 | - | SSLSocketFactory:61 |
checkCertificates | true | - | SSLSocketFactory:373 |
cliSharedSecret | Empty string | Protected value/reference | SimplePlugin:62; ProxySocket:82; ECpdsClient:98 |
controlChannelMaxSkew | 300000 ms (duration fallback) | - | RESTSignature:73 |
rccSharedSecret | Empty string | Protected value/reference | RESTSignature:61 |
[Server]¶
Per-process service switches and local paths. Master readers enable schedulers/repositories; Mover readers enable its own repositories/accounting. dontRecord* suppresses management-action history, not native telemetry globally. Globe cache settings belong to the Monitor. providerMBeanTimeout is milliseconds; topology probe timeout is a duration.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
downloadRepository | true | - | MoverServer:1141 |
liveStatsRepository | true | - | MoverServer:1156 |
maxIncomingConnections | 10 | - | ECtransOptions:1750 |
networkWeatherNegotiation | true | - | MoverServer:1150 |
ticketRepository | true | - | MoverServer:1126 |
trafficAccountingFile | java.nio.file.Path.of(System.getProperty("mover.tmp", System.getProperty("java.io.tmpdir")), "traffic-accounting.json").toString() | - | MoverServer:218 |
transferRepository | true | - | MoverServer:1134 |
[SessionCache]¶
Shared session cache logging and minimum pause (milliseconds). Debug frequency is a diagnostic event-count interval.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
activityLogger | true | - | SessionCache:84 |
debug | false | - | SessionCache:90 |
debugFrequency | 1000000 | - | SessionCache:81 |
minimumPause | 15000 | - | SessionCache:87 |
[SocketConfig]¶
Defaults for sockets. Buffers are bytes (-1 leaves OS defaults), timeouts are milliseconds, backlog is pending connections, and keepAlive is TCP keepalive rather than application connection pooling. Named socket sections override these values; see the complete named-option list below.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
backLog | 100 | 10000 | SocketConfig:158 |
connectTimeOut | 15000 | 30000 | SocketConfig:155 |
host | null (no reader fallback) | - | SocketConfig:173 |
interruptible | false | - | SocketConfig:170 |
keepAlive | null (no reader fallback) | yes | SocketConfig:161 |
listenAddress | null (no reader fallback) | ${Login[externalAddress]} | SocketConfig:140 |
maxPrivilegedPort | 1023 | - | SocketConfig:89 |
minPrivilegedPort | 500 | - | SocketConfig:86 |
port | -1 | - | SocketConfig:176 |
privilegedLocalPort | false | - | SocketConfig:137 |
publicAddress | null (no reader fallback) | ${Login[externalAddress]} | SocketConfig:143 |
receiveBufferSize | -1 | -1 | SocketConfig:146 |
reuseAddress | null (no reader fallback) | - | SocketConfig:167 |
sendBufferSize | -1 | -1 | SocketConfig:149 |
serverPort | 0 | - | SocketConfig:179 |
soTimeOut | 86400000 | 86400000 | SocketConfig:152 |
tcpNoDelay | null (no reader fallback) | - | SocketConfig:164 |
trace | true | yes | SocketConfig:131 |
[SshPlugin]¶
SSH/SFTP listener and server identity. keyPairsDir stores host keys, banner is a file path and softwareVersion is the advertised server string. maxConcurrentSessions=0 means unlimited. hidden controls virtual-domain visibility.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
banner | Empty string | ${mover.conf}/ssh/welcome.txt | SshPlugin:179 |
hidden | Empty list | - | MinaFileSystemAccessor:783; MinaFileSystemAccessor:1069 |
keyPairsDir | ssh/keys | ${mover.conf}/ssh/keys | SshPlugin:105 |
listenAddress | 0.0.0.0 | ${Login[externalAddress]} | SshPlugin:102 |
maxConcurrentSessions | 0 | 0 | SshPlugin:173 |
port | 22 | ${Ports[ssh]} | SshPlugin:108 |
port | Empty string | ${Ports[ssh]} | RESTServer:2607 |
softwareVersion | ECPDS_SSHD | ECPDS_SSHD | SshPlugin:178 |
[StorageRepository]¶
Asynchronous persistence. *Size means storage-worker thread count, not queue capacity or batch size. *Delay, idle waits and ticket timeouts are milliseconds. *MaxAuthorisedSize caps repository entries (0 leaves the cap unset). Options only apply to repository types instantiated by this process.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
storageRepositoryDelay | 3600000 | - | StorageRepository:159 |
storageThreadDelay | 15000 | - | StorageThread:126 |
ticketDelay | 60000 | - | TicketRepository:61 |
ticketSize | 0 | - | TicketRepository:60 |
ticketTimeOut | 18000000 | - | TicketRepository:62 |
ticketTimeOutAfterCompletion | 180000 | - | TicketRepository:63 |
[StreamPlug]¶
Shared stream-copy buffer size in bytes.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
buffSize | 65536 | - | StreamPlugThread:60 |
[TOTP]¶
OTP authentication provider configuration, including token endpoint, separate password/passcode client credentials, grant type and expected HTTP status. active=false disables this provider path; the login-form selector does not enable it.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
active | false | - | TOTP:51 |
clientIdForPasscode | null (no reader fallback) | - | TOTP:63 |
clientIdForPassword | null (no reader fallback) | - | TOTP:57 |
clientSecretForPasscode | null (no reader fallback) | - | TOTP:66 |
clientSecretForPassword | null (no reader fallback) | - | TOTP:60 |
expectedStatus | 200 | - | TOTP:72 |
grantType | password | - | TOTP:69 |
url | null (no reader fallback) | - | TOTP:54 |
[TestModule]¶
Synthetic transfer behaviour for non-operational Mover tests. Error frequency is a count interval, initial delays are milliseconds and rates are bytes/s. Template-only upload settings have no direct readers in the current Mover source.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
downloadedBytesPerSecond | 1048576 | 1048576 | MoverServer:2394 |
errorsFrequency | 1000 | 1000 | MoverServer:281 |
initialDownloadDelay | 15 | 15 | MoverServer:2393 |
initialUploadDelay | No direct literal reader; template entry | 500 | Template:267 |
uploadedBytesPerSecond | No direct literal reader; template entry | 1048576 | Template:268 |
[ThreadService]¶
Shared thread runtime. Virtual threads are opt-in; debugThreadLocal enables thread-local diagnostics.
| Option | Code fallback when absent | Shipped value | Reader |
|---|---|---|---|
allowVirtualThread | false | - | ThreadService:66 |
debugThreadLocal | false | - | ThreadService:69 |
Named socket sections¶
SocketConfig.load reads the following keys from a component's named section. Common section names for this service are CallBack, RMIServerSocketFactory, RMIClientSocketFactory, FtpPlugin, FTPPassiveSocket, FTPActiveSocket, ECproxyPlugin, ProxySocket, ECauthModule, FtpPASV, FtpPORT, FtpOPEN, HTTPSocketConfig, GCSSocketConfig, S3SocketConfig, WebDavModule, JSftp, TelnetWrapper and ECios. A transfer module or plugin must actually use that socket implementation for its settings to apply; Jetty HTTP listeners and third-party transfer clients do not automatically honour every low-level socket option.
Basic options inherit the values in [SocketConfig] shown above; the advanced TCP options from tcpCongestion onward default to unset and are read from the named section, not from the global [SocketConfig] defaults. Advanced options depend on OS/socket support. Caller-supplied addresses, ports and module/Host settings may override socket defaults.
| Option(s) | Meaning |
|---|---|
listenAddress | Local bind/source address. |
publicAddress | Advertised address, distinct from the local bind address. |
receiveBufferSize, sendBufferSize | Bytes; -1 leaves the OS default. |
soTimeOut | Read timeout in milliseconds; aliases soTimeout and timeOut are tried in that order when the preferred spelling is absent. |
connectTimeOut | Connection timeout in milliseconds. |
backLog | Pending incoming-connection queue length. |
keepAlive | TCP keepalive switch. |
tcpNoDelay | TCP_NODELAY switch. |
reuseAddress | SO_REUSEADDR switch. |
interruptible | Use the interruptible socket implementation. |
privilegedLocalPort | Allocate a local source/listening port from the configured local range. |
minPrivilegedPort, maxPrivilegedPort | Inclusive local-port range; inherited base defaults are 500 and 1023. |
trace | Socket diagnostics. |
host, port | Default remote endpoint when the caller does not supply one. |
serverPort | Local listening port; 0 requests an automatically assigned port. |
tcpCongestion | Congestion-control algorithm name. |
soMaxPacingRate | Maximum socket pacing rate, bytes/s. |
tcpMaxSegment | Maximum TCP segment size, bytes. |
tcpTimeStamp | TCP timestamps switch. |
tcpWindowClamp | TCP receive-window clamp, bytes. |
tcpKeepAliveTime | Idle time before keepalive probes, seconds. |
tcpKeepAliveInterval | Time between keepalive probes, seconds. |
tcpKeepAliveProbes | Keepalive probe count. |
tcpLingerEnable | Enable linger-on-close. |
tcpLingerTime | Linger timeout, seconds. |
tcpUserTimeout | Maximum unacknowledged-data time, milliseconds. |
tcpQuickAck | TCP quick-acknowledgement switch. |
Constructed HTTPS/TLS keys¶
The HTTPS helper constructs [Security] SSL<Key> names and otherwise consults the corresponding javax.net.ssl.<key> JVM property. Its actual keys are SSLKeyStore, SSLKeyStorePassword, SSLKeyStoreType, SSLTrustStorePath, SSLTrustStorePassword and SSLTrustStoreType.
SSLTrustStorePath is the HTTPS helper's spelling; the generic socket TLS reader separately uses SSLTrustStore. Do not assume these are aliases. The explicit [HttpPluginSSL] map takes precedence over the HTTPS helper's normal store-selection branch. MQTT uses [Security] SSLKeyStore and SSLKeyStorePassword through its own helper.
FTP mapping and per-user families¶
| Section / key pattern | Default when absent | Meaning |
|---|---|---|
[FtpPlugin] restrict.<user> | No prefix restriction | Require the client's textual IP address to start with the configured prefix. This is not CIDR syntax. |
[FtpAliases] <domain> | Empty list | Alias list for the selected virtual domain. |
[FtpDomainList] <domain> | No mapping; * is the fallback | Virtual domain to backing-domain mapping. |
[FtpModuleList] <extension> | Default * module list | Extension-specific FTP module definitions. |
[Filter] pre.out.<name> | No direct reader in current sources | Retained template definitions for file-to-file filter commands using $1 and $2 paths. |
[Filter] fly.out.lbzip2, fly.in.lbzip2, fly.out.zstd, fly.in.zstd | No configured command | Streaming compression/decompression commands. |
Streaming filter executables must be installed on the machine executing them. Adding a definition does not apply it to every transfer; the current stream manager selects the named lbzip2 or zstd command when using that format.
Plugin and module families¶
[PluginList] is an open map of plugin names to definitions:
The library path and per-plugin options depend on the plugin. Server plugins support maxConnections and inverseResolution; deleting or adding a plugin definition changes which services start. These are options inside the value, not new top-level ecmwf.properties groups. See Plugin Infrastructure.
[ECtrans] is an open family of global transfer-option defaults, with keys module.option (for example, ftp.passive). Its option set is defined by ECtransOptions and the selected module, not a fixed list of literal Cnf keys. Entity/transfer setup values can override these defaults. The complete option/default references are:
- ECtrans common options and the protocol pages under Transfer Modules.
- Host options, Destination options, Web User options and Data User options.
These entity options are not interchangeable with service sections. Some options are only meaningful for a particular module or execution role.
WebDAV initialization parameters¶
The Mover's WebDAV servlet forwards initialization-parameter lookups to [HttpPlugin] by name. This is an extension family rather than a fixed OpenECPDS enum; unset values defer to the bundled Jackrabbit servlet's defaults. For example, Jackrabbit's missing-auth-mapping parameter is distinct from the OpenECPDS webdavPath listener setting. Only parameters actually read by the bundled servlet apply; arbitrary keys do not become new features.