apache/cassandra · info

Request breached global limit of

Error message

Request breached global limit of %d requests/second and triggered backpressure.

What it means

Not an exception: a backpressure notice emitted by the native-transport Dispatcher when a client request pushes throughput past the global native_transport_max_requests_per_second limit. The message is logged at INFO (rate-limited via NoSpamLogger) and also surfaced to the driver as a client warning; the request is throttled rather than rejected.

Solutions

  1. Raise native_transport_max_requests_per_second in cassandra.yaml (or via JMX) to match workload needs.
  2. Reduce client-side concurrency (max requests per connection / in-flight limit in the driver).
  3. Switch or confirm the native_transport_backpressure setting - BYTES_IN_FLIGHT or NONE may fit the workload better.
  4. Check server-side latency (slow requests occupying the window) before simply raising limits.

Example fix

// cassandra.yaml: before native_transport_max_requests_per_second: 100000 // after native_transport_max_requests_per_second: 1000000
Defensive patterns

Strategy: fallback

Validate before calling

// client-side: estimate request rate before sending: if (!limiter.tryAcquire(1, TimeUnit.SECONDS)) backoffBeforeNextRequest();

Try / catch

// driver surfaces the notice as a query warning; check it: if (executionInfo.getWarnings() != null) { executionInfo.getWarnings().stream().filter(w -> w.contains("breached global limit")).forEach(w -> scheduler.backoff()); }

Prevention

When it happens

Trigger: A native-protocol client sending requests faster than ClientResourceLimits.getNativeTransportMaxRequestsPerSecond() while backpressure is enabled (native_transport_backpressure=REQUESTS), so the REQUESTS case of the backpressure report triggers in processRequest.

Common situations: Bulk-loading with a high driver request rate against a small max-requests-per-second setting; client connection pool mis-tuned (too many in-flight requests per host); benchmarking tools saturating native transport.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/d4923baca154dc5d. Report an issue: GitHub.

Appendix: source

Thrown at src/java/org/apache/cassandra/transport/Dispatcher.java:404

        // even if ClientWarn is disabled, still setup CoordinatorTrackWarnings, as this will populate metrics and
        // emit logs on the server; the warnings will just be ignored and not sent to the client
        if (request.isTrackable())
        {
            CoordinatorWarnings.init();
            CoordinatorWriteWarnings.init();
        }

        switch (backpressure)
        {
            case NONE:
                break;
            case REQUESTS:
            {
                String message = String.format("Request breached global limit of %d requests/second and triggered backpressure.",
                                               ClientResourceLimits.getNativeTransportMaxRequestsPerSecond());

                NoSpamLogger.log(logger, NoSpamLogger.Level.INFO, 1, TimeUnit.MINUTES, message);
                ClientWarn.instance.warn(message);
                break;
            }
            case BYTES_IN_FLIGHT:
            {
                String message = String.format("Request breached limit(s) on bytes in flight (Endpoint: %d, Global: %d) and triggered backpressure.",
                                               ClientResourceLimits.getEndpointLimit(), ClientResourceLimits.getGlobalLimit());

                NoSpamLogger.log(logger, NoSpamLogger.Level.INFO, 1, TimeUnit.MINUTES, message);
                ClientWarn.instance.warn(message);
                break;
            }
            case QUEUE_TIME:
            {
                String message = String.format("Request has spent over %s time of the maximum timeout %dms in the queue",
                                               DatabaseDescriptor.getNativeTransportQueueMaxItemAgeThreshold(),
                                               DatabaseDescriptor.getNativeTransportTimeout(TimeUnit.MILLISECONDS));

                NoSpamLogger.log(logger, NoSpamLogger.Level.INFO, 1, TimeUnit.MINUTES, message);

View on GitHub (pinned to 88fd0f6a0e)