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.
Qdrant 1.19 added a global quota API, and deprecated
max_resident_memory_percentin 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.0gave every failure aretryableflag, and
RateLimitedsays true, which is right and is not enough: it says wait, and does not say howlong 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.0shipped, is exactly the caller that could size its ownconcurrency 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.0field is part of this rather than a follow-up. It went in one minor and isreplaced 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
StrictModeConfigfield it replaces is deprecated with the replacement named, and the decision aboutwhether
ingestreads the quota is recorded either as a feature or as a decision note saying why not.