Skip to content

Warn on large upsert requests #216

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: dev
Choose a base branch
from
Open

Conversation

JojiiOfficial
Copy link
Contributor

@JojiiOfficial JojiiOfficial commented Apr 1, 2025

Throw a warning if someone tries to upsert too many points in a single request.
Tonic server doesn't throw a meaningful error if the max message size gets exceeded and a huge upsertion request may result in a timeout without further information.

Copy link
Contributor

@tellet-q tellet-q left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@@ -14,6 +14,9 @@ use crate::qdrant::{
};
use crate::qdrant_client::{Qdrant, QdrantResult};

/// Max amount of points that should be upserted in a single request/chunk.
const TOO_MANY_POINTS: usize = 50_000;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This feels a bit arbitrary.

I mean, the request object can basically be infinitely large no matter the number of points.

Do you know if it's possible to render a proper error message instead on the tonic side of things when we surpass limits?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The limit for gRPC we set in Qdrant is usize::MAX (~2.3 Exabytes) and the error we get on too large requests is not a limit exceeded or similar error.

The one I was facing when uploading 500k points was
gRPC /qdrant.Points/Upsert unexpectedly failed with Internal error "Missing request message."
Which I can't find in tonics documentation.

To not risk throwing wrong errors, I'd prefer not to map this error to some RequestTooLarge error.

In order to get a limit exceeded error (assuming this exists and gets thrown reliably), we'd need to set a lower limit in the gRPC API, which is arguably a breaking change.

I thought getting some warning is always better than a non descriptive tonic error and a timeout in the client.
If you feel 50k points to be too random, feel free to suggest a better limit.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you know if it's possible to render a proper error message instead on the tonic side of things when we surpass limits?
gRPC /qdrant.Points/Upsert unexpectedly failed with Internal error "Missing request message."

Could it be improved with hyperium/tonic#1682?
It's landed in tonic 0.12, but Qdrant still uses 0.11.

@JojiiOfficial JojiiOfficial requested a review from timvisee April 7, 2025 10:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants