Skip to content

Add a true read-only probe mode for CL.THROTTLE #7128

@REASY

Description

@REASY

Motivation

CL.THROTTLE is documented as Dragonfly's native GCRA/leaky-bucket rate-limiting command and returns useful limiter state (limited, limit, remaining, retry-after, reset). In the current implementation, OpThrottle uses mutable access and persists state on the non-limited path, so there does not appear to be a side-effect-free way to ask "would this request be allowed right now?" without updating limiter state or creating state for a missing key. (dragonflydb.io)

Use case

We are building a global rate-limiter service on top of Dragonfly and would like to rely on native CL.THROTTLE for GCRA-style throttling, but we also need probe semantics for:

  • dark launches / observe-only mode
  • candidate selection across multiple keys before consuming quota
  • preflight/debug endpoints that show remaining, retry-after, and reset without mutating state
  • safer migration/canary workflows where "would throttle" must not burn quota

Requested behavior

Please add one of the following:

  • a new CL.PROBE command with the same arguments and response shape as CL.THROTTLE
  • or a READONLY / NOAPPLY mode on CL.THROTTLE

Desired semantics:

  • no TAT update
  • no TTL refresh
  • no key creation for a missing key
  • same response shape as CL.THROTTLE
  • should work for arbitrary quantity, not only via a special-case workaround

Why this would help

This would make Dragonfly's native throttling much easier to use in higher-level control planes and shared rate-limiter services, where "check" and "consume" are separate operations. It would also make CL.THROTTLE easier to use for observability, dry runs, and staged rollouts.

Backward compatibility

This could be a purely additive feature. Existing CL.THROTTLE behavior would stay unchanged.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions