UNPKG

@clickup/ent-framework

Version:

A PostgreSQL graph-database-alike library with microsharding and row-level security

41 lines (38 loc) 1.79 kB
import type { TimelineCaughtUpReason } from "./Timeline"; /** * A reason why master or replica was chosen to send the query to. The most * noticeable ones are: * - "replica-bc-master-state-unknown": 99% of cases (since writes are rare) * - "master-bc-replica-not-caught-up": happens immediately after each write, * until the write is propagated to replica * - "replica-bc-caught-up": must happen eventually (in 0.1-2s) after each write * - "replica-bc-pos-expired": signals that the replication lag is huge, we * should carefully monitor this case and make sure it never happens */ export type WhyClient = | Exclude<TimelineCaughtUpReason, false> | "replica-bc-stale-replica-freshness" | "master-bc-is-write" | "master-bc-master-freshness" | "master-bc-no-replicas" | "master-bc-replica-not-caught-up"; /** * A debug annotation from each individual place which initiated the query. When * multiple queries are grouped into one large query by Ent Framework (even * cross-async-trace and cross-VC), the resulting large query is accompanied * with all those annotations. */ export interface QueryAnnotation { /** Trace ID of the series of the queries. */ readonly trace: string; /** Something which identifies the acting user; it's named `vc` after Ent's VC * for simplicity, but at this layer of abstractions, there are no Ents. */ readonly vc: string; /** Sometimes a query may be annotated by the source stack trace. It's * typically expensive, so it's likely "" in production. */ readonly debugStack: string; /** Answers, why exactly this Client was selected to send the query to. */ readonly whyClient: WhyClient | undefined; /** In case it's a retry, the attempt number will be greater than 0. */ readonly attempt: number; }