Skip to content

Upsert with Cloud Inference hangs indefinitely in Docker (HTTP/2 via undici) #130

Description

@AndreyDAraya

Environment

  • @qdrant/js-client-rest: 1.17.0
  • undici: 6.24.1
  • Node.js: v20.20.2
  • Runtime: Docker container (node:20-alpine)
  • Qdrant Cloud cluster: AWS us-east-1

What happened

When calling client.upsert() with inference vectors (vector: { text, model }),
the request hangs indefinitely inside a Docker container and never resolves or rejects.
No timeout is triggered — the Promise simply never settles.
The same request works correctly when:

  • Made from the host machine via curl (HTTP/1.1) — completes in ~86ms ✅
  • Made from inside the Docker container via Node.js https.request (HTTP/1.1) — completes in ~222ms ✅
  • Made from the host machine via curl --http2 — also hangs ❌
    This points to an HTTP/2 connection issue specific to how undici negotiates
    the connection with Qdrant Cloud's inference endpoint inside Docker networking.

Minimal reproduction

import { QdrantClient } from "@qdrant/js-client-rest";
const client = new QdrantClient({
  url: "https://<cluster>.qdrant.io:6333",
  apiKey: "<token>",
});
// Hangs forever inside Docker — never resolves or rejects
await client.upsert("my-collection", {
  wait: true,
  points: [{
    id: "11111111-1111-1111-1111-111111111111",
    vector: { text: "hello world", model: "intfloat/multilingual-e5-small" },
    payload: { text: "hello" },
  }],
});

Workaround
Using Node.js https.request directly (HTTP/1.1) works correctly:

const https = require("https");
// PUT to /collections/{name}/points?wait=true with same JSON body
// → returns 200 in ~222ms

Expected behavior
client.upsert() should complete or throw within a reasonable timeout when
Cloud Inference is enabled, regardless of whether HTTP/2 or HTTP/1.1 is used.
Additional context

  • Regular upserts with pre-computed float vectors (no inference) work fine via the SDK
  • The issue is specific to inference vectors (vector: { text, model })
  • Qdrant Cloud cluster is reachable and inference works correctly via REST curl
  • Docker DNS is set to 8.8.8.8 / 1.1.1.1 (not the issue)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions