Usenet¶
Configure NNTP providers, connection budgets, cascade vs pooled routing, and queue-side NNTP pipelining.
Headless ENV
Each config key below maps to NZBDAV_CONFIG__... via the
naming algorithm (for example
usenet.providers → NZBDAV_CONFIG__USENET__PROVIDERS).
Providers¶
Add one or more accounts. Each provider supports:
| Control | What it does | Default / notes |
|---|---|---|
| Nickname | Friendly label instead of hostname | optional |
| Storage group | Same label → skip siblings after a clean article miss | optional; only same upstream |
| Host / Port | NNTP endpoint | port often 563 |
| Username / Password | Credentials | prefer SSL |
| Provider Connection Limit | Provider-wide ceiling for all pooled connections, including transfers, metadata, and warm sockets | do not exceed the account allowance |
| Transfer Connections | Hard cap for concurrent BODY / ARTICLE work |
blank = legacy shared pool |
| Metadata Capacity | Read-only base-to-burst range calculated from the two limits | shown when Transfer Connections is set |
| Pipeline depth | Per-provider override when pipelining on | blank = global 8 |
| Type | Disabled / Pool Connections / Backup Only | Pool |
| Use SSL | TLS for NNTP | on |
| Skip TLS certificate verification | Accept an invalid provider certificate | off |
| Data Cap | Block-account limit; auto-pauses near ~95% | uncapped |
| Already Used | Seed usage when migrating mid-block | empty |
| Auto-tune | Speed test → recommend Transfer Connections + pipelining | never changes Provider Connection Limit |
Persisted as usenet.providers JSON.
Data-cap accounting since 1.5.0¶
Data-cap usage counts the raw NNTP BODY payload received from the provider,
including yEnc headers, trailers, and bodies drained after an early close or
cancellation. NNTP command/status traffic and the terminating dot line are
excluded. The counter is independent of Overview statistics and analytics
retention, and a reset takes effect at the configured instant. On the first
startup after upgrading, InfiniDysk preserves the legacy displayed value; all
traffic received after that uses exact accounting.
Back up /config before upgrading; the metrics migration applies automatically
at startup.
Cleartext
Disabling SSL stores/sends credentials in cleartext on the wire — only for trusted networks.
Connection budgets since 1.3.0¶
Provider Connection Limit is the absolute number of connections InfiniDysk may use for the provider account. Set it no higher than the provider allows, or lower when the account is shared with another client.
Transfer Connections limits article-body traffic independently. Once it is set, InfiniDysk
uses the rest of the provider budget for lightweight metadata commands such as STAT, HEAD,
and DATE. The editor previews Metadata Capacity from the configured values; after saving,
provider cards use the current effective provider limit when live runtime data is available. The
runtime range is calculated as follows:
P = effective Provider Connection Limit
T = min(configured Transfer Connections, P)
base metadata = P - T
maximum metadata = min(P, max(1, base metadata + floor(T / 2)))
metadata burst = maximum metadata - base metadata
metadata capacity = base metadata through maximum metadata
For example:
| Provider limit | Transfer connections | Metadata capacity |
|---|---|---|
| 50 | 20 | 30–40 |
| 50 | 50 | 0–25 |
| 40 | 16 | 24–32 |
| 1 | 1 | 0–1 |
Transfers never exceed their hard cap, and all work combined never exceeds the effective provider limit. Metadata may borrow only the displayed burst allowance while transfer capacity is idle. If transfers begin waiting, currently running metadata commands finish normally; their released slots normally return to transfers first. Under a sustained transfer backlog, one metadata waiter is admitted after at most eight consecutive transfer grants so health and control work cannot starve.
Existing providers stay in legacy mode
A blank MaxTransferConnections value preserves the original shared-pool admission scheduling.
Merely opening or saving an existing provider does not enable split budgeting. Enter Transfer
Connections or apply an Auto-tune recommendation to opt in. Auto-tune's provider ceiling and
the busy-pool keep-alive safeguards below apply in both scheduling modes.
Auto-tune finds the transfer-throughput knee and applies its recommendation only to Transfer Connections. It progressively adds connection levels, including above 50 when configured, and stops after throughput reaches a stable knee, the provider refuses more connections, or the data budget is exhausted. It never rewrites or probes above Provider Connection Limit. Releases before 1.3.0 could sweep above the saved connection count; raise Provider Connection Limit first if you want Auto-tune to test a higher count. When the result says speed was still climbing at the ceiling, the provider may benefit from a higher limit if the account permits it. If the provider later refuses its configured ceiling, InfiniDysk lowers the effective runtime limit without changing either saved value; provider cards and metrics then show capacities based on that learned limit.
Invalid provider certificates since 0.9.0¶
Leave Skip TLS certificate verification disabled unless a trusted provider has a certificate it cannot correct. It keeps the NNTP connection encrypted but accepts an untrusted, expired, or hostname-mismatched certificate. This permits a man-in-the-middle attacker to impersonate the provider and read credentials.
Routing and pipelining¶
| Control | Config key | Default | Effect |
|---|---|---|---|
| Enable cascade routing | usenet.cascade.enabled |
off | Prefer providers in drag order; off = shared pool. Thinly-spared primaries (≤25% free) yield to idler peers; a larger Provider Connection Limit alone does not outrank priority. |
| Re-probe primary after miss | usenet.cascade.retry-primary-on-miss |
on | After a clean 430/451 on the first batch attempt, try the primary once more before cascading (multi-node spool). Off = skip straight to backups. |
| Enable queue pipelining | usenet.queue-pipelining.enabled |
off | Batch first-segment BODY during queue imports/benchmarks |
| Queue pipeline depth | usenet.queue-pipelining.depth |
8 |
Requests in flight per connection (1–64) |
Legacy keys usenet.pipelining.enabled / usenet.pipelining.depth remain honored; env vars use NZBDAV_CONFIG__USENET__QUEUE_PIPELINING__* for the new names.
Run Auto-tune before enabling queue pipelining. WebDAV streaming batching is a separate toggle on Streaming.
Global download cap since 1.3.0¶
usenet.bandwidth-limit-mbps (Streaming settings) caps total live Usenet payload
ingress from every provider, in megabits per second. Queue downloads and WebDAV
streaming share the cap. Cache hits, LAN delivery, and the provider speed
benchmark are not limited. Empty or 0 means unlimited; the value reloads
without restart. 1 MB/s = 8 Mbit/s. The cap cannot make a latency-limited
provider faster.
See NNTP pipelining and Multi-provider.
Warm connections since 1.2.0¶
Each pooled provider keeps a small floor of pre-connected, authenticated NNTP sockets ready so playback and queue work skip the connect/TLS/login handshake after idle periods. Warm sockets count against the provider's connection limit but never hold download permits. See Connection warming for the mechanics and the header indicator.
| Control | Config key | Default | Effect |
|---|---|---|---|
| Warm connections | usenet.warm-connections.enabled |
on | Keep pre-connected sockets ready per provider |
| Warm floor | usenet.warm-connections.floor |
auto | Idle sockets kept ready per provider; auto derives one sixth of Max Connections, clamped to 1–8 |
Changes take effect on the next provider save or restart — connection pools are not rebuilt when these keys change alone.
Article-miss negative cache since 0.9.0¶
After a provider (or storage group) reports a definitive article miss (NNTP 430 or provider 451), InfiniDysk remembers that miss so later streaming/batch reads skip re-probing the same provider for the same article until the TTL expires. Transient failures (timeouts, network, corrupt articles) are never cached.
| Control | Config key | Default | Effect |
|---|---|---|---|
| Miss-cache TTL (seconds) | usenet.article-miss-cache-ttl-seconds |
300 |
How long a miss stays cached (clamped 30–86400) |
| Miss-cache max entries | usenet.article-miss-cache-max-entries |
10000 |
Cap before oldest entries are evicted (clamped 100–1000000) |
The cache clears automatically when Usenet providers are reconfigured.
Provider circuit-breaker cooldown since 1.3.0¶
When a provider's circuit trips, that provider is skipped for a cooldown and traffic goes to the remaining providers. Each consecutive trip doubles the cooldown up to a ceiling. A successful article body resets it to the initial value.
| Control | Config key | Default | Effect |
|---|---|---|---|
| Initial cooldown (seconds) | usenet.circuit-breaker.initial-cooldown-seconds |
60 |
Cooldown applied on the first trip (clamped 5 to 300) |
| Maximum cooldown (seconds) | usenet.circuit-breaker.max-cooldown-seconds |
300 |
Ceiling the doubling stops at (clamped 5 to 3600) |
Lower the initial cooldown when a single pool provider carries the traffic and the backups are metered blocks. A brief wobble then spends fewer backup bytes before the primary is re-probed. A maximum below the initial value is raised to it. The connection pools read both values when they are built, so a change applies on the next restart or provider save. Neither has a Settings control. Set them through config or the environment.
Once the cooldown lapses, one request is admitted as a half-open probe. If that request is abandoned before it returns an outcome, the probe slot stays claimed for up to 60 seconds before another request can retake it. A cooldown shorter than that will not always re-probe as quickly as the number suggests.