[coverage] Conformance findings: CLOUDFETCH-018

Aperta
#520 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
nodejs, typescript
Ambito
backend, databases

Direzione di ricerca

Inizia con i due test xfail indicati nella coverage PR sotto tests/ e traccia i percorsi di drain di CloudFetch per i backend Thrift e SEA, incluso il comportamento di retry e link-refresh descritto qui. Il lavoro è completato quando un download bloccato effettua almeno una richiesta cloud, restituisce il controllo entro 150 secondi e restituisce un errore contenente timeout o timed out invece di bloccarsi.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

Surfaced by the multi-language coverage fan-out while conformance-testing these SPEC-IDs against databricks/databricks-sql-nodejs. Each finding is committed as an expected-failure (xfail) test in the coverage PR — the test asserts the CORRECT (post-fix) behavior and stays red until THIS driver (databricks/databricks-sql-nodejs) is fixed, then flips green as a tripwire.

Findings

  • CLOUDFETCH-018 [thrift]: Thrift CloudFetch downloader enforces no absolute end-to-end per-chunk deadline: with every cloud GET stalled 180s the drain does not return within the 150s budget and no timeout-classified error surfaces (audit finding H05).
    • failing test: CloudFetch — Stalled Download Deadline > stalled chunk download — drain raises a timeout-classified error within an absolute per-chunk deadline [thrift] (see the coverage PR diff under tests/)
  • CLOUDFETCH-018 [sea]: SEA kernel bounds a stalled CloudFetch chunk only by a static per-request timeout inside a 5-attempt retry loop, so the two multiply instead of bounding the chunk: with every GET stalled 180s the drain does not return within the 150s budget and no timeout-classified error surfaces (audit finding H05).
    • failing test: CloudFetch — Stalled Download Deadline > stalled chunk download — drain raises a timeout-classified error within an absolute per-chunk deadline [sea] (see the coverage PR diff under tests/)
  • CLOUDFETCH-018: A stalled CloudFetch chunk download is not bounded by any absolute end-to-end per-chunk deadline on either backend: with every cloud GET held 180s the drain does not return within 150s and no error surfaces. The SEA kernel bounds each attempt only by a static per-request timeout under a 5-attempt loop ("Chunk N download failed (attempt 1/5): NetworkError … after 1 attempts … retrying"), so the two multiply instead of bounding the chunk; Thrift shows the same non-termination. Fix: enforce a wall-clock deadline over the whole chunk (connect + response headers + body + retry backoff + link refresh) and surface it as a timeout-classified terminal error (audit finding H05).

Reproduce & Expected

CLOUDFETCH-018 — A CloudFetch chunk download that STALLS -- the cloud-storage GET is accepted but response headers/body never arrive -- must be abandoned under an ABSOLUTE end-to-end wall-clock budget for that chunk,…

Reproduce:

  • Stall EVERY CloudFetch download: the proxy accepts each GET and holds it for
    180s, so no attempt ever completes and the chunk can only finish by the driver
    giving up.
  • A result large enough to be delivered via CloudFetch external links; drain it
    and expect a terminal timeout rather than a multi-minute block.

Expected (per the shared spec):

  • full assertion contract:
result:
- label: stalled_drain
  exception_thrown: true
- label: stalled_drain
  elapsed_seconds_range:
    max: 150
- label: stalled_drain
  error:
    contains:
    - timeout
    - timed out
    - deadline
protocol:
  thrift:
  - label: stalled_drain
    cloud_downloads_min: 1
  sea:
  - label: stalled_drain
    cloud_downloads_min: 1

Context

Lingua principale
TypeScript
Stelle
36
Fork
50
Merge medio
13h 46m
PR unite (30g)
9

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di databricks/databricks-sql-nodejs

Tutte le issue di databricks/databricks-sql-nodejs

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.