orez 0.5.13 → 0.5.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,6 +18,7 @@ export declare class DoBackend {
18
18
  private doUrl;
19
19
  private dbName;
20
20
  private httpClient;
21
+ private cleanupHttpClient;
21
22
  private namespace;
22
23
  private skippedFunctionNames;
23
24
  private triggerFunctions;
@@ -30,10 +31,14 @@ export declare class DoBackend {
30
31
  private publicationTableInfoCache;
31
32
  private cdcRegistrationDirty;
32
33
  private readyPromise;
34
+ private closePromise;
35
+ private lifecycleAbort;
36
+ private removeExternalAbortListener;
33
37
  private operationMutex;
34
38
  private instanceId;
35
39
  private allowTransactionalDDL;
36
40
  private signalReplication;
41
+ private log?;
37
42
  private inTransaction;
38
43
  private txID;
39
44
  private txSnapshot;
@@ -48,11 +53,16 @@ export declare class DoBackend {
48
53
  allowTransactionalDDL?: boolean;
49
54
  fetch?: typeof fetch;
50
55
  instanceId?: string;
56
+ log?: (event: Record<string, unknown>) => void;
57
+ signal?: AbortSignal;
51
58
  signalReplication?: () => void;
52
59
  txOwner?: string;
53
60
  });
54
61
  get waitReady(): Promise<void>;
55
62
  private ensureReady;
63
+ private assertOpen;
64
+ private emitInitEvent;
65
+ private runInitPhase;
56
66
  private init;
57
67
  private ensureChangeTrackingTables;
58
68
  private ensureMetadataTable;
@@ -1 +1 @@
1
- {"version":3,"file":"pg-proxy-do-backend.d.ts","sourceRoot":"","sources":["../src/pg-proxy-do-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pg-proxy-do-backend.d.ts","sourceRoot":"","sources":["../src/pg-proxy-do-backend.ts"],"names":[],"mappings":"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"}
@@ -4750,6 +4750,7 @@ export class DoBackend {
4750
4750
  doUrl;
4751
4751
  dbName;
4752
4752
  httpClient;
4753
+ cleanupHttpClient;
4753
4754
  namespace;
4754
4755
  skippedFunctionNames;
4755
4756
  triggerFunctions;
@@ -4770,10 +4771,14 @@ export class DoBackend {
4770
4771
  publicationTableInfoCache = null;
4771
4772
  cdcRegistrationDirty = false;
4772
4773
  readyPromise = null;
4774
+ closePromise = null;
4775
+ lifecycleAbort = new AbortController();
4776
+ removeExternalAbortListener = null;
4773
4777
  operationMutex = new Mutex();
4774
4778
  instanceId;
4775
4779
  allowTransactionalDDL;
4776
4780
  signalReplication;
4781
+ log;
4777
4782
  // Transaction state. The Durable Object refuses raw SQL BEGIN/COMMIT/SAVEPOINT
4778
4783
  // (Cloudflare requires ctx.storage.transaction()), so PG-style multi-call
4779
4784
  // transactions can't ride on SQLite's own transaction machinery. Instead we
@@ -4810,9 +4815,25 @@ export class DoBackend {
4810
4815
  this.namespace = namespace;
4811
4816
  this.instanceId = opts?.instanceId ?? '';
4812
4817
  this.allowTransactionalDDL = opts?.allowTransactionalDDL === true;
4818
+ this.log = opts?.log;
4813
4819
  this.txOwner = opts?.txOwner || 'default';
4814
4820
  this.signalReplication = opts?.signalReplication ?? signalReplicationChange;
4815
- this.httpClient = new HttpClient(opts?.fetch);
4821
+ if (opts?.signal) {
4822
+ const externalSignal = opts.signal;
4823
+ const abort = () => this.lifecycleAbort.abort(externalSignal.reason);
4824
+ if (externalSignal.aborted) {
4825
+ abort();
4826
+ }
4827
+ else {
4828
+ externalSignal.addEventListener('abort', abort, { once: true });
4829
+ this.removeExternalAbortListener = () => externalSignal.removeEventListener('abort', abort);
4830
+ }
4831
+ }
4832
+ this.httpClient = new HttpClient(opts?.fetch, this.lifecycleAbort.signal);
4833
+ // transaction rollback is part of close itself. it must remain usable after
4834
+ // lifecycleAbort stops ordinary queries, and close joins this request before
4835
+ // allowing the owning runtime generation to be released.
4836
+ this.cleanupHttpClient = new HttpClient(opts?.fetch);
4816
4837
  this.skippedFunctionNames = getSkippedFunctionNames(dbName, namespace, this.instanceId);
4817
4838
  this.triggerFunctions = new Map();
4818
4839
  this.schemaMetadata = new Map();
@@ -4824,6 +4845,12 @@ export class DoBackend {
4824
4845
  return this.ensureReady();
4825
4846
  }
4826
4847
  ensureReady() {
4848
+ try {
4849
+ this.assertOpen();
4850
+ }
4851
+ catch (error) {
4852
+ return Promise.reject(error);
4853
+ }
4827
4854
  if (this.ready)
4828
4855
  return Promise.resolve();
4829
4856
  if (!this.readyPromise) {
@@ -4834,25 +4861,97 @@ export class DoBackend {
4834
4861
  }
4835
4862
  return this.readyPromise;
4836
4863
  }
4864
+ assertOpen() {
4865
+ if (this.closed)
4866
+ throw new Error('DoBackend closed');
4867
+ this.lifecycleAbort.signal.throwIfAborted();
4868
+ }
4869
+ emitInitEvent(event) {
4870
+ try {
4871
+ this.log?.({
4872
+ component: 'do-backend',
4873
+ database: this.dbName,
4874
+ instanceId: this.instanceId,
4875
+ namespace: this.namespace,
4876
+ ...event,
4877
+ });
4878
+ }
4879
+ catch {
4880
+ // diagnostics cannot break initialization
4881
+ }
4882
+ }
4883
+ async runInitPhase(phase, run) {
4884
+ const startedAt = Date.now();
4885
+ this.emitInitEvent({ event: 'do-backend-init-phase-start', phase });
4886
+ try {
4887
+ const result = await run();
4888
+ this.emitInitEvent({
4889
+ event: 'do-backend-init-phase-complete',
4890
+ phase,
4891
+ phaseElapsedMs: Date.now() - startedAt,
4892
+ });
4893
+ return result;
4894
+ }
4895
+ catch (error) {
4896
+ this.emitInitEvent({
4897
+ error: error instanceof Error ? error.message : String(error),
4898
+ event: 'do-backend-init-phase-failed',
4899
+ phase,
4900
+ phaseElapsedMs: Date.now() - startedAt,
4901
+ });
4902
+ throw error;
4903
+ }
4904
+ }
4837
4905
  async init() {
4838
- await loadModule();
4906
+ this.assertOpen();
4907
+ await this.runInitPhase('module-load', loadModule);
4908
+ this.assertOpen();
4839
4909
  try {
4840
- await this.httpClient.post(this.url('/exec'), JSON.stringify({ sql: 'SELECT 1' }));
4910
+ await this.runInitPhase('connection-probe', () => this.httpClient.post(this.url('/exec'), JSON.stringify({ sql: 'SELECT 1' })));
4841
4911
  }
4842
4912
  catch { }
4913
+ this.assertOpen();
4843
4914
  if (this.dbName === 'postgres')
4844
4915
  await this.ensureChangeTrackingTables();
4916
+ this.assertOpen();
4845
4917
  await this.loadDurableMetadata();
4918
+ this.assertOpen();
4846
4919
  this.ready = true;
4847
4920
  }
4848
4921
  async ensureChangeTrackingTables() {
4849
- await this.doExecResult("CREATE TABLE IF NOT EXISTS \"_zero_changes\" (watermark INTEGER PRIMARY KEY AUTOINCREMENT, table_name TEXT NOT NULL, op TEXT NOT NULL CHECK (op IN ('INSERT', 'UPDATE', 'DELETE')), row_data TEXT, old_data TEXT, created_at INTEGER NOT NULL DEFAULT (unixepoch()))");
4850
- await this.doExecResult('CREATE TABLE IF NOT EXISTS "_zero_change_state" (id INTEGER PRIMARY KEY CHECK (id = 1), last_value INTEGER NOT NULL DEFAULT 0)');
4851
- await this.doExecResult('INSERT OR IGNORE INTO "_zero_change_state" (id, last_value) VALUES (1, 0)');
4852
- await this.doExecResult('CREATE TABLE IF NOT EXISTS "_orez___zero_watermark" (dummy INTEGER PRIMARY KEY DEFAULT 1, last_value INTEGER NOT NULL DEFAULT 1, is_called INTEGER NOT NULL DEFAULT 0)');
4853
- await this.doExecResult('INSERT OR IGNORE INTO "_orez___zero_watermark" (dummy, last_value, is_called) VALUES (1, 1, 0)');
4854
- await this.doExecResult("CREATE TABLE IF NOT EXISTS \"_orez__zero_replication_slots\" (slot_name TEXT PRIMARY KEY, restart_lsn TEXT NOT NULL DEFAULT '0/1000000', confirmed_flush_lsn TEXT NOT NULL DEFAULT '0/1000000', wal_status TEXT NOT NULL DEFAULT 'reserved', plugin TEXT NOT NULL DEFAULT 'pgoutput', slot_type TEXT NOT NULL DEFAULT 'logical', active INTEGER NOT NULL DEFAULT 0, active_pid INTEGER DEFAULT NULL, created_at INTEGER NOT NULL DEFAULT (unixepoch()))");
4855
- await this.doExecResult('CREATE TABLE IF NOT EXISTS "_orez___zero_streamed_batches" (batch_lsn INTEGER PRIMARY KEY, batch_end INTEGER NOT NULL)');
4922
+ const statements = [
4923
+ [
4924
+ 'change-tracking-log-table',
4925
+ "CREATE TABLE IF NOT EXISTS \"_zero_changes\" (watermark INTEGER PRIMARY KEY AUTOINCREMENT, table_name TEXT NOT NULL, op TEXT NOT NULL CHECK (op IN ('INSERT', 'UPDATE', 'DELETE')), row_data TEXT, old_data TEXT, created_at INTEGER NOT NULL DEFAULT (unixepoch()))",
4926
+ ],
4927
+ [
4928
+ 'change-tracking-state-table',
4929
+ 'CREATE TABLE IF NOT EXISTS "_zero_change_state" (id INTEGER PRIMARY KEY CHECK (id = 1), last_value INTEGER NOT NULL DEFAULT 0)',
4930
+ ],
4931
+ [
4932
+ 'change-tracking-state-seed',
4933
+ 'INSERT OR IGNORE INTO "_zero_change_state" (id, last_value) VALUES (1, 0)',
4934
+ ],
4935
+ [
4936
+ 'change-tracking-watermark-table',
4937
+ 'CREATE TABLE IF NOT EXISTS "_orez___zero_watermark" (dummy INTEGER PRIMARY KEY DEFAULT 1, last_value INTEGER NOT NULL DEFAULT 1, is_called INTEGER NOT NULL DEFAULT 0)',
4938
+ ],
4939
+ [
4940
+ 'change-tracking-watermark-seed',
4941
+ 'INSERT OR IGNORE INTO "_orez___zero_watermark" (dummy, last_value, is_called) VALUES (1, 1, 0)',
4942
+ ],
4943
+ [
4944
+ 'change-tracking-replication-slots-table',
4945
+ "CREATE TABLE IF NOT EXISTS \"_orez__zero_replication_slots\" (slot_name TEXT PRIMARY KEY, restart_lsn TEXT NOT NULL DEFAULT '0/1000000', confirmed_flush_lsn TEXT NOT NULL DEFAULT '0/1000000', wal_status TEXT NOT NULL DEFAULT 'reserved', plugin TEXT NOT NULL DEFAULT 'pgoutput', slot_type TEXT NOT NULL DEFAULT 'logical', active INTEGER NOT NULL DEFAULT 0, active_pid INTEGER DEFAULT NULL, created_at INTEGER NOT NULL DEFAULT (unixepoch()))",
4946
+ ],
4947
+ [
4948
+ 'change-tracking-streamed-batches-table',
4949
+ 'CREATE TABLE IF NOT EXISTS "_orez___zero_streamed_batches" (batch_lsn INTEGER PRIMARY KEY, batch_end INTEGER NOT NULL)',
4950
+ ],
4951
+ ];
4952
+ for (const [phase, sql] of statements) {
4953
+ await this.runInitPhase(phase, () => this.doExecResult(sql));
4954
+ }
4856
4955
  }
4857
4956
  async ensureMetadataTable() {
4858
4957
  await this.doExecResult(metadataTableDDL());
@@ -4901,8 +5000,8 @@ export class DoBackend {
4901
5000
  }
4902
5001
  async loadDurableMetadata() {
4903
5002
  try {
4904
- await this.ensureMetadataTable();
4905
- const result = await this.doExecResult(`SELECT kind, key, subkey, value FROM ${quoteIdentifier(METADATA_TABLE)}`);
5003
+ await this.runInitPhase('durable-metadata-table', () => this.ensureMetadataTable());
5004
+ const result = await this.runInitPhase('durable-metadata-read', () => this.doExecResult(`SELECT kind, key, subkey, value FROM ${quoteIdentifier(METADATA_TABLE)}`));
4906
5005
  this.lastPersistedMetadata = new Map();
4907
5006
  for (const row of result.rows) {
4908
5007
  const kind = String(row.kind ?? '');
@@ -4922,8 +5021,9 @@ export class DoBackend {
4922
5021
  this.fkRegistry.add(key, JSON.parse(value));
4923
5022
  }
4924
5023
  }
4925
- if (await this.repairShardMetadataPublications()) {
4926
- await this.persistDurableMetadata();
5024
+ const repaired = await this.runInitPhase('shard-metadata-repair', () => this.repairShardMetadataPublications());
5025
+ if (repaired) {
5026
+ await this.runInitPhase('durable-metadata-persist', () => this.persistDurableMetadata());
4927
5027
  }
4928
5028
  }
4929
5029
  catch { }
@@ -5090,18 +5190,29 @@ export class DoBackend {
5090
5190
  this.operationMutex.release();
5091
5191
  }
5092
5192
  }
5093
- async close() {
5094
- return this.runExclusive(async () => {
5095
- if (this.inTransaction) {
5096
- try {
5097
- await this.rollbackTransaction();
5098
- }
5099
- catch {
5100
- this.clearTransactionState();
5101
- }
5193
+ close() {
5194
+ if (this.closePromise)
5195
+ return this.closePromise;
5196
+ this.closed = true;
5197
+ if (!this.lifecycleAbort.signal.aborted) {
5198
+ this.lifecycleAbort.abort(new Error('DoBackend closed'));
5199
+ }
5200
+ const initialization = this.readyPromise;
5201
+ this.closePromise = (async () => {
5202
+ try {
5203
+ await initialization?.catch(() => { });
5204
+ await this.runExclusive(async () => {
5205
+ if (this.inTransaction) {
5206
+ await this.rollbackTransaction(this.cleanupHttpClient, true);
5207
+ }
5208
+ });
5102
5209
  }
5103
- this.closed = true;
5104
- });
5210
+ finally {
5211
+ this.removeExternalAbortListener?.();
5212
+ this.removeExternalAbortListener = null;
5213
+ }
5214
+ })();
5215
+ return this.closePromise;
5105
5216
  }
5106
5217
  readyForQuery() {
5107
5218
  return buildReadyForQuery(this.inTransaction ? STATUS_TRANSACTION : STATUS_IDLE);
@@ -5223,7 +5334,7 @@ export class DoBackend {
5223
5334
  if (shouldSignal)
5224
5335
  this.signalReplication();
5225
5336
  }
5226
- async rollbackTransaction() {
5337
+ async rollbackTransaction(httpClient = this.httpClient, closing = false) {
5227
5338
  if (!this.inTransaction) {
5228
5339
  this.clearTransactionState();
5229
5340
  return;
@@ -5237,15 +5348,19 @@ export class DoBackend {
5237
5348
  (this.txHasTrackedWrite ||
5238
5349
  this.txDataSnapshots.size > 0 ||
5239
5350
  this.txSchemaSnapshotted)) {
5240
- await this.httpClient.post(this.url('/rollback-tx'), JSON.stringify({ transactionID: txID }), { 'Content-Type': 'application/json' });
5351
+ await httpClient.post(this.url('/rollback-tx'), JSON.stringify({ transactionID: txID }), { 'Content-Type': 'application/json' });
5241
5352
  }
5242
5353
  }
5243
5354
  finally {
5244
5355
  if (snapshot)
5245
5356
  this.restoreTransactionMetadataSnapshot(snapshot);
5246
- await this.persistDurableMetadata();
5357
+ // a closing backend is being discarded. the atomic remote rollback above
5358
+ // is the required cleanup; post-rollback metadata/cache refreshes are only
5359
+ // useful to a backend that will continue serving queries.
5360
+ if (!closing)
5361
+ await this.persistDurableMetadata();
5247
5362
  this.clearTransactionState();
5248
- if (snapshot)
5363
+ if (snapshot && !closing)
5249
5364
  await this.ensureCdcRegistration();
5250
5365
  }
5251
5366
  }
@@ -7742,20 +7857,28 @@ export class DoBackend {
7742
7857
  }
7743
7858
  class HttpClient {
7744
7859
  fetcher;
7745
- constructor(fetcher = fetch) {
7860
+ signal;
7861
+ constructor(fetcher = fetch, signal) {
7746
7862
  this.fetcher = fetcher;
7863
+ this.signal = signal;
7747
7864
  }
7748
7865
  async post(url, body, headers) {
7866
+ this.signal?.throwIfAborted();
7749
7867
  const resp = await this.fetcher(url, {
7750
7868
  method: 'POST',
7751
7869
  headers: headers ?? { 'Content-Type': 'application/json' },
7752
7870
  body,
7871
+ signal: this.signal,
7753
7872
  });
7873
+ this.signal?.throwIfAborted();
7754
7874
  if (!resp.ok) {
7755
7875
  const text = await resp.text().catch(() => '');
7876
+ this.signal?.throwIfAborted();
7756
7877
  throw new Error(`HTTP ${resp.status}: ${text.slice(0, 5000)}`);
7757
7878
  }
7758
- return resp.text();
7879
+ const text = await resp.text();
7880
+ this.signal?.throwIfAborted();
7881
+ return text;
7759
7882
  }
7760
7883
  }
7761
7884
  //# sourceMappingURL=pg-proxy-do-backend.js.map