Skip to content

Commit 1460ea5

Browse files
authored
Implement request-rate-limiting for WebDAV and Frontend
Added request-rate-limiting mechanism for WebDAV and Frontend doors to enhance resilience against abusive clients. Introduced configuration properties for managing request rates, error thresholds, and blocked clients.
1 parent 71e708d commit 1460ea5

1 file changed

Lines changed: 45 additions & 0 deletions

File tree

release-notes-11.2

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ HTML header: <title>dCache 11.2 Release Notes</title>
7171
## Incompatibilities
7272

7373
- Xrootd PrepareRequest will return `Unsupported`.
74+
- Frontend und webdav doors enforce request limiters
7475

7576
## Acknowledgments
7677

@@ -289,6 +290,50 @@ In dCache, this behavior poses a risk when Kafka is unavailable, as transfer eve
289290
To enable kafka for billing service the folowing property in `billing.properties` should be enabled
290291
`(one-of?true|false|${dcache.billing.enable.kafka})billing.enable.kafka`.
291292

293+
### Frontend / Webdav
294+
295+
A request-rate-limiting mechanism has been introduced for the Jetty-based WebDAV and Frontend doors to improve resilience against misbehaving or abusive clients. Previously, the system assumed well-behaved clients, which could allow even a single client to overwhelm the service. The new implementation adds a Jetty handler layer that tracks request outcomes and enforces both global and per-client rate limits using configurable thresholds backed by in-memory caches and rate limiting controls. Clients exceeding these limits receive HTTP 429 responses and may be temporarily blocked. Administrators can reset blocked clients via new admin commands. Several configuration properties have been added to control request rates, error thresholds, blocking windows, and limits on blocked clients, providing flexible protection against denial-of-service scenarios.
296+
297+
The request rate limiter is controlled through a set of configuration properties that define how aggressively clients are throttled or blocked, both globally and individually:
298+
299+
**webdav.limits.max-blocked-clients**
300+
Sets the maximum number of clients that can be tracked as blocked at any given time. This prevents unbounded memory usage if many clients are misbehaving simultaneously.
301+
302+
#### Global rate limiting
303+
304+
**webdav.limits.rate.overall**
305+
306+
Defines the total request rate allowed across all clients combined. This acts as a system-wide throttle to protect the service under heavy load.
307+
308+
#### Per-client rate limiting
309+
310+
**webdav.limits.rate.per-client.fractions**
311+
312+
Specifies how much of the global rate each individual client is allowed to consume (typically as a fraction of the overall rate).
313+
314+
**webdav.limits.rate.per-client.block.window.time**
315+
**webdav.limits.rate.per-client.block.window.time.units**
316+
317+
Define how long a client remains blocked after exceeding its rate limit.
318+
319+
#### Error-based blocking
320+
321+
**webdav.limits.error.max-allowed**
322+
The maximum number of failed or problematic requests a client may generate within a time window before being blocked.
323+
324+
**webdav.limits.error.block.window.time**
325+
**webdav.limits.error.block.window.time.units**
326+
327+
Define the duration of the observation window for counting errors, and how long a client is blocked once the threshold is exceeded.
328+
329+
#### Blocked client management
330+
331+
**webdav.limits.blocked-clients.idle-time**
332+
**webdav.limits.blocked-clients.idle-time.units**
333+
334+
Control how long a blocked client remains in the blocked list without activity before being automatically removed.
335+
336+
The same set of properties exists for frontend door with prefix `forntend`.
292337

293338
### NFS
294339

0 commit comments

Comments
 (0)