Files
orca/cloud/apps/relay/src/observed-relay-database.ts
Jinwoo Hong 3eec77c11a chore(cloud): add the relay fence broker, ops console, Terraform root, scripts, and 24 cloud-* workflows (#18413)
Phase 6 of the relay split: the relay's deploy/operate surface moves under cloud/ with 24 cloud-* workflows gated on ORCA_CLOUD_OPERATIONS_ENABLED, the Cloud SQL rollout lease action, the relay Terraform root (dual-accept identities for both repositories), scripts, docs, CODEOWNERS, and a terraform validate job in Cloud Verify.
2026-09-03 06:55:14 -04:00

47 lines
1.4 KiB
TypeScript

import type {
RelayDatabase,
RelayLockOptions,
RelayTransactionOptions,
SqlRow
} from './database.js'
import { timedRelayOperation, type RelayRuntimeObserver } from './relay-observability.js'
export function observeRelayDatabase(
database: RelayDatabase,
observer: RelayRuntimeObserver
): RelayDatabase {
const query = (sql: string, params?: unknown[]): Promise<SqlRow[]> =>
timedRelayOperation(
() => database.query(sql, params),
(durationMs, success) => observer.recordSql(durationMs, success)
)
const queryLocked = (
sql: string,
params?: unknown[],
options?: RelayLockOptions
): Promise<SqlRow[]> =>
timedRelayOperation(
() => database.queryLocked(sql, params, options),
(durationMs, success) => observer.recordSql(durationMs, success),
(error) =>
// NOWAIT contention is an intentional sweep deferral, not a SQL-health failure.
options?.failIfUnavailable === true &&
error instanceof Error &&
error.message === 'database_lock_unavailable'
)
return {
dialect: database.dialect,
query,
queryLocked,
transaction: async <T>(
operation: (transaction: RelayDatabase) => Promise<T>,
options?: RelayTransactionOptions
): Promise<T> =>
await database.transaction(
async (transaction) => await operation(observeRelayDatabase(transaction, observer)),
options
),
close: async () => await database.close()
}
}