orez 0.2.31 → 0.2.33
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/worker.d.ts +4 -0
- package/dist/cf-do/worker.d.ts.map +1 -1
- package/dist/cf-do/worker.js +45 -0
- package/dist/cf-do/worker.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83 -71
- package/dist/index.js.map +1 -1
- package/dist/pg-proxy-do-backend.d.ts.map +1 -1
- package/dist/pg-proxy-do-backend.js +151 -18
- package/dist/pg-proxy-do-backend.js.map +1 -1
- package/dist/recovery.d.ts +7 -9
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +29 -30
- package/dist/recovery.js.map +1 -1
- package/package.json +2 -2
package/dist/recovery.d.ts
CHANGED
|
@@ -23,16 +23,14 @@ export interface RecoveryContext {
|
|
|
23
23
|
*/
|
|
24
24
|
export declare function hasCdcCorruptionSignature(details: string): boolean;
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
26
|
+
* detect zero-cache state mismatches between the replica, CVR DB, and change DB.
|
|
27
|
+
* these are not application-level Zero errors; they mean orez's local dev cache
|
|
28
|
+
* state must be rebuilt as one consistency domain.
|
|
28
29
|
*/
|
|
29
|
-
export declare function
|
|
30
|
+
export declare function hasZeroStateInconsistencySignature(details: string): boolean;
|
|
30
31
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* leaving stale watermarks in the changeLog table.
|
|
34
|
-
*
|
|
35
|
-
* in dev mode, it's safe to drop all CDC schemas - zero-cache will recreate them.
|
|
32
|
+
* recover from zero-cache state corruption by resetting the CVR DB, change DB,
|
|
33
|
+
* local replica, and upstream zero bookkeeping together.
|
|
36
34
|
*/
|
|
37
|
-
export declare function
|
|
35
|
+
export declare function recoverZeroState(ctx: RecoveryContext): Promise<void>;
|
|
38
36
|
//# sourceMappingURL=recovery.d.ts.map
|
package/dist/recovery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IACvD,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAA;QAChB,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;IACD,gBAAgB,EAAE,YAAY,GAAG,IAAI,CAAA;CACtC;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAWlE;AAED
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IACvD,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAA;QAChB,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;IACD,gBAAgB,EAAE,YAAY,GAAG,IAAI,CAAA;CACtC;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAWlE;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAoB3E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyE1E"}
|
package/dist/recovery.js
CHANGED
|
@@ -26,12 +26,36 @@ export function hasCdcCorruptionSignature(details) {
|
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
* detect zero-cache state mismatches between the replica, CVR DB, and change DB.
|
|
30
|
+
* these are not application-level Zero errors; they mean orez's local dev cache
|
|
31
|
+
* state must be rebuilt as one consistency domain.
|
|
31
32
|
*/
|
|
32
|
-
export
|
|
33
|
+
export function hasZeroStateInconsistencySignature(details) {
|
|
34
|
+
if (!details)
|
|
35
|
+
return false;
|
|
36
|
+
if (details.includes('RowsVersionBehindError'))
|
|
37
|
+
return true;
|
|
38
|
+
if (details.includes('max attempts exceeded waiting for CVR'))
|
|
39
|
+
return true;
|
|
40
|
+
if (details.includes('replica db must be in wal2 mode'))
|
|
41
|
+
return true;
|
|
42
|
+
if (details.includes('Unable to read watermark from replica') &&
|
|
43
|
+
details.includes('_zero.replicationState')) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
if (details.includes('SqliteError: unable to open database file') ||
|
|
47
|
+
details.includes('SQLITE_CANTOPEN')) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* recover from zero-cache state corruption by resetting the CVR DB, change DB,
|
|
54
|
+
* local replica, and upstream zero bookkeeping together.
|
|
55
|
+
*/
|
|
56
|
+
export async function recoverZeroState(ctx) {
|
|
33
57
|
const { config, instances, zeroCacheProcess } = ctx;
|
|
34
|
-
log.orez('detected
|
|
58
|
+
log.orez('detected zero-cache state corruption, auto-recovering...');
|
|
35
59
|
// kill the failed zero-cache process
|
|
36
60
|
if (isChildProcessRunning(zeroCacheProcess)) {
|
|
37
61
|
if (zeroCacheProcess.pid)
|
|
@@ -95,31 +119,6 @@ export async function recoverFromCdcCorruption(ctx) {
|
|
|
95
119
|
for (const { schemaname } of shardSchemas.rows) {
|
|
96
120
|
await db.exec(`DROP SCHEMA IF EXISTS "${schemaname.replace(/"/g, '""')}" CASCADE`);
|
|
97
121
|
}
|
|
98
|
-
log.orez('
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* proactively clean CDC state on startup to prevent duplicate key errors.
|
|
102
|
-
* this handles cases where orez was killed (SIGKILL) mid-transaction,
|
|
103
|
-
* leaving stale watermarks in the changeLog table.
|
|
104
|
-
*
|
|
105
|
-
* in dev mode, it's safe to drop all CDC schemas - zero-cache will recreate them.
|
|
106
|
-
*/
|
|
107
|
-
export async function cleanCdcStateOnStartup(cdb) {
|
|
108
|
-
try {
|
|
109
|
-
// find all CDC schemas (e.g. chat_0/cdc, startchat_0/cdc)
|
|
110
|
-
const result = await cdb.query(`SELECT nspname FROM pg_namespace WHERE nspname LIKE '%/cdc'`);
|
|
111
|
-
if (result.rows.length === 0) {
|
|
112
|
-
return; // no CDC schemas to clean
|
|
113
|
-
}
|
|
114
|
-
for (const { nspname } of result.rows) {
|
|
115
|
-
const quoted = '"' + nspname.replace(/"/g, '""') + '"';
|
|
116
|
-
await cdb.exec(`DROP SCHEMA IF EXISTS ${quoted} CASCADE`);
|
|
117
|
-
}
|
|
118
|
-
log.debug.orez(`cleaned ${result.rows.length} CDC schema(s) on startup`);
|
|
119
|
-
}
|
|
120
|
-
catch (err) {
|
|
121
|
-
// non-fatal - zero-cache might still work
|
|
122
|
-
log.debug.orez(`CDC cleanup warning: ${err?.message || err}`);
|
|
123
|
-
}
|
|
122
|
+
log.orez('zero-cache state recovery complete');
|
|
124
123
|
}
|
|
125
124
|
//# sourceMappingURL=recovery.js.map
|
package/dist/recovery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,uBAAuB,GACxB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAexD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACvD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,0DAA0D;IAC1D,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAA;IACb,CAAC;IACD,uCAAuC;IACvC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orez",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.33",
|
|
4
4
|
"description": "PGlite-powered zero-sync development backend. No Docker required.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"@electric-sql/pglite": "0.4.1",
|
|
88
88
|
"@electric-sql/pglite-tools": "^0.3.1",
|
|
89
89
|
"@pgsql/traverse": "17.2.6",
|
|
90
|
-
"bedrock-sqlite": "0.2.
|
|
90
|
+
"bedrock-sqlite": "0.2.32",
|
|
91
91
|
"citty": "^0.2.0",
|
|
92
92
|
"pg-gateway": "0.3.0-beta.4",
|
|
93
93
|
"pgsql-parser": "^17.9.11",
|