[coverage] Conformance findings: SESSION-021

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

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
1-2 giorni
Idoneità per principianti
52/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
go

Direzione di ricerca

Start with TestStatementCreationOnClosedConnectionRejected in the coverage PR diff under tests/ and compare its expected behavior with the reference JDBC fix. Trace driver.Conn.Prepare and PrepareContext to find where closed connections should be rejected before any server call. Done means both methods reject eagerly, the connection can still run queries afterward, and the conformance assertions pass for thrift and sea.

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-go. 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-go) is fixed, then flips green as a tripwire.

Findings

  • SESSION-021 [thrift]: driver.Conn.Prepare and PrepareContext on a CLOSED connection return a statement instead of rejecting eagerly, deferring the failure to a server-side "Invalid SessionHandle" 400 at execute
    • failing test: TestStatementCreationOnClosedConnectionRejected (see the coverage PR diff under tests/)
  • SESSION-021 [sea]: driver.Conn.Prepare and PrepareContext on a CLOSED connection return a statement instead of rejecting eagerly; the kernel only fails later at execute with kernel_session_new_statement: session and out must be non-null
    • failing test: TestStatementCreationOnClosedConnectionRejected (see the coverage PR diff under tests/)
  • SESSION-021: driver.Conn.Prepare and PrepareContext on a CLOSED connection return a statement instead of rejecting eagerly, deferring the failure to execute (thrift: server-side "Invalid SessionHandle" 400; sea/kernel: kernel_session_new_statement null-session error)

Reproduce & Expected

SESSION-021 — Validates that a CLOSED connection rejects statement creation EAGERLY -- at the create/prepare/retrieve call itself, before any execution is attempted -- and that the rejected attempt leaves no stale…

Reproduce:

SELECT 1
SELECT 1
SELECT 1

Expected (per the shared spec):

  • completes without an exception
  • completes without an exception
  • completes without an exception
  • completes without an exception
  • [thrift] exactly 0 OpenSession call(s)
  • [thrift] exactly 0 ExecuteStatement call(s)
  • [sea] exactly 0 CreateSession call(s)
  • [sea] exactly 0 ExecuteStatement call(s)
  • full assertion contract:
result:
- label: baseline
  no_exception: true
  row_count: 1
- label: baseline_metadata
  no_exception: true
- label: closed_create
  error:
    contains:
    - closed
    - disposed
    - not connected
- label: closed_prepare
  error:
    contains:
    - closed
    - disposed
    - not connected
- label: after_close
  no_exception: true
  row_count: 1
- label: after_close_metadata
  no_exception: true
- label: after_close_metadata
  metadata_path_unchanged_from: baseline_metadata
protocol:
  thrift:
  - call_count:
      method: OpenSession
      expected: 0
      label: closed_create
  - call_count:
      method: ExecuteStatement
      expected: 0
      label: closed_create
  - call_min:
      method: OpenSession
      min: 1
      label: after_close
  sea:
  - call_count:
      operation: CreateSession
      expected: 0
      label: closed_create
  - call_count:
      operation: ExecuteStatement
      expected: 0
      label: closed_create
  - call_min:
      operation: CreateSession
      min: 1
      label: after_close

Context

Lingua principale
Go
Stelle
53
Fork
69
Merge medio
2g 12h
PR unite (30g)
16

Preparare l'ambiente

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-go

Tutte le issue di databricks/databricks-sql-go

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.