You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[XTA-15079] Add SPOG ?o= routing support and fix final-flush auth on close (#391)
* Add SPOG support: x-databricks-org-id header for telemetry + feature-flag
SPOG (Single Panel of Glass) replaces workspace-specific hostnames with
account-level vanity URLs. When httpPath carries `?o=<workspaceId>`,
endpoints that don't include the workspace in their URL path (telemetry,
feature flags) need the workspace conveyed via the
`x-databricks-org-id` header instead.
Changes:
- Parse `?o=<digits>` out of httpPath in DBSQLClient.connect() and stash
the org-id as `x-databricks-org-id` on a new `ClientConfig.customHeaders`
field. A user-supplied `customHeaders` entry (case-insensitive) takes
precedence.
- DatabricksTelemetryExporter spreads `config.customHeaders` into the
outgoing POST headers. Auth headers still win on collision.
- FeatureFlagCache does the same for the feature-flag GET.
Not applicable to this driver (vs JDBC port in
databricks/databricks-jdbc#1316):
- httpPath property parser fix — Node.js passes `options.path` through
unmodified.
- Warehouse ID regex fix for SEA — driver uses Thrift only.
- DBFS Volume header injection — driver exposes no Volume API.
OAuth/OIDC token requests deliberately do NOT receive customHeaders.
Co-authored-by: Isaac
* Fix close-ordering: keep context registered through final telemetry flush
`TelemetryClientProvider.releaseClient` was calling `unregisterContext`
before `client.close()`. On the last refcount, that emptied the FIFO of
`(context, authProvider)` pairs before the final flush ran, so the
exporter's `getAuthProvider()` walk returned undefined and the batch was
dropped with "Telemetry: Authorization header missing — metrics will be
dropped".
Defer `unregisterContext` until after `close()` on the last refcount;
multi-refcount path is unchanged (immediate unregister so surviving
consumers don't reach into a closing context).
Verified end-to-end against a real SPOG host: the final flush now
exports its 3 metrics (connection.open, statement.start,
statement.complete) instead of warning and dropping them.
Co-authored-by: Isaac
* Simplify close-ordering fix
Tighten the previous commit to the minimal diff: guard the existing
unregisterContext call instead of restructuring the function. Restores
the unchanged comment on TelemetryClient.unregisterContext.
Co-authored-by: Isaac
* Address review feedback: pure header builder, SPOG logs, all-purpose path form
- buildCustomHeaders(httpPath, userHeaders) and extractWorkspaceId(httpPath):
SPOG-routing inputs now in the signature instead of read off this.httpPath.
extractWorkspaceId is static. Drops the (client as any).httpPath test
workaround. Fixes the hidden ordering dependency flagged in PR review [M1].
- Log SPOG header injection (debug), caller-supplied override (debug), and
non-numeric workspace ID (warn). Closes JDBC parity gap so oncall has a
grep handle when SPOG routing misbehaves [H2].
- extractWorkspaceId now also matches the all-purpose cluster path form
/o/<wsId>/<cluster-id> in addition to the warehouse query form ?o=<wsId>.
Verified end-to-end against a real all-purpose cluster on a SPOG host.
Co-authored-by: Isaac
Signed-off-by: samikshya-chand_data <samikshya.chand@databricks.com>
* Apply prettier formatting
Auto-fix from `prettier --write` on the two files touched by the
previous commit; no logic changes.
Co-authored-by: Isaac
Signed-off-by: samikshya-chand_data <samikshya.chand@databricks.com>
---------
Signed-off-by: samikshya-chand_data <samikshya.chand@databricks.com>
0 commit comments