Repository navigation
Closed as not planned
Labels
bugSomething isn't workingSomething isn't workingengineer-botMaintainer-only: triggers the autonomous engineer-bot (bug-fix author on issues; follow-up on PRs)Maintainer-only: triggers the autonomous engineer-bot (bug-fix author on issues; follow-up on PRs)
Description
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
- STATEMENT-022 [thrift]: Thrift does not deduplicate concurrent Operation.cancel() calls: three simultaneous cancels send three CancelOperation RPCs instead of the single deduped RPC the reference driver sends
- failing test:
STATEMENT-022 — three simultaneous cancel() calls: no deadlock, dedup per protocol [thrift](see the coverage PR diff undertests/)
- failing test:
Reproduce & Expected
STATEMENT-022 — Validates driver handles multiple threads calling CancelOperation on same statement without deadlock or crash.
Reproduce:
SELECT a.*, b.* FROM main.tpcds_sf1_delta.catalog_returns a CROSS JOIN range(1, 10000) b ORDER BY a.cr_order_number, b.idExpected (per the shared spec):
- completes without an exception
- [thrift] exactly 1
CancelOperationcall(s) - [sea] between 1 and 3
CancelStatementcall(s)
Context
- The behavior was first fixed in a DIFFERENT driver — reference PR: Tag staging, decompression, and cancellation errors for telemetry databricks-sql-go#419 — which seeded the shared language-neutral spec. This issue tracks the same conformance gap in databricks/databricks-sql-nodejs; the reference PR is for cross-referencing the intended behavior, NOT a change to this repo.
- Coverage PR carrying the reproducing xfail test(s): https://github.com/databricks/databricks-driver-test/pull/1015
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingengineer-botMaintainer-only: triggers the autonomous engineer-bot (bug-fix author on issues; follow-up on PRs)Maintainer-only: triggers the autonomous engineer-bot (bug-fix author on issues; follow-up on PRs)
Activity
peco-engineer-bot commentedon Nov 5, 2026
🤖 engineer-bot produced a fix but could not open the PR (push or PR creation failed). See the workflow run for details.
peco-engineer-bot commentedon Nov 5, 2026
🤖 engineer-bot opened a fix PR: #564
Review before merge.
vuanhphung commentedon Nov 5, 2026
Closing as not a bug.
STATEMENT-022's goal is that concurrent
cancel()calls don't deadlock or crash. The spec notes inspecs/statement-execution.yamlsay: "The primary goal is testing that multiple Cancel() calls don't cause deadlock or crash." The Node.js driver already does this: three concurrent cancels on Thrift all complete. The only mismatch reported here is the number of RPCs.The Thrift
CancelOperation expected: 1assertion just copies the C# driver's client-side dedup. The server handles repeated CancelOperation calls fine, and other drivers already pass while sending more than one:Also, the cited reference (databricks/databricks-sql-go#419) only tags telemetry errors; it doesn't dedup cancels.
The fix in #564 grew into a cancel/close lifecycle change. For example,
close()would skip CloseOperation when it overlapped a successful cancel. That isn't worth the risk for a gap that only concerns the RPC count, so #564 is closed too. The right fix is in the spec: relax the Thrift assertion to 1..3 and set nodejs/thrift back toimplemented(databricks/databricks-driver-test#1015).