@powersync/service-core 1.20.5 → 1.21.0
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/CHANGELOG.md +35 -0
- package/dist/api/RouteAPI.d.ts +3 -3
- package/dist/api/diagnostics.d.ts +1 -1
- package/dist/api/diagnostics.js +18 -2
- package/dist/api/diagnostics.js.map +1 -1
- package/dist/entry/commands/teardown-action.js +1 -1
- package/dist/entry/commands/teardown-action.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/AbstractModule.d.ts +1 -1
- package/dist/replication/AbstractReplicationJob.js +1 -1
- package/dist/replication/AbstractReplicationJob.js.map +1 -1
- package/dist/replication/AbstractReplicator.d.ts +6 -6
- package/dist/replication/AbstractReplicator.js +21 -21
- package/dist/replication/AbstractReplicator.js.map +1 -1
- package/dist/routes/endpoints/admin.js +7 -3
- package/dist/routes/endpoints/admin.js.map +1 -1
- package/dist/routes/endpoints/checkpointing.js +1 -1
- package/dist/routes/endpoints/checkpointing.js.map +1 -1
- package/dist/routes/endpoints/socket-route.js +1 -1
- package/dist/routes/endpoints/socket-route.js.map +1 -1
- package/dist/routes/endpoints/sync-rules.js +7 -7
- package/dist/routes/endpoints/sync-rules.js.map +1 -1
- package/dist/routes/endpoints/sync-stream.js +2 -2
- package/dist/routes/endpoints/sync-stream.js.map +1 -1
- package/dist/runner/teardown.js +4 -4
- package/dist/runner/teardown.js.map +1 -1
- package/dist/storage/BucketStorage.d.ts +9 -9
- package/dist/storage/BucketStorage.js +9 -9
- package/dist/storage/BucketStorageFactory.d.ts +23 -18
- package/dist/storage/BucketStorageFactory.js +12 -11
- package/dist/storage/BucketStorageFactory.js.map +1 -1
- package/dist/storage/PersistedSyncRulesContent.d.ts +3 -1
- package/dist/storage/PersistedSyncRulesContent.js +10 -3
- package/dist/storage/PersistedSyncRulesContent.js.map +1 -1
- package/dist/storage/SourceTable.d.ts +3 -3
- package/dist/storage/SourceTable.js +3 -3
- package/dist/storage/StorageVersionConfig.d.ts +1 -1
- package/dist/storage/StorageVersionConfig.js +1 -1
- package/dist/storage/SyncRulesBucketStorage.d.ts +38 -6
- package/dist/storage/SyncRulesBucketStorage.js +14 -0
- package/dist/storage/SyncRulesBucketStorage.js.map +1 -1
- package/dist/storage/WriteCheckpointAPI.d.ts +6 -6
- package/dist/storage/WriteCheckpointAPI.js +1 -1
- package/dist/storage/bson.d.ts +0 -1
- package/dist/storage/bson.js +0 -4
- package/dist/storage/bson.js.map +1 -1
- package/dist/sync/BucketChecksumState.d.ts +2 -5
- package/dist/sync/BucketChecksumState.js +116 -57
- package/dist/sync/BucketChecksumState.js.map +1 -1
- package/dist/tracing/PerformanceTracer.d.ts +44 -0
- package/dist/tracing/PerformanceTracer.js +102 -0
- package/dist/tracing/PerformanceTracer.js.map +1 -0
- package/dist/tracing/TraceWriter.d.ts +22 -0
- package/dist/tracing/TraceWriter.js +63 -0
- package/dist/tracing/TraceWriter.js.map +1 -0
- package/dist/util/checkpointing.js +1 -1
- package/dist/util/config/compound-config-collector.d.ts +1 -1
- package/dist/util/config/compound-config-collector.js +2 -2
- package/dist/util/config/compound-config-collector.js.map +1 -1
- package/dist/util/config/sync-rules/impl/filesystem-sync-rules-collector.js +1 -1
- package/dist/util/config/sync-rules/impl/filesystem-sync-rules-collector.js.map +1 -1
- package/dist/util/env.js +1 -1
- package/dist/util/protocol-types.d.ts +1 -1
- package/dist/util/protocol-types.js +1 -1
- package/package.json +11 -11
- package/src/api/RouteAPI.ts +3 -3
- package/src/api/diagnostics.ts +26 -3
- package/src/entry/commands/teardown-action.ts +1 -1
- package/src/index.ts +2 -0
- package/src/modules/AbstractModule.ts +1 -1
- package/src/replication/AbstractReplicationJob.ts +1 -1
- package/src/replication/AbstractReplicator.ts +23 -23
- package/src/routes/endpoints/admin.ts +7 -3
- package/src/routes/endpoints/checkpointing.ts +1 -1
- package/src/routes/endpoints/socket-route.ts +1 -1
- package/src/routes/endpoints/sync-rules.ts +7 -7
- package/src/routes/endpoints/sync-stream.ts +2 -2
- package/src/runner/teardown.ts +4 -4
- package/src/storage/BucketStorage.ts +9 -9
- package/src/storage/BucketStorageFactory.ts +29 -22
- package/src/storage/PersistedSyncRulesContent.ts +12 -4
- package/src/storage/SourceTable.ts +3 -3
- package/src/storage/StorageVersionConfig.ts +1 -1
- package/src/storage/SyncRulesBucketStorage.ts +46 -7
- package/src/storage/WriteCheckpointAPI.ts +6 -6
- package/src/storage/bson.ts +0 -5
- package/src/sync/BucketChecksumState.ts +137 -73
- package/src/sync/sync.ts +1 -1
- package/src/tracing/PerformanceTracer.ts +126 -0
- package/src/tracing/TraceWriter.ts +67 -0
- package/src/util/checkpointing.ts +1 -1
- package/src/util/config/compound-config-collector.ts +3 -3
- package/src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts +1 -1
- package/src/util/env.ts +1 -1
- package/src/util/protocol-types.ts +1 -1
- package/test/src/auth.test.ts +109 -1
- package/test/src/diagnostics.test.ts +151 -0
- package/test/src/sync/BucketChecksumState.test.ts +221 -65
- package/test/tsconfig.json +0 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface Span extends Disposable {
|
|
2
|
+
name: string;
|
|
3
|
+
startAt: number;
|
|
4
|
+
endAt: number;
|
|
5
|
+
selfDuration: number;
|
|
6
|
+
nestedSince: number | undefined;
|
|
7
|
+
subtrackFromSelf: number;
|
|
8
|
+
nestedDurations: Record<string, number>;
|
|
9
|
+
/**
|
|
10
|
+
* End the span - same as [Symbol.dispose]().
|
|
11
|
+
*
|
|
12
|
+
* Safe to call multiple times. Any nested spans will automatically end as well.
|
|
13
|
+
*
|
|
14
|
+
* Returns an aggregate record of category -> "selfDuration".
|
|
15
|
+
*/
|
|
16
|
+
end(): Record<string, number>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Lightweight tracing helper, with two main goals:
|
|
20
|
+
* 1. Generate aggregate timing info with low overhead.
|
|
21
|
+
* 2. Optional support for generating trace files during development.
|
|
22
|
+
*
|
|
23
|
+
* This is only intended for a single "thread" - concurrent operations on the same instance have undefined behavior.
|
|
24
|
+
* To trace concurrent operations, use separate instances of PerformanceTracer.
|
|
25
|
+
*
|
|
26
|
+
* Spans cannot be overlapping: If a parent span is ended, all nested spans are automatically ended.
|
|
27
|
+
*/
|
|
28
|
+
export declare class PerformanceTracer<K extends string> {
|
|
29
|
+
stack: Span[];
|
|
30
|
+
threadId: number;
|
|
31
|
+
constructor(traceName: string);
|
|
32
|
+
/**
|
|
33
|
+
* Recommended usage:
|
|
34
|
+
*
|
|
35
|
+
* using _ = tracer.span('cat', 'details');
|
|
36
|
+
*
|
|
37
|
+
* The above automatically ends the span when it goes out of scope. Alternatively, call
|
|
38
|
+
* .end() on the span to end it earlier.
|
|
39
|
+
*
|
|
40
|
+
* @param category one of the defined categories
|
|
41
|
+
* @param subcat optional subcategory. Not used for calculating "self" durations in the aggregate API.
|
|
42
|
+
*/
|
|
43
|
+
span(category: K, subcat?: string): Span;
|
|
44
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { traceWriter } from './TraceWriter.js';
|
|
2
|
+
function now() {
|
|
3
|
+
return Number(process.hrtime.bigint() / 1000n);
|
|
4
|
+
}
|
|
5
|
+
let nextThreadId = 1;
|
|
6
|
+
/**
|
|
7
|
+
* Lightweight tracing helper, with two main goals:
|
|
8
|
+
* 1. Generate aggregate timing info with low overhead.
|
|
9
|
+
* 2. Optional support for generating trace files during development.
|
|
10
|
+
*
|
|
11
|
+
* This is only intended for a single "thread" - concurrent operations on the same instance have undefined behavior.
|
|
12
|
+
* To trace concurrent operations, use separate instances of PerformanceTracer.
|
|
13
|
+
*
|
|
14
|
+
* Spans cannot be overlapping: If a parent span is ended, all nested spans are automatically ended.
|
|
15
|
+
*/
|
|
16
|
+
export class PerformanceTracer {
|
|
17
|
+
stack = [];
|
|
18
|
+
threadId;
|
|
19
|
+
constructor(traceName) {
|
|
20
|
+
this.threadId = nextThreadId;
|
|
21
|
+
nextThreadId += 1;
|
|
22
|
+
traceWriter?.write({
|
|
23
|
+
ph: 'M',
|
|
24
|
+
cat: '__metadata',
|
|
25
|
+
name: 'thread_name',
|
|
26
|
+
pid: process.pid,
|
|
27
|
+
tid: this.threadId,
|
|
28
|
+
args: { name: `PowerSync ${traceName}` }
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Recommended usage:
|
|
33
|
+
*
|
|
34
|
+
* using _ = tracer.span('cat', 'details');
|
|
35
|
+
*
|
|
36
|
+
* The above automatically ends the span when it goes out of scope. Alternatively, call
|
|
37
|
+
* .end() on the span to end it earlier.
|
|
38
|
+
*
|
|
39
|
+
* @param category one of the defined categories
|
|
40
|
+
* @param subcat optional subcategory. Not used for calculating "self" durations in the aggregate API.
|
|
41
|
+
*/
|
|
42
|
+
span(category, subcat) {
|
|
43
|
+
const stack = this.stack;
|
|
44
|
+
const index = this.stack.length;
|
|
45
|
+
const parent = this.stack[this.stack.length - 1];
|
|
46
|
+
const threadId = this.threadId;
|
|
47
|
+
const startAt = now();
|
|
48
|
+
if (parent != null) {
|
|
49
|
+
parent.nestedSince ??= startAt;
|
|
50
|
+
}
|
|
51
|
+
let name = category;
|
|
52
|
+
if (subcat) {
|
|
53
|
+
name += ':' + subcat;
|
|
54
|
+
}
|
|
55
|
+
const s = {
|
|
56
|
+
name,
|
|
57
|
+
startAt: now(),
|
|
58
|
+
selfDuration: 0,
|
|
59
|
+
endAt: 0,
|
|
60
|
+
nestedSince: undefined,
|
|
61
|
+
subtrackFromSelf: 0,
|
|
62
|
+
nestedDurations: {},
|
|
63
|
+
end() {
|
|
64
|
+
if (this.endAt != 0) {
|
|
65
|
+
return this.nestedDurations;
|
|
66
|
+
}
|
|
67
|
+
while (stack.length - 1 > index) {
|
|
68
|
+
stack[stack.length - 1].end();
|
|
69
|
+
}
|
|
70
|
+
const endAt = now();
|
|
71
|
+
this.endAt = endAt;
|
|
72
|
+
const endTime = this.nestedSince ?? endAt;
|
|
73
|
+
this.selfDuration = endTime - startAt - this.subtrackFromSelf;
|
|
74
|
+
traceWriter?.write({
|
|
75
|
+
name,
|
|
76
|
+
cat: 'powersync',
|
|
77
|
+
ph: 'X',
|
|
78
|
+
ts: this.startAt,
|
|
79
|
+
dur: endAt - startAt,
|
|
80
|
+
pid: process.pid,
|
|
81
|
+
tid: threadId
|
|
82
|
+
});
|
|
83
|
+
stack.pop();
|
|
84
|
+
if (parent != null) {
|
|
85
|
+
parent.subtrackFromSelf += endAt - parent.nestedSince;
|
|
86
|
+
for (let key in this.nestedDurations) {
|
|
87
|
+
parent.nestedDurations[key] = (parent.nestedDurations[key] ?? 0) + this.nestedDurations[key];
|
|
88
|
+
}
|
|
89
|
+
parent.nestedDurations[category] = (parent.nestedDurations[category] ?? 0) + this.selfDuration;
|
|
90
|
+
parent.nestedSince = undefined;
|
|
91
|
+
}
|
|
92
|
+
return this.nestedDurations;
|
|
93
|
+
},
|
|
94
|
+
[Symbol.dispose]() {
|
|
95
|
+
this.end();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
this.stack.push(s);
|
|
99
|
+
return s;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=PerformanceTracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformanceTracer.js","sourceRoot":"","sources":["../../src/tracing/PerformanceTracer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
/**
|
|
3
|
+
* Write traces in the Chrome JSON Trace Format.
|
|
4
|
+
*
|
|
5
|
+
* View at https://ui.perfetto.dev/
|
|
6
|
+
*/
|
|
7
|
+
declare class TraceWriter {
|
|
8
|
+
readonly path: string;
|
|
9
|
+
handle: fs.FileHandle | null;
|
|
10
|
+
length: number;
|
|
11
|
+
queue: any[];
|
|
12
|
+
private mutex;
|
|
13
|
+
constructor(path: string);
|
|
14
|
+
open(): Promise<void>;
|
|
15
|
+
write(...traceEvents: any[]): void;
|
|
16
|
+
writeAsync(...traceEvents: any[]): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* traceWriter, only present if POWERSYNC_TRACE_FILE env var is configured.
|
|
20
|
+
*/
|
|
21
|
+
export declare const traceWriter: TraceWriter | null;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Mutex } from 'async-mutex';
|
|
2
|
+
import * as fs from 'node:fs/promises';
|
|
3
|
+
/**
|
|
4
|
+
* Write traces in the Chrome JSON Trace Format.
|
|
5
|
+
*
|
|
6
|
+
* View at https://ui.perfetto.dev/
|
|
7
|
+
*/
|
|
8
|
+
class TraceWriter {
|
|
9
|
+
path;
|
|
10
|
+
handle = null;
|
|
11
|
+
length = 0;
|
|
12
|
+
queue = [];
|
|
13
|
+
mutex = new Mutex();
|
|
14
|
+
constructor(path) {
|
|
15
|
+
this.path = path;
|
|
16
|
+
this.open().catch((e) => {
|
|
17
|
+
console.error(`Failed to open trace file at ${path}`, e);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async open() {
|
|
21
|
+
await this.mutex.runExclusive(async () => {
|
|
22
|
+
this.handle = await fs.open(this.path, 'w+');
|
|
23
|
+
this.handle.truncate(0);
|
|
24
|
+
await this.handle.write('[]');
|
|
25
|
+
this.length = 2;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
write(...traceEvents) {
|
|
29
|
+
this.writeAsync(...traceEvents).catch((e) => {
|
|
30
|
+
console.error(`Failed to write trace file`, e);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async writeAsync(...traceEvents) {
|
|
34
|
+
this.queue.push(...traceEvents);
|
|
35
|
+
await this.mutex.runExclusive(async () => {
|
|
36
|
+
if (this.queue.length > 0) {
|
|
37
|
+
// Write queued events.
|
|
38
|
+
// After each write, we end the file as a valid JSON array.
|
|
39
|
+
// On the next write, we overwrite the last character to extend the array.
|
|
40
|
+
const buffer = Buffer.from(JSON.stringify(this.queue));
|
|
41
|
+
await this.handle?.write(buffer, 1, buffer.length - 1, this.length - 1);
|
|
42
|
+
this.queue = [];
|
|
43
|
+
this.length += buffer.length - 2;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const traceFile = process.env.POWERSYNC_TRACE_FILE;
|
|
49
|
+
/**
|
|
50
|
+
* traceWriter, only present if POWERSYNC_TRACE_FILE env var is configured.
|
|
51
|
+
*/
|
|
52
|
+
export const traceWriter = traceFile ? new TraceWriter(traceFile) : null;
|
|
53
|
+
if (traceWriter) {
|
|
54
|
+
traceWriter.write({
|
|
55
|
+
ph: 'M',
|
|
56
|
+
cat: '__metadata',
|
|
57
|
+
name: 'process_name',
|
|
58
|
+
pid: process.pid,
|
|
59
|
+
tid: 1000,
|
|
60
|
+
args: { name: 'powersync' }
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=TraceWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraceWriter.js","sourceRoot":"","sources":["../../src/tracing/TraceWriter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC;;;;GAIG;AACH,MAAM,WAAW;IAMa;IAL5B,MAAM,GAAyB,IAAI,CAAC;IACpC,MAAM,GAAG,CAAC,CAAC;IACX,KAAK,GAAU,EAAE,CAAC;IACV,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAE5B,YAA4B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,gCAAgC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACvC,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,WAAkB;QACzB,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAG,WAAkB;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACvC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,uBAAuB;gBACvB,2DAA2D;gBAC3D,0EAA0E;gBAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvD,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AACnD;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEzE,IAAI,WAAW,EAAE,CAAC;IAChB,WAAW,CAAC,KAAK,CAAC;QAChB,EAAE,EAAE,GAAG;QACP,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KAC5B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -3,7 +3,7 @@ export async function createWriteCheckpoint(options) {
|
|
|
3
3
|
const full_user_id = checkpointUserId(options.userId, options.clientId);
|
|
4
4
|
const syncBucketStorage = await options.storage.getActiveStorage();
|
|
5
5
|
if (!syncBucketStorage) {
|
|
6
|
-
throw new ServiceError(ErrorCode.PSYNC_S2302, `Cannot create Write Checkpoint since no sync
|
|
6
|
+
throw new ServiceError(ErrorCode.PSYNC_S2302, `Cannot create Write Checkpoint since no sync config is active.`);
|
|
7
7
|
}
|
|
8
8
|
const { writeCheckpoint, currentCheckpoint } = await options.api.createReplicationHead(async (currentCheckpoint) => {
|
|
9
9
|
const writeCheckpoint = await syncBucketStorage.createManagedWriteCheckpoint({
|
|
@@ -10,7 +10,7 @@ export type CompoundConfigCollectorOptions = {
|
|
|
10
10
|
*/
|
|
11
11
|
configCollectors: ConfigCollector[];
|
|
12
12
|
/**
|
|
13
|
-
* Collectors for PowerSync sync
|
|
13
|
+
* Collectors for PowerSync sync config content.
|
|
14
14
|
* The configuration from first collector to provide a configuration
|
|
15
15
|
* is used. The order of the collectors specifies precedence
|
|
16
16
|
*/
|
|
@@ -173,11 +173,11 @@ export class CompoundConfigCollector {
|
|
|
173
173
|
if (config) {
|
|
174
174
|
return config;
|
|
175
175
|
}
|
|
176
|
-
logger.debug(`Could not collect sync
|
|
176
|
+
logger.debug(`Could not collect sync config with ${collector.name} method. Moving on to next method if available.`);
|
|
177
177
|
}
|
|
178
178
|
catch (ex) {
|
|
179
179
|
// An error in a collector is a hard stop
|
|
180
|
-
throw new Error(`Could not collect sync
|
|
180
|
+
throw new Error(`Could not collect sync config using ${collector.name} method. Caught exception: ${ex}`);
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
183
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compound-config-collector.js","sourceRoot":"","sources":["../../../src/util/config/compound-config-collector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"compound-config-collector.js","sourceRoot":"","sources":["../../../src/util/config/compound-config-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export class FileSystemSyncRulesCollector extends SyncRulesCollector {
|
|
|
10
10
|
return null;
|
|
11
11
|
}
|
|
12
12
|
const { config_path } = runnerConfig;
|
|
13
|
-
// Depending on the container, the sync
|
|
13
|
+
// Depending on the container, the sync config may not actually be present.
|
|
14
14
|
// Only persist the path here, and load on demand using `loadSyncRules()`.
|
|
15
15
|
return {
|
|
16
16
|
present: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,4BAA6B,SAAQ,kBAAkB;IAClE,IAAI,IAAI;QACN,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAsC,EAAE,YAA0B;QAC9E,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;QAErC,
|
|
1
|
+
{"version":3,"file":"filesystem-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,4BAA6B,SAAQ,kBAAkB;IAClE,IAAI,IAAI;QACN,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAsC,EAAE,YAA0B;QAC9E,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;QAErC,2EAA2E;QAC3E,0EAA0E;QAC1E,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,IAAI,IAAI;YAC5D,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;SACnF,CAAC;IACJ,CAAC;CACF"}
|
package/dist/util/env.js
CHANGED
|
@@ -11,7 +11,7 @@ export const env = utils.collectEnvironmentVariables({
|
|
|
11
11
|
POWERSYNC_CONFIG_B64: utils.type.string.optional(),
|
|
12
12
|
/**
|
|
13
13
|
* @deprecated use POWERSYNC_SYNC_CONFIG_B64 instead.
|
|
14
|
-
* Base64 encoded contents of sync
|
|
14
|
+
* Base64 encoded contents of sync config YAML
|
|
15
15
|
*/
|
|
16
16
|
POWERSYNC_SYNC_RULES_B64: utils.type.string.optional(),
|
|
17
17
|
/**
|
|
@@ -86,7 +86,7 @@ export declare const StreamingSyncRequest: t.ObjectCodec<{
|
|
|
86
86
|
*/
|
|
87
87
|
raw_data: t.OptionalCodec<t.Codec<boolean, boolean, string, t.CodecProps>>;
|
|
88
88
|
/**
|
|
89
|
-
* Client parameters to be passed to the sync
|
|
89
|
+
* Client parameters to be passed to the sync config.
|
|
90
90
|
*/
|
|
91
91
|
parameters: t.OptionalCodec<t.Codec<Record<string, any>, Record<string, any>, string, t.CodecProps>>;
|
|
92
92
|
/**
|
|
@@ -59,7 +59,7 @@ export const StreamingSyncRequest = t.object({
|
|
|
59
59
|
*/
|
|
60
60
|
raw_data: t.boolean.optional(),
|
|
61
61
|
/**
|
|
62
|
-
* Client parameters to be passed to the sync
|
|
62
|
+
* Client parameters to be passed to the sync config.
|
|
63
63
|
*/
|
|
64
64
|
parameters: t.record(t.any).optional(),
|
|
65
65
|
/**
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "1.
|
|
8
|
+
"version": "1.21.0",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"license": "FSL-1.1-ALv2",
|
|
11
11
|
"type": "module",
|
|
@@ -24,26 +24,26 @@
|
|
|
24
24
|
"ipaddr.js": "^2.1.0",
|
|
25
25
|
"ix": "^5.0.0",
|
|
26
26
|
"jose": "^4.15.1",
|
|
27
|
-
"lodash": "^4.
|
|
27
|
+
"lodash": "^4.18.1",
|
|
28
28
|
"lru-cache": "^10.2.2",
|
|
29
29
|
"negotiator": "^1.0.0",
|
|
30
30
|
"node-fetch": "^3.3.2",
|
|
31
31
|
"ts-codec": "^1.3.0",
|
|
32
32
|
"uri-js": "^4.4.1",
|
|
33
|
-
"uuid": "^
|
|
33
|
+
"uuid": "^14.0.0",
|
|
34
34
|
"winston": "^3.13.0",
|
|
35
|
-
"yaml": "^2.3
|
|
36
|
-
"@powersync/lib-services-framework": "0.9.
|
|
37
|
-
"@powersync/service-
|
|
38
|
-
"@powersync/service-
|
|
39
|
-
"@powersync/service-sync-rules": "0.
|
|
40
|
-
"@powersync/service-types": "0.15.
|
|
35
|
+
"yaml": "^2.8.3",
|
|
36
|
+
"@powersync/lib-services-framework": "0.9.4",
|
|
37
|
+
"@powersync/service-jsonbig": "0.17.13",
|
|
38
|
+
"@powersync/service-rsocket-router": "0.2.20",
|
|
39
|
+
"@powersync/service-sync-rules": "0.36.0",
|
|
40
|
+
"@powersync/service-types": "0.15.2"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/async": "^3.2.24",
|
|
44
|
-
"@types/negotiator": "^0.6.4",
|
|
45
44
|
"@types/lodash": "^4.17.5",
|
|
46
|
-
"
|
|
45
|
+
"@types/negotiator": "^0.6.4",
|
|
46
|
+
"fastify": "^5.8.5",
|
|
47
47
|
"fastify-plugin": "^5.0.1"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
package/src/api/RouteAPI.ts
CHANGED
|
@@ -43,7 +43,7 @@ export interface RouteAPI {
|
|
|
43
43
|
* Generates replication table information from a given pattern of tables.
|
|
44
44
|
*
|
|
45
45
|
* @param tablePatterns A set of table patterns which typically come from
|
|
46
|
-
* the tables listed in sync
|
|
46
|
+
* the tables listed in sync config definitions.
|
|
47
47
|
*
|
|
48
48
|
* @param sqlSyncRules
|
|
49
49
|
* @returns A result of all the tables and columns which should be replicated
|
|
@@ -76,7 +76,7 @@ export interface RouteAPI {
|
|
|
76
76
|
|
|
77
77
|
/**
|
|
78
78
|
* @returns The schema for tables inside the connected database. This is typically
|
|
79
|
-
* used to validate sync
|
|
79
|
+
* used to validate sync config.
|
|
80
80
|
*/
|
|
81
81
|
getConnectionSchema(): Promise<types.DatabaseSchema[]>;
|
|
82
82
|
|
|
@@ -92,7 +92,7 @@ export interface RouteAPI {
|
|
|
92
92
|
shutdown(): Promise<void>;
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
* Get the default schema (or database) when only a table name is specified in sync
|
|
95
|
+
* Get the default schema (or database) when only a table name is specified in sync config.
|
|
96
96
|
*/
|
|
97
97
|
getParseSyncRulesOptions(): ParseSyncRulesOptions;
|
|
98
98
|
}
|
package/src/api/diagnostics.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { RouteAPI, SlotWalBudgetInfo } from './RouteAPI.js';
|
|
|
8
8
|
|
|
9
9
|
export interface DiagnosticsOptions {
|
|
10
10
|
/**
|
|
11
|
-
* Include sync
|
|
11
|
+
* Include sync config content in response.
|
|
12
12
|
*/
|
|
13
13
|
include_content?: boolean;
|
|
14
14
|
|
|
@@ -90,7 +90,7 @@ export async function getSyncRulesStatus(
|
|
|
90
90
|
logger.warn(`Unable to get replication lag`, e);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
if (apiHandler.getSlotWalBudget) {
|
|
93
|
+
if (apiHandler.getSlotWalBudget && sync_rules.slot_name) {
|
|
94
94
|
try {
|
|
95
95
|
slot_wal_budget = await apiHandler.getSlotWalBudget({
|
|
96
96
|
slotName: sync_rules.slot_name
|
|
@@ -145,8 +145,31 @@ export async function getSyncRulesStatus(
|
|
|
145
145
|
}
|
|
146
146
|
errors.push(...syncRuleErrors.map((error) => syncConfigYamlErrorToReplicationError(error, now)));
|
|
147
147
|
|
|
148
|
+
if (
|
|
149
|
+
slot_wal_budget &&
|
|
150
|
+
slot_wal_budget.wal_status !== 'lost' &&
|
|
151
|
+
slot_wal_budget.safe_wal_size != null &&
|
|
152
|
+
slot_wal_budget.max_slot_wal_keep_size != null &&
|
|
153
|
+
slot_wal_budget.max_slot_wal_keep_size > 0
|
|
154
|
+
) {
|
|
155
|
+
const budgetPct = Math.max(
|
|
156
|
+
0,
|
|
157
|
+
Math.round((slot_wal_budget.safe_wal_size / slot_wal_budget.max_slot_wal_keep_size) * 100)
|
|
158
|
+
);
|
|
159
|
+
if (budgetPct <= 50) {
|
|
160
|
+
errors.push({
|
|
161
|
+
level: 'warning',
|
|
162
|
+
message:
|
|
163
|
+
`WAL budget is low: ${budgetPct}% remaining. ` +
|
|
164
|
+
`The replication slot may be invalidated if WAL consumption ` +
|
|
165
|
+
`continues at this rate. Consider increasing max_slot_wal_keep_size.`,
|
|
166
|
+
ts: now
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
148
171
|
if (live_status && status?.active) {
|
|
149
|
-
// Check replication lag for active
|
|
172
|
+
// Check replication lag for active replication stream.
|
|
150
173
|
// Right now we exclude mysql, since it we don't have consistent keepalives for it.
|
|
151
174
|
if (sync_rules.last_checkpoint_ts == null && sync_rules.last_keepalive_ts == null) {
|
|
152
175
|
errors.push({
|
|
@@ -13,7 +13,7 @@ export function registerTearDownAction(program: Command) {
|
|
|
13
13
|
|
|
14
14
|
return teardownCommand
|
|
15
15
|
.argument('[ack]', 'Type `TEARDOWN` to confirm teardown should occur')
|
|
16
|
-
.description('Terminate all replicating
|
|
16
|
+
.description('Terminate all replicating replication streams, clear remote configuration and remove all data')
|
|
17
17
|
.action(async (ack, options) => {
|
|
18
18
|
if (ack !== 'TEARDOWN') {
|
|
19
19
|
throw new ServiceError(ErrorCode.PSYNC_S0102, 'TEARDOWN was not acknowledged.');
|
package/src/index.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { ServiceContextContainer } from '../system/ServiceContext.js';
|
|
|
5
5
|
|
|
6
6
|
export interface TearDownOptions {
|
|
7
7
|
/**
|
|
8
|
-
* If required, tear down any configuration/state for the specific
|
|
8
|
+
* If required, tear down any configuration/state for the specific replication stream
|
|
9
9
|
*/
|
|
10
10
|
syncRules?: PersistedSyncRulesContent[];
|
|
11
11
|
}
|
|
@@ -54,7 +54,7 @@ export abstract class AbstractReplicationJob {
|
|
|
54
54
|
* Safely stop the replication process
|
|
55
55
|
*/
|
|
56
56
|
public async stop(): Promise<void> {
|
|
57
|
-
this.logger.info(`Stopping replication job
|
|
57
|
+
this.logger.info(`Stopping replication job`);
|
|
58
58
|
this.abortController.abort();
|
|
59
59
|
await this.isReplicatingPromise;
|
|
60
60
|
}
|