Skip to content

M62 · A quota the client is told about rather than discovering #106

Description

@tonytonycoder11

Qdrant 1.19 added a global quota API, and deprecated max_resident_memory_percent in favour of it.
Kdrant models the deprecated field, added in 2.2.0, and not the thing replacing it.

The reason to care is not symmetry with the server's API surface. It is that a quota changes what a
client should do when it is refused. A rate limit that a caller can read before hitting it is a caller
that can slow down; one they can only discover by being refused is a caller that retries into the same
wall, which is what the client's own backoff currently does. 2.2.0 gave every failure a retryable
flag, and RateLimited says true, which is right and is not enough: it says wait, and does not say how
long or how much room is left.

There are two halves and only one of them is obvious. Reading the quota is a new operation on the
transport seam, small and uninteresting. The second half is whether the client uses what it reads: an
ingest with bounded concurrency, which 2.2.0 shipped, is exactly the caller that could size its own
concurrency from a quota instead of from a number somebody guessed. That is the part worth building and
the part that needs a decision, because a client that silently changes its own concurrency is a client
whose throughput becomes hard to explain.

Deprecating the 2.2.0 field is part of this rather than a follow-up. It went in one minor and is
replaced in the next, which is short enough that the changelog has to say why rather than leaving it
looking like churn.

Exit criterion: the quota is readable through the client and asserted against a real Qdrant, the
StrictModeConfig field it replaces is deprecated with the replacement named, and the decision about
whether ingest reads the quota is recorded either as a feature or as a decision note saying why not.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    • Status
      Shipped

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions