orez 0.5.2 → 0.5.4
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.
- package/dist/cf-do/tx-journal.d.ts +10 -1
- package/dist/cf-do/tx-journal.d.ts.map +1 -1
- package/dist/cf-do/tx-journal.js +200 -20
- package/dist/cf-do/tx-journal.js.map +1 -1
- package/dist/cf-do/worker.d.ts +1 -0
- package/dist/cf-do/worker.d.ts.map +1 -1
- package/dist/cf-do/worker.js +25 -1
- package/dist/cf-do/worker.js.map +1 -1
- package/dist/pg-proxy-do-backend.d.ts +3 -1
- package/dist/pg-proxy-do-backend.d.ts.map +1 -1
- package/dist/pg-proxy-do-backend.js +71 -34
- package/dist/pg-proxy-do-backend.js.map +1 -1
- package/dist/worker/cf-patches.js +16 -13
- package/dist/worker/cf-patches.js.map +1 -1
- package/dist/worker/local-sql-backend.d.ts.map +1 -1
- package/dist/worker/local-sql-backend.js +12 -2
- package/dist/worker/local-sql-backend.js.map +1 -1
- package/package.json +3 -2
|
@@ -31,7 +31,16 @@
|
|
|
31
31
|
*/
|
|
32
32
|
import type { DurableSqlStorage } from './watermark.js';
|
|
33
33
|
export declare const TX_MANIFEST_TABLE = "_orez_tx_manifest";
|
|
34
|
+
export declare const TX_SCHEMA_TABLE = "_orez_tx_schema";
|
|
34
35
|
export declare const TX_MANIFEST_DDL: string;
|
|
36
|
+
export declare const TX_SCHEMA_DDL: string;
|
|
37
|
+
/**
|
|
38
|
+
* Capture the application schema before the first DDL statement and the data
|
|
39
|
+
* of each table that a later DDL statement can destructively change. SQLite
|
|
40
|
+
* can transact DDL, but the DO protocol spans requests, so rollback needs an
|
|
41
|
+
* explicit durable image. The caller must wrap this in one storage transaction.
|
|
42
|
+
*/
|
|
43
|
+
export declare function snapshotTxSchema(sql: DurableSqlStorage, txID: string, owner?: string, affectedTables?: string[]): void;
|
|
35
44
|
/**
|
|
36
45
|
* commit a journaled transaction: drop its snapshot tables and delete its
|
|
37
46
|
* manifest rows. the data writes were applied eagerly during the tx, so once
|
|
@@ -59,7 +68,7 @@ export declare function rollbackTxJournal(sql: DurableSqlStorage, txID: string):
|
|
|
59
68
|
* replay. Safe to call repeatedly: only the first write to a table in a
|
|
60
69
|
* transaction takes the copy.
|
|
61
70
|
*/
|
|
62
|
-
export declare function upgradeToTableSnapshot(sql: DurableSqlStorage, txID: string, table: string): void;
|
|
71
|
+
export declare function upgradeToTableSnapshot(sql: DurableSqlStorage, txID: string, table: string, owner?: string): void;
|
|
63
72
|
/**
|
|
64
73
|
* Snapshot every user table before a statement whose source table has a
|
|
65
74
|
* business trigger or is the parent of a cascading/SET foreign-key action.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-journal.d.ts","sourceRoot":"","sources":["../../src/cf-do/tx-journal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,eAAO,MAAM,iBAAiB,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"tx-journal.d.ts","sourceRoot":"","sources":["../../src/cf-do/tx-journal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,eAAO,MAAM,iBAAiB,sBAAsB,CAAA;AACpD,eAAO,MAAM,eAAe,oBAAoB,CAAA;AAEhD,eAAO,MAAM,eAAe,QAMV,CAAA;AAElB,eAAO,MAAM,aAAa,QAQb,CAAA;AAuIb;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,SAAY,EACjB,cAAc,GAAE,MAAM,EAAO,GAC5B,IAAI,CAmDN;AAoHD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAU1E;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CA8C5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,SAAY,GAChB,IAAI,CAuCN;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAiCT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,iBAAiB,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACtC,MAAM,EAAE,CA8CV"}
|
package/dist/cf-do/tx-journal.js
CHANGED
|
@@ -31,12 +31,36 @@
|
|
|
31
31
|
*/
|
|
32
32
|
import { restoreTriggers, suspendTriggers, writableColumns } from './cdc.js';
|
|
33
33
|
export const TX_MANIFEST_TABLE = '_orez_tx_manifest';
|
|
34
|
+
export const TX_SCHEMA_TABLE = '_orez_tx_schema';
|
|
34
35
|
export const TX_MANIFEST_DDL = `CREATE TABLE IF NOT EXISTS "${TX_MANIFEST_TABLE}" (` +
|
|
35
36
|
'seq INTEGER PRIMARY KEY AUTOINCREMENT, ' +
|
|
36
37
|
'tx_id TEXT NOT NULL, ' +
|
|
37
38
|
"owner TEXT NOT NULL DEFAULT 'default', " +
|
|
38
39
|
'original TEXT NOT NULL, ' +
|
|
39
40
|
'snapshot TEXT)';
|
|
41
|
+
export const TX_SCHEMA_DDL = `CREATE TABLE IF NOT EXISTS "${TX_SCHEMA_TABLE}" (` +
|
|
42
|
+
'seq INTEGER PRIMARY KEY AUTOINCREMENT, ' +
|
|
43
|
+
'tx_id TEXT NOT NULL, ' +
|
|
44
|
+
"owner TEXT NOT NULL DEFAULT 'default', " +
|
|
45
|
+
'type TEXT NOT NULL, ' +
|
|
46
|
+
'name TEXT NOT NULL, ' +
|
|
47
|
+
'tbl_name TEXT NOT NULL, ' +
|
|
48
|
+
'sql TEXT)';
|
|
49
|
+
const INTERNAL_TABLES = new Set([
|
|
50
|
+
TX_MANIFEST_TABLE,
|
|
51
|
+
TX_SCHEMA_TABLE,
|
|
52
|
+
'_orez_cdc_tables',
|
|
53
|
+
'_orez_cdc_buffer',
|
|
54
|
+
'_zero_pending_changes',
|
|
55
|
+
'_zero_changes',
|
|
56
|
+
'_zero_change_state',
|
|
57
|
+
'_zero_schema_tables',
|
|
58
|
+
]);
|
|
59
|
+
function isInternalObject(name) {
|
|
60
|
+
return (INTERNAL_TABLES.has(name) ||
|
|
61
|
+
name.startsWith('_orez_tx_') ||
|
|
62
|
+
name.startsWith('sqlite_'));
|
|
63
|
+
}
|
|
40
64
|
function quoteIdent(name) {
|
|
41
65
|
return `"${name.replace(/"/g, '""')}"`;
|
|
42
66
|
}
|
|
@@ -45,6 +69,25 @@ function manifestTableExists(sql) {
|
|
|
45
69
|
.exec("SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?", TX_MANIFEST_TABLE)
|
|
46
70
|
.toArray().length > 0);
|
|
47
71
|
}
|
|
72
|
+
function schemaTableExists(sql) {
|
|
73
|
+
return (sql
|
|
74
|
+
.exec("SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?", TX_SCHEMA_TABLE)
|
|
75
|
+
.toArray().length > 0);
|
|
76
|
+
}
|
|
77
|
+
function schemaRows(sql, txID) {
|
|
78
|
+
if (!schemaTableExists(sql))
|
|
79
|
+
return [];
|
|
80
|
+
return sql
|
|
81
|
+
.exec(`SELECT seq, type, name, tbl_name, sql FROM "${TX_SCHEMA_TABLE}" WHERE tx_id = ? ORDER BY seq`, txID)
|
|
82
|
+
.toArray()
|
|
83
|
+
.map((row) => ({
|
|
84
|
+
seq: Number(row.seq),
|
|
85
|
+
type: String(row.type),
|
|
86
|
+
name: String(row.name),
|
|
87
|
+
table: String(row.tbl_name),
|
|
88
|
+
sql: row.sql === null || row.sql === undefined ? null : String(row.sql),
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
48
91
|
function manifestRows(sql, txID) {
|
|
49
92
|
return sql
|
|
50
93
|
.exec(`SELECT seq, tx_id, original, snapshot FROM "${TX_MANIFEST_TABLE}" WHERE tx_id = ? ORDER BY seq`, txID)
|
|
@@ -98,6 +141,132 @@ function parentFirst(sql, rows) {
|
|
|
98
141
|
ordered.push(row);
|
|
99
142
|
return ordered;
|
|
100
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Capture the application schema before the first DDL statement and the data
|
|
146
|
+
* of each table that a later DDL statement can destructively change. SQLite
|
|
147
|
+
* can transact DDL, but the DO protocol spans requests, so rollback needs an
|
|
148
|
+
* explicit durable image. The caller must wrap this in one storage transaction.
|
|
149
|
+
*/
|
|
150
|
+
export function snapshotTxSchema(sql, txID, owner = 'default', affectedTables = []) {
|
|
151
|
+
sql.exec(TX_SCHEMA_DDL);
|
|
152
|
+
const exists = sql
|
|
153
|
+
.exec(`SELECT 1 AS ok FROM "${TX_SCHEMA_TABLE}" WHERE tx_id = ? LIMIT 1`, txID)
|
|
154
|
+
.toArray();
|
|
155
|
+
if (exists.length === 0) {
|
|
156
|
+
const objects = sql
|
|
157
|
+
.exec('SELECT type, name, tbl_name, sql FROM sqlite_master ' +
|
|
158
|
+
"WHERE type IN ('table', 'index', 'trigger', 'view') AND sql IS NOT NULL " +
|
|
159
|
+
'ORDER BY rowid')
|
|
160
|
+
.toArray()
|
|
161
|
+
.map((row) => ({
|
|
162
|
+
type: String(row.type ?? ''),
|
|
163
|
+
name: String(row.name ?? ''),
|
|
164
|
+
table: String(row.tbl_name ?? ''),
|
|
165
|
+
sql: String(row.sql ?? ''),
|
|
166
|
+
}))
|
|
167
|
+
.filter((row) => row.name && !isInternalObject(row.name));
|
|
168
|
+
// A marker makes even an empty pre-transaction schema recoverable after a
|
|
169
|
+
// kill between CREATE TABLE and the client COMMIT/ROLLBACK.
|
|
170
|
+
sql.exec(`INSERT INTO "${TX_SCHEMA_TABLE}" (tx_id, owner, type, name, tbl_name, sql) VALUES (?, ?, 'marker', '', '', NULL)`, txID, owner);
|
|
171
|
+
for (const object of objects) {
|
|
172
|
+
sql.exec(`INSERT INTO "${TX_SCHEMA_TABLE}" (tx_id, owner, type, name, tbl_name, sql) VALUES (?, ?, ?, ?, ?, ?)`, txID, owner, object.type, object.name, object.table, object.sql);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
for (const table of new Set(affectedTables)) {
|
|
176
|
+
if (!table || isInternalObject(table))
|
|
177
|
+
continue;
|
|
178
|
+
const tableExists = sql
|
|
179
|
+
.exec("SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ? LIMIT 1", table)
|
|
180
|
+
.toArray();
|
|
181
|
+
if (tableExists.length > 0)
|
|
182
|
+
upgradeToTableSnapshot(sql, txID, table, owner);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function restoreSchemaSnapshot(sql, txID, schema, manifest) {
|
|
186
|
+
const current = sql
|
|
187
|
+
.exec('SELECT type, name, tbl_name, sql FROM sqlite_master ' +
|
|
188
|
+
"WHERE type IN ('table', 'index', 'trigger', 'view') AND sql IS NOT NULL " +
|
|
189
|
+
'ORDER BY rowid DESC')
|
|
190
|
+
.toArray()
|
|
191
|
+
.map((row) => ({
|
|
192
|
+
type: String(row.type ?? ''),
|
|
193
|
+
name: String(row.name ?? ''),
|
|
194
|
+
table: String(row.tbl_name ?? ''),
|
|
195
|
+
sql: String(row.sql ?? ''),
|
|
196
|
+
}))
|
|
197
|
+
.filter((row) => row.name && !isInternalObject(row.name));
|
|
198
|
+
const original = schema.filter((row) => row.type !== 'marker' && row.sql);
|
|
199
|
+
const key = (row) => `${row.type}\0${row.name}`;
|
|
200
|
+
const originalByKey = new Map(original.map((row) => [key(row), row]));
|
|
201
|
+
const currentByKey = new Map(current.map((row) => [key(row), row]));
|
|
202
|
+
const originalTables = original.filter((row) => row.type === 'table');
|
|
203
|
+
const currentTables = current.filter((row) => row.type === 'table');
|
|
204
|
+
const changedOriginalTables = new Set(originalTables
|
|
205
|
+
.filter((row) => currentByKey.get(key(row))?.sql !== row.sql)
|
|
206
|
+
.map((row) => row.name));
|
|
207
|
+
const createdTables = new Set(currentTables.filter((row) => !originalByKey.has(key(row))).map((row) => row.name));
|
|
208
|
+
const tablesToDrop = new Set([...changedOriginalTables, ...createdTables]);
|
|
209
|
+
const snapshotByTable = new Map(manifest
|
|
210
|
+
.filter((row) => row.snapshot)
|
|
211
|
+
.map((row) => [row.original, row.snapshot]));
|
|
212
|
+
for (const table of changedOriginalTables) {
|
|
213
|
+
if (!snapshotByTable.has(table)) {
|
|
214
|
+
throw new Error(`transactional DDL rollback is missing table snapshot: ${table}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
sql.exec('PRAGMA defer_foreign_keys = ON');
|
|
218
|
+
const changedCurrentObject = (object) => {
|
|
219
|
+
const before = originalByKey.get(key(object));
|
|
220
|
+
return !before || before.sql !== object.sql || tablesToDrop.has(object.table);
|
|
221
|
+
};
|
|
222
|
+
// Views can depend on tables. Indexes and triggers disappear with their
|
|
223
|
+
// table, while changed standalone objects are explicitly removed.
|
|
224
|
+
for (const object of current.filter((object) => object.type === 'view' && changedCurrentObject(object))) {
|
|
225
|
+
sql.exec(`DROP VIEW IF EXISTS ${quoteIdent(object.name)}`);
|
|
226
|
+
}
|
|
227
|
+
for (const object of current.filter((object) => object.type === 'trigger' && changedCurrentObject(object))) {
|
|
228
|
+
sql.exec(`DROP TRIGGER IF EXISTS ${quoteIdent(object.name)}`);
|
|
229
|
+
}
|
|
230
|
+
for (const object of current.filter((object) => object.type === 'index' && changedCurrentObject(object))) {
|
|
231
|
+
sql.exec(`DROP INDEX IF EXISTS ${quoteIdent(object.name)}`);
|
|
232
|
+
}
|
|
233
|
+
for (const table of tablesToDrop)
|
|
234
|
+
sql.exec(`DROP TABLE IF EXISTS ${quoteIdent(table)}`);
|
|
235
|
+
const tables = originalTables.filter((row) => changedOriginalTables.has(row.name));
|
|
236
|
+
for (const row of tables)
|
|
237
|
+
sql.exec(row.sql);
|
|
238
|
+
for (const row of tables) {
|
|
239
|
+
const snapshot = snapshotByTable.get(row.name);
|
|
240
|
+
const columns = writableColumns(sql, row.name);
|
|
241
|
+
if (columns.length > 0) {
|
|
242
|
+
const columnList = columns.map(quoteIdent).join(', ');
|
|
243
|
+
sql.exec(`INSERT INTO ${quoteIdent(row.name)} (${columnList}) SELECT ${columnList} FROM ${quoteIdent(snapshot)}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Restore secondary objects only after all table rows are back. This keeps
|
|
247
|
+
// business triggers from firing while the snapshot data is inserted.
|
|
248
|
+
for (const type of ['index', 'trigger', 'view']) {
|
|
249
|
+
for (const row of original.filter((item) => item.type === type)) {
|
|
250
|
+
const after = currentByKey.get(key(row));
|
|
251
|
+
if (!after || after.sql !== row.sql || changedOriginalTables.has(row.table)) {
|
|
252
|
+
sql.exec(row.sql);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Consume only the snapshots used for schema restoration. Any remaining
|
|
257
|
+
// manifest entries belong to ordinary DML in the same transaction and must
|
|
258
|
+
// still run through the row/table rollback path below.
|
|
259
|
+
if (manifestTableExists(sql)) {
|
|
260
|
+
for (const table of changedOriginalTables) {
|
|
261
|
+
const snapshot = snapshotByTable.get(table);
|
|
262
|
+
if (snapshot)
|
|
263
|
+
dropTable(sql, snapshot);
|
|
264
|
+
sql.exec(`DELETE FROM "${TX_MANIFEST_TABLE}" WHERE tx_id = ? AND original = ?`, txID, table);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
sql.exec(`DELETE FROM "${TX_SCHEMA_TABLE}" WHERE tx_id = ?`, txID);
|
|
268
|
+
rollbackTxJournal(sql, txID);
|
|
269
|
+
}
|
|
101
270
|
/**
|
|
102
271
|
* commit a journaled transaction: drop its snapshot tables and delete its
|
|
103
272
|
* manifest rows. the data writes were applied eagerly during the tx, so once
|
|
@@ -105,13 +274,16 @@ function parentFirst(sql, rows) {
|
|
|
105
274
|
* atomic storage transaction.
|
|
106
275
|
*/
|
|
107
276
|
export function commitTxJournal(sql, txID) {
|
|
108
|
-
if (
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
277
|
+
if (manifestTableExists(sql)) {
|
|
278
|
+
for (const row of manifestRows(sql, txID)) {
|
|
279
|
+
if (row.snapshot)
|
|
280
|
+
dropTable(sql, row.snapshot);
|
|
281
|
+
}
|
|
282
|
+
sql.exec(`DELETE FROM "${TX_MANIFEST_TABLE}" WHERE tx_id = ?`, txID);
|
|
283
|
+
}
|
|
284
|
+
if (schemaTableExists(sql)) {
|
|
285
|
+
sql.exec(`DELETE FROM "${TX_SCHEMA_TABLE}" WHERE tx_id = ?`, txID);
|
|
113
286
|
}
|
|
114
|
-
sql.exec(`DELETE FROM "${TX_MANIFEST_TABLE}" WHERE tx_id = ?`, txID);
|
|
115
287
|
}
|
|
116
288
|
/**
|
|
117
289
|
* roll back a journaled transaction: restore every snapshotted table to its
|
|
@@ -121,9 +293,12 @@ export function commitTxJournal(sql, txID) {
|
|
|
121
293
|
* re-fire change tracking. must run inside an atomic storage transaction.
|
|
122
294
|
*/
|
|
123
295
|
export function rollbackTxJournal(sql, txID) {
|
|
124
|
-
|
|
296
|
+
const schema = schemaRows(sql, txID);
|
|
297
|
+
const rows = manifestTableExists(sql) ? manifestRows(sql, txID).reverse() : [];
|
|
298
|
+
if (schema.length > 0) {
|
|
299
|
+
restoreSchemaSnapshot(sql, txID, schema, rows);
|
|
125
300
|
return;
|
|
126
|
-
|
|
301
|
+
}
|
|
127
302
|
if (rows.length === 0)
|
|
128
303
|
return;
|
|
129
304
|
const restoredTables = rows.filter((row) => row.snapshot).map((row) => row.original);
|
|
@@ -171,7 +346,7 @@ export function rollbackTxJournal(sql, txID) {
|
|
|
171
346
|
* replay. Safe to call repeatedly: only the first write to a table in a
|
|
172
347
|
* transaction takes the copy.
|
|
173
348
|
*/
|
|
174
|
-
export function upgradeToTableSnapshot(sql, txID, table) {
|
|
349
|
+
export function upgradeToTableSnapshot(sql, txID, table, owner = 'default') {
|
|
175
350
|
sql.exec(TX_MANIFEST_DDL);
|
|
176
351
|
const existing = sql
|
|
177
352
|
.exec(`SELECT seq, snapshot FROM "${TX_MANIFEST_TABLE}" WHERE tx_id = ? AND original = ? ORDER BY seq`, txID, table)
|
|
@@ -190,7 +365,7 @@ export function upgradeToTableSnapshot(sql, txID, table) {
|
|
|
190
365
|
const seq = existing.length > 0
|
|
191
366
|
? Number(existing[0].seq)
|
|
192
367
|
: Number(sql
|
|
193
|
-
.exec(`INSERT INTO "${TX_MANIFEST_TABLE}" (tx_id, owner, original, snapshot) VALUES (?,
|
|
368
|
+
.exec(`INSERT INTO "${TX_MANIFEST_TABLE}" (tx_id, owner, original, snapshot) VALUES (?, ?, ?, '') RETURNING seq`, txID, owner, table)
|
|
194
369
|
.toArray()[0]?.seq);
|
|
195
370
|
const snapshot = `_orez_tx_undo_${seq}`;
|
|
196
371
|
sql.exec(`DROP TABLE IF EXISTS ${quoteIdent(snapshot)}`);
|
|
@@ -246,18 +421,23 @@ export function snapshotSideEffectWriteTables(sql, txID, sourceTable) {
|
|
|
246
421
|
*/
|
|
247
422
|
export function recoverTxJournal(sql, owner, beforeRollback) {
|
|
248
423
|
const recovered = [];
|
|
249
|
-
|
|
424
|
+
const transactionIDs = new Set();
|
|
425
|
+
for (const table of [TX_MANIFEST_TABLE, TX_SCHEMA_TABLE]) {
|
|
426
|
+
const exists = table === TX_MANIFEST_TABLE ? manifestTableExists(sql) : schemaTableExists(sql);
|
|
427
|
+
if (!exists)
|
|
428
|
+
continue;
|
|
250
429
|
const txRows = owner === undefined
|
|
251
|
-
? sql.exec(`SELECT DISTINCT tx_id FROM
|
|
430
|
+
? sql.exec(`SELECT DISTINCT tx_id FROM ${quoteIdent(table)}`).toArray()
|
|
252
431
|
: sql
|
|
253
|
-
.exec(`SELECT DISTINCT tx_id FROM
|
|
432
|
+
.exec(`SELECT DISTINCT tx_id FROM ${quoteIdent(table)} WHERE owner = ?`, owner)
|
|
254
433
|
.toArray();
|
|
255
|
-
for (const row of txRows)
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
434
|
+
for (const row of txRows)
|
|
435
|
+
transactionIDs.add(String(row.tx_id));
|
|
436
|
+
}
|
|
437
|
+
for (const txID of transactionIDs) {
|
|
438
|
+
beforeRollback?.(txID);
|
|
439
|
+
rollbackTxJournal(sql, txID);
|
|
440
|
+
recovered.push(txID);
|
|
261
441
|
}
|
|
262
442
|
// sweep snapshot tables nothing references: pre-journal leftovers from a
|
|
263
443
|
// killed tx. live transactions (any owner) are protected by their manifest
|
|
@@ -272,7 +452,7 @@ export function recoverTxJournal(sql, owner, beforeRollback) {
|
|
|
272
452
|
.exec("SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '\\_orez\\_tx\\_%' ESCAPE '\\' AND name != ?", TX_MANIFEST_TABLE)
|
|
273
453
|
.toArray()
|
|
274
454
|
.map((row) => String(row.name))
|
|
275
|
-
.filter((name) => !referenced.has(name));
|
|
455
|
+
.filter((name) => name !== TX_SCHEMA_TABLE && !referenced.has(name));
|
|
276
456
|
for (const name of orphanTables)
|
|
277
457
|
dropTable(sql, name);
|
|
278
458
|
return recovered;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-journal.js","sourceRoot":"","sources":["../../src/cf-do/tx-journal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tx-journal.js","sourceRoot":"","sources":["../../src/cf-do/tx-journal.ts"],"names":[],"mappings":"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"}
|
package/dist/cf-do/worker.d.ts
CHANGED
|
@@ -61,6 +61,7 @@ export declare class ZeroDO extends DurableObject {
|
|
|
61
61
|
* manifest rows are gone (committed) or recovery rolls the tx back.
|
|
62
62
|
*/
|
|
63
63
|
private handleCommitTransaction;
|
|
64
|
+
private handleSnapshotTransactionSchema;
|
|
64
65
|
private handleRollbackTransaction;
|
|
65
66
|
/**
|
|
66
67
|
* roll back orphaned transactions for a dead process generation. callers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cf-do/worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cf-do/worker.ts"],"names":[],"mappings":"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"}
|
package/dist/cf-do/worker.js
CHANGED
|
@@ -3,7 +3,7 @@ import { DurableObject } from 'cloudflare:workers';
|
|
|
3
3
|
import { isSqlMutation, isSqlRowMutation, RollingRowWriteBudget, trackSqlCursorRowsWritten, trackedChangeRow, WriteBudgetExceededError, } from '../do-sql-tracking.js';
|
|
4
4
|
import { TransactionalCdc, } from './cdc.js';
|
|
5
5
|
import { appendPendingChange, deletePendingChanges, ensurePendingChangesTable, rollbackPendingChanges, } from './row-undo.js';
|
|
6
|
-
import { commitTxJournal, recoverTxJournal, rollbackTxJournal, snapshotSideEffectWriteTables, upgradeToTableSnapshot, } from './tx-journal.js';
|
|
6
|
+
import { commitTxJournal, recoverTxJournal, rollbackTxJournal, snapshotSideEffectWriteTables, snapshotTxSchema, upgradeToTableSnapshot, } from './tx-journal.js';
|
|
7
7
|
import { DurableWatermarkState } from './watermark.js';
|
|
8
8
|
const SCHEMA_VERSION = 1;
|
|
9
9
|
const SQL_ERROR_SNIPPET_RADIUS = 1600;
|
|
@@ -178,6 +178,8 @@ export class ZeroDO extends DurableObject {
|
|
|
178
178
|
return this.handleExec(request);
|
|
179
179
|
if (url.pathname === '/batch' && request.method === 'POST')
|
|
180
180
|
return this.handleBatch(request);
|
|
181
|
+
if (url.pathname === '/snapshot-tx-schema' && request.method === 'POST')
|
|
182
|
+
return this.handleSnapshotTransactionSchema(request);
|
|
181
183
|
if (url.pathname === '/commit-tx' && request.method === 'POST')
|
|
182
184
|
return this.handleCommitTransaction(request);
|
|
183
185
|
if (url.pathname === '/rollback-tx' && request.method === 'POST')
|
|
@@ -564,6 +566,26 @@ export class ZeroDO extends DurableObject {
|
|
|
564
566
|
this.activeWriteMeasurements = null;
|
|
565
567
|
}
|
|
566
568
|
}
|
|
569
|
+
async handleSnapshotTransactionSchema(request) {
|
|
570
|
+
try {
|
|
571
|
+
const body = (await request.json());
|
|
572
|
+
const transactionID = String(body.transactionID || '');
|
|
573
|
+
if (!transactionID)
|
|
574
|
+
throw new Error('missing transactionID');
|
|
575
|
+
const owner = body.owner === undefined ? 'default' : String(body.owner);
|
|
576
|
+
const affectedTables = Array.isArray(body.affectedTables)
|
|
577
|
+
? body.affectedTables.map(String)
|
|
578
|
+
: [];
|
|
579
|
+
await this.atomically(() => snapshotTxSchema(this.sql, transactionID, owner, affectedTables));
|
|
580
|
+
return Response.json({ ok: true });
|
|
581
|
+
}
|
|
582
|
+
catch (err) {
|
|
583
|
+
const budgetResponse = await this.writeBudgetErrorResponse(err);
|
|
584
|
+
if (budgetResponse)
|
|
585
|
+
return budgetResponse;
|
|
586
|
+
return Response.json({ error: err.message }, { status: 500 });
|
|
587
|
+
}
|
|
588
|
+
}
|
|
567
589
|
async handleRollbackTransaction(request) {
|
|
568
590
|
const measurements = this.startWriteMeasurement(request);
|
|
569
591
|
try {
|
|
@@ -576,6 +598,7 @@ export class ZeroDO extends DurableObject {
|
|
|
576
598
|
rollbackTxJournal(this.sql, transactionID);
|
|
577
599
|
return this.deletePendingTrackedChanges(transactionID);
|
|
578
600
|
});
|
|
601
|
+
this.invalidateSchemaCaches();
|
|
579
602
|
return Response.json({
|
|
580
603
|
ok: true,
|
|
581
604
|
count,
|
|
@@ -610,6 +633,7 @@ export class ZeroDO extends DurableObject {
|
|
|
610
633
|
this.deletePendingTrackedChanges(txID);
|
|
611
634
|
return recovered;
|
|
612
635
|
});
|
|
636
|
+
this.invalidateSchemaCaches();
|
|
613
637
|
return Response.json({ ok: true, transactionIDs });
|
|
614
638
|
}
|
|
615
639
|
catch (err) {
|