@powersync/service-module-postgres-storage 0.3.0 → 0.4.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 +26 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/@types/storage/PostgresBucketStorageFactory.d.ts +4 -8
- package/dist/@types/storage/PostgresSyncRulesStorage.d.ts +9 -3
- package/dist/@types/storage/batch/PostgresBucketBatch.d.ts +3 -2
- package/dist/storage/PostgresBucketStorageFactory.js +18 -134
- package/dist/storage/PostgresBucketStorageFactory.js.map +1 -1
- package/dist/storage/PostgresSyncRulesStorage.js +141 -90
- package/dist/storage/PostgresSyncRulesStorage.js.map +1 -1
- package/dist/storage/batch/PostgresBucketBatch.js +5 -2
- package/dist/storage/batch/PostgresBucketBatch.js.map +1 -1
- package/package.json +6 -6
- package/src/storage/PostgresBucketStorageFactory.ts +17 -152
- package/src/storage/PostgresSyncRulesStorage.ts +151 -4
- package/src/storage/batch/PostgresBucketBatch.ts +6 -2
- package/test/src/__snapshots__/storage_sync.test.ts.snap +82 -0
- package/test/src/storage.test.ts +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as framework from '@powersync/lib-services-framework';
|
|
2
|
-
import { storage, UpdateSyncRulesOptions } from '@powersync/service-core';
|
|
2
|
+
import { storage, SyncRulesBucketStorage, UpdateSyncRulesOptions } from '@powersync/service-core';
|
|
3
3
|
import * as pg_wire from '@powersync/service-jpgwire';
|
|
4
4
|
import * as lib_postgres from '@powersync/lib-service-postgres';
|
|
5
5
|
import { NormalizedPostgresStorageConfig } from '../types/types.js';
|
|
@@ -8,12 +8,11 @@ export type PostgresBucketStorageOptions = {
|
|
|
8
8
|
config: NormalizedPostgresStorageConfig;
|
|
9
9
|
slot_name_prefix: string;
|
|
10
10
|
};
|
|
11
|
-
export declare class PostgresBucketStorageFactory extends framework.
|
|
11
|
+
export declare class PostgresBucketStorageFactory extends framework.BaseObserver<storage.BucketStorageFactoryListener> implements storage.BucketStorageFactory {
|
|
12
12
|
protected options: PostgresBucketStorageOptions;
|
|
13
13
|
readonly db: lib_postgres.DatabaseClient;
|
|
14
14
|
readonly slot_name_prefix: string;
|
|
15
|
-
private
|
|
16
|
-
private readonly storageCache;
|
|
15
|
+
private activeStorageCache;
|
|
17
16
|
constructor(options: PostgresBucketStorageOptions);
|
|
18
17
|
[Symbol.asyncDispose](): Promise<void>;
|
|
19
18
|
prepareStatements(connection: pg_wire.PgConnection): Promise<void>;
|
|
@@ -34,8 +33,5 @@ export declare class PostgresBucketStorageFactory extends framework.DisposableOb
|
|
|
34
33
|
getNextSyncRulesContent(): Promise<storage.PersistedSyncRulesContent | null>;
|
|
35
34
|
getReplicatingSyncRules(): Promise<storage.PersistedSyncRulesContent[]>;
|
|
36
35
|
getStoppedSyncRules(): Promise<storage.PersistedSyncRulesContent[]>;
|
|
37
|
-
|
|
38
|
-
watchWriteCheckpoint(user_id: string, signal: AbortSignal): AsyncIterable<storage.WriteCheckpoint>;
|
|
39
|
-
protected watchActiveCheckpoint(signal: AbortSignal): AsyncIterable<storage.ActiveCheckpoint>;
|
|
40
|
-
private makeActiveCheckpoint;
|
|
36
|
+
getActiveStorage(): Promise<SyncRulesBucketStorage | null>;
|
|
41
37
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as lib_postgres from '@powersync/lib-service-postgres';
|
|
2
|
-
import {
|
|
3
|
-
import { storage, utils } from '@powersync/service-core';
|
|
2
|
+
import { CheckpointChanges, GetCheckpointChangesOptions, storage, utils, WatchWriteCheckpointOptions } from '@powersync/service-core';
|
|
4
3
|
import * as sync_rules from '@powersync/service-sync-rules';
|
|
5
4
|
import { RequiredOperationBatchLimits } from '../types/types.js';
|
|
5
|
+
import * as framework from '@powersync/lib-services-framework';
|
|
6
6
|
import { PostgresWriteCheckpointAPI } from './checkpoints/PostgresWriteCheckpointAPI.js';
|
|
7
7
|
import { PostgresBucketStorageFactory } from './PostgresBucketStorageFactory.js';
|
|
8
8
|
export type PostgresSyncRulesStorageOptions = {
|
|
@@ -12,12 +12,13 @@ export type PostgresSyncRulesStorageOptions = {
|
|
|
12
12
|
write_checkpoint_mode?: storage.WriteCheckpointMode;
|
|
13
13
|
batchLimits: RequiredOperationBatchLimits;
|
|
14
14
|
};
|
|
15
|
-
export declare class PostgresSyncRulesStorage extends
|
|
15
|
+
export declare class PostgresSyncRulesStorage extends framework.BaseObserver<storage.SyncRulesBucketStorageListener> implements storage.SyncRulesBucketStorage {
|
|
16
16
|
protected options: PostgresSyncRulesStorageOptions;
|
|
17
17
|
readonly group_id: number;
|
|
18
18
|
readonly sync_rules: storage.PersistedSyncRulesContent;
|
|
19
19
|
readonly slot_name: string;
|
|
20
20
|
readonly factory: PostgresBucketStorageFactory;
|
|
21
|
+
private sharedIterator;
|
|
21
22
|
protected db: lib_postgres.DatabaseClient;
|
|
22
23
|
protected writeCheckpointAPI: PostgresWriteCheckpointAPI;
|
|
23
24
|
private parsedSyncRulesCache;
|
|
@@ -43,4 +44,9 @@ export declare class PostgresSyncRulesStorage extends DisposableObserver<storage
|
|
|
43
44
|
clear(): Promise<void>;
|
|
44
45
|
autoActivate(): Promise<void>;
|
|
45
46
|
private getChecksumsInternal;
|
|
47
|
+
getActiveCheckpoint(): Promise<storage.ReplicationCheckpoint>;
|
|
48
|
+
watchWriteCheckpoint(options: WatchWriteCheckpointOptions): AsyncIterable<storage.StorageCheckpointUpdate>;
|
|
49
|
+
protected watchActiveCheckpoint(signal: AbortSignal): AsyncIterable<storage.ReplicationCheckpoint>;
|
|
50
|
+
getCheckpointChanges(options: GetCheckpointChangesOptions): Promise<CheckpointChanges>;
|
|
51
|
+
private makeActiveCheckpoint;
|
|
46
52
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as lib_postgres from '@powersync/lib-service-postgres';
|
|
2
|
-
import {
|
|
2
|
+
import { BaseObserver } from '@powersync/lib-services-framework';
|
|
3
3
|
import { storage } from '@powersync/service-core';
|
|
4
4
|
import * as sync_rules from '@powersync/service-sync-rules';
|
|
5
5
|
import * as t from 'ts-codec';
|
|
@@ -38,7 +38,7 @@ declare const StatefulCheckpoint: t.Intersection<t.Codec<{
|
|
|
38
38
|
state: t.EnumCodec<typeof storage.SyncRuleState>;
|
|
39
39
|
}>>;
|
|
40
40
|
type StatefulCheckpointDecoded = t.Decoded<typeof StatefulCheckpoint>;
|
|
41
|
-
export declare class PostgresBucketBatch extends
|
|
41
|
+
export declare class PostgresBucketBatch extends BaseObserver<storage.BucketBatchStorageListener> implements storage.BucketStorageBatch {
|
|
42
42
|
protected options: PostgresBucketBatchOptions;
|
|
43
43
|
last_flushed_op: bigint | null;
|
|
44
44
|
protected db: lib_postgres.DatabaseClient;
|
|
@@ -52,6 +52,7 @@ export declare class PostgresBucketBatch extends DisposableObserver<storage.Buck
|
|
|
52
52
|
private lastWaitingLogThrottled;
|
|
53
53
|
constructor(options: PostgresBucketBatchOptions);
|
|
54
54
|
get lastCheckpointLsn(): string | null;
|
|
55
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
55
56
|
save(record: storage.SaveOptions): Promise<storage.FlushedResult | null>;
|
|
56
57
|
truncate(sourceTables: storage.SourceTable[]): Promise<storage.FlushedResult | null>;
|
|
57
58
|
protected truncateSingle(sourceTable: storage.SourceTable): Promise<bigint | null>;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import * as framework from '@powersync/lib-services-framework';
|
|
2
|
-
import { storage
|
|
2
|
+
import { storage } from '@powersync/service-core';
|
|
3
3
|
import * as sync_rules from '@powersync/service-sync-rules';
|
|
4
4
|
import crypto from 'crypto';
|
|
5
|
-
import { wrapWithAbort } from 'ix/asynciterable/operators/withabort.js';
|
|
6
|
-
import { LRUCache } from 'lru-cache/min';
|
|
7
|
-
import * as timers from 'timers/promises';
|
|
8
5
|
import * as uuid from 'uuid';
|
|
9
6
|
import * as lib_postgres from '@powersync/lib-service-postgres';
|
|
10
7
|
import { models } from '../types/types.js';
|
|
@@ -12,35 +9,11 @@ import { NOTIFICATION_CHANNEL, STORAGE_SCHEMA_NAME } from '../utils/db.js';
|
|
|
12
9
|
import { notifySyncRulesUpdate } from './batch/PostgresBucketBatch.js';
|
|
13
10
|
import { PostgresSyncRulesStorage } from './PostgresSyncRulesStorage.js';
|
|
14
11
|
import { PostgresPersistedSyncRulesContent } from './sync-rules/PostgresPersistedSyncRulesContent.js';
|
|
15
|
-
export class PostgresBucketStorageFactory extends framework.
|
|
12
|
+
export class PostgresBucketStorageFactory extends framework.BaseObserver {
|
|
16
13
|
options;
|
|
17
14
|
db;
|
|
18
15
|
slot_name_prefix;
|
|
19
|
-
|
|
20
|
-
storageCache = new LRUCache({
|
|
21
|
-
max: 3,
|
|
22
|
-
fetchMethod: async (id) => {
|
|
23
|
-
const syncRulesRow = await this.db.sql `
|
|
24
|
-
SELECT
|
|
25
|
-
*
|
|
26
|
-
FROM
|
|
27
|
-
sync_rules
|
|
28
|
-
WHERE
|
|
29
|
-
id = ${{ value: id, type: 'int4' }}
|
|
30
|
-
`
|
|
31
|
-
.decoded(models.SyncRules)
|
|
32
|
-
.first();
|
|
33
|
-
if (syncRulesRow == null) {
|
|
34
|
-
// Deleted in the meantime?
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
const rules = new PostgresPersistedSyncRulesContent(this.db, syncRulesRow);
|
|
38
|
-
return this.getInstance(rules);
|
|
39
|
-
},
|
|
40
|
-
dispose: (storage) => {
|
|
41
|
-
storage[Symbol.dispose]();
|
|
42
|
-
}
|
|
43
|
-
});
|
|
16
|
+
activeStorageCache;
|
|
44
17
|
constructor(options) {
|
|
45
18
|
super();
|
|
46
19
|
this.options = options;
|
|
@@ -55,7 +28,6 @@ export class PostgresBucketStorageFactory extends framework.DisposableObserver {
|
|
|
55
28
|
});
|
|
56
29
|
}
|
|
57
30
|
async [Symbol.asyncDispose]() {
|
|
58
|
-
super[Symbol.dispose]();
|
|
59
31
|
await this.db[Symbol.asyncDispose]();
|
|
60
32
|
}
|
|
61
33
|
async prepareStatements(connection) {
|
|
@@ -72,8 +44,7 @@ export class PostgresBucketStorageFactory extends framework.DisposableObserver {
|
|
|
72
44
|
this.iterateListeners((cb) => cb.syncStorageCreated?.(storage));
|
|
73
45
|
storage.registerListener({
|
|
74
46
|
batchStarted: (batch) => {
|
|
75
|
-
|
|
76
|
-
batch.registerManagedListener(storage, {
|
|
47
|
+
batch.registerListener({
|
|
77
48
|
replicationEvent: (payload) => this.iterateListeners((cb) => cb.replicationEvent?.(payload))
|
|
78
49
|
});
|
|
79
50
|
}
|
|
@@ -336,109 +307,22 @@ export class PostgresBucketStorageFactory extends framework.DisposableObserver {
|
|
|
336
307
|
.rows();
|
|
337
308
|
return rows.map((row) => new PostgresPersistedSyncRulesContent(this.db, row));
|
|
338
309
|
}
|
|
339
|
-
async
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
last_checkpoint,
|
|
344
|
-
last_checkpoint_lsn
|
|
345
|
-
FROM
|
|
346
|
-
sync_rules
|
|
347
|
-
WHERE
|
|
348
|
-
state = ${{ value: storage.SyncRuleState.ACTIVE, type: 'varchar' }}
|
|
349
|
-
ORDER BY
|
|
350
|
-
id DESC
|
|
351
|
-
LIMIT
|
|
352
|
-
1
|
|
353
|
-
`
|
|
354
|
-
.decoded(models.ActiveCheckpoint)
|
|
355
|
-
.first();
|
|
356
|
-
return this.makeActiveCheckpoint(activeCheckpoint);
|
|
357
|
-
}
|
|
358
|
-
async *watchWriteCheckpoint(user_id, signal) {
|
|
359
|
-
let lastCheckpoint = null;
|
|
360
|
-
let lastWriteCheckpoint = null;
|
|
361
|
-
const iter = wrapWithAbort(this.sharedIterator, signal);
|
|
362
|
-
for await (const cp of iter) {
|
|
363
|
-
const { checkpoint, lsn } = cp;
|
|
364
|
-
// lsn changes are not important by itself.
|
|
365
|
-
// What is important is:
|
|
366
|
-
// 1. checkpoint (op_id) changes.
|
|
367
|
-
// 2. write checkpoint changes for the specific user
|
|
368
|
-
const bucketStorage = await cp.getBucketStorage();
|
|
369
|
-
if (!bucketStorage) {
|
|
370
|
-
continue;
|
|
371
|
-
}
|
|
372
|
-
const lsnFilters = lsn ? { 1: lsn } : {};
|
|
373
|
-
const currentWriteCheckpoint = await bucketStorage.lastWriteCheckpoint({
|
|
374
|
-
user_id,
|
|
375
|
-
heads: {
|
|
376
|
-
...lsnFilters
|
|
377
|
-
}
|
|
378
|
-
});
|
|
379
|
-
if (currentWriteCheckpoint == lastWriteCheckpoint && checkpoint == lastCheckpoint) {
|
|
380
|
-
// No change - wait for next one
|
|
381
|
-
// In some cases, many LSNs may be produced in a short time.
|
|
382
|
-
// Add a delay to throttle the write checkpoint lookup a bit.
|
|
383
|
-
await timers.setTimeout(20 + 10 * Math.random());
|
|
384
|
-
continue;
|
|
385
|
-
}
|
|
386
|
-
lastWriteCheckpoint = currentWriteCheckpoint;
|
|
387
|
-
lastCheckpoint = checkpoint;
|
|
388
|
-
yield { base: cp, writeCheckpoint: currentWriteCheckpoint };
|
|
310
|
+
async getActiveStorage() {
|
|
311
|
+
const content = await this.getActiveSyncRulesContent();
|
|
312
|
+
if (content == null) {
|
|
313
|
+
return null;
|
|
389
314
|
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
state = ${{ type: 'varchar', value: storage.SyncRuleState.ACTIVE }}
|
|
401
|
-
LIMIT
|
|
402
|
-
1
|
|
403
|
-
`
|
|
404
|
-
.decoded(models.ActiveCheckpoint)
|
|
405
|
-
.first();
|
|
406
|
-
const sink = new sync.LastValueSink(undefined);
|
|
407
|
-
const disposeListener = this.db.registerListener({
|
|
408
|
-
notification: (notification) => sink.next(notification.payload)
|
|
409
|
-
});
|
|
410
|
-
signal.addEventListener('aborted', async () => {
|
|
411
|
-
disposeListener();
|
|
412
|
-
sink.complete();
|
|
413
|
-
});
|
|
414
|
-
yield this.makeActiveCheckpoint(doc);
|
|
415
|
-
let lastOp = null;
|
|
416
|
-
for await (const payload of sink.withSignal(signal)) {
|
|
417
|
-
if (signal.aborted) {
|
|
418
|
-
return;
|
|
419
|
-
}
|
|
420
|
-
const notification = models.ActiveCheckpointNotification.decode(payload);
|
|
421
|
-
const activeCheckpoint = this.makeActiveCheckpoint(notification.active_checkpoint);
|
|
422
|
-
if (lastOp == null || activeCheckpoint.lsn != lastOp.lsn || activeCheckpoint.checkpoint != lastOp.checkpoint) {
|
|
423
|
-
lastOp = activeCheckpoint;
|
|
424
|
-
yield activeCheckpoint;
|
|
425
|
-
}
|
|
315
|
+
// It is important that this instance is cached.
|
|
316
|
+
// Not for the instance construction itself, but to ensure that internal caches on the instance
|
|
317
|
+
// are re-used properly.
|
|
318
|
+
if (this.activeStorageCache?.group_id == content.id) {
|
|
319
|
+
return this.activeStorageCache;
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
const instance = this.getInstance(content);
|
|
323
|
+
this.activeStorageCache = instance;
|
|
324
|
+
return instance;
|
|
426
325
|
}
|
|
427
|
-
}
|
|
428
|
-
makeActiveCheckpoint(row) {
|
|
429
|
-
return {
|
|
430
|
-
checkpoint: utils.timestampToOpId(row?.last_checkpoint ?? 0n),
|
|
431
|
-
lsn: row?.last_checkpoint_lsn ?? null,
|
|
432
|
-
hasSyncRules() {
|
|
433
|
-
return row != null;
|
|
434
|
-
},
|
|
435
|
-
getBucketStorage: async () => {
|
|
436
|
-
if (row == null) {
|
|
437
|
-
return null;
|
|
438
|
-
}
|
|
439
|
-
return (await this.storageCache.fetch(Number(row.id))) ?? null;
|
|
440
|
-
}
|
|
441
|
-
};
|
|
442
326
|
}
|
|
443
327
|
}
|
|
444
328
|
//# sourceMappingURL=PostgresBucketStorageFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresBucketStorageFactory.js","sourceRoot":"","sources":["../../src/storage/PostgresBucketStorageFactory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PostgresBucketStorageFactory.js","sourceRoot":"","sources":["../../src/storage/PostgresBucketStorageFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAkD,MAAM,yBAAyB,CAAC;AAElG,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAC5D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAmC,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,iCAAiC,EAAE,MAAM,mDAAmD,CAAC;AAOtG,MAAM,OAAO,4BACX,SAAQ,SAAS,CAAC,YAAkD;IAQ9C;IALb,EAAE,CAA8B;IACzB,gBAAgB,CAAS;IAEjC,kBAAkB,CAA6C;IAEvE,YAAsB,OAAqC;QACzD,KAAK,EAAE,CAAC;QADY,YAAO,GAAP,OAAO,CAA8B;QAEzD,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,cAAc,CAAC;YACxC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,mBAAmB;YAC3B,oBAAoB,EAAE,CAAC,oBAAoB,CAAC;SAC7C,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAEjD,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC;YACvB,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;SAC5E,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACzB,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAAgC;QACtD,+EAA+E;QAC/E,qCAAqC;IACvC,CAAC;IAED,WAAW,CAAC,SAA4C;QACtD,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAAC;YAC3C,OAAO,EAAE,IAAI;YACb,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,gBAAgB,CAAC;YACvB,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtB,KAAK,CAAC,gBAAgB,CAAC;oBACrB,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAC;iBAC7F,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrF,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;YAC9B,OAAO;gBACL,qBAAqB,EAAE,CAAC;gBACxB,qBAAqB,EAAE,CAAC;gBACxB,sBAAsB,EAAE,CAAC;aAC1B,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;KAK9B,CAAC,KAAK,EAA+F,CAAC;QAEvG,OAAO;YACL,qBAAqB,EAAE,MAAM,CAAC,KAAM,CAAC,qBAAqB,CAAC;YAC3D,qBAAqB,EAAE,MAAM,CAAC,KAAM,CAAC,oBAAoB,CAAC;YAC1D,sBAAsB,EAAE,MAAM,CAAC,KAAM,CAAC,kBAAkB,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;KAKpC;aACE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;aACxB,KAAK,EAAE,CAAC;QACX,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,mBAAmB,CAAC;YACvD,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,4BAA4B;SACnC,CAAC,CAAC;QACH,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;aAIV,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE;OAC3C,CAAC,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;KAKvC;aACE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;aACxB,KAAK,EAAE,CAAC;QACX,OAAO,cAAe,CAAC,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,8BAA8B,CAC1D,MAAM,YAAY,CAAC,KAAK,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CACrE,CAAC;QAEF,OAAO;YACL,EAAE;YACF,IAAI,EAAE,YAAY,CAAC,wBAAwB;SAC5C,CAAC;IACJ,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,kBAAkB,CAAC,OAA+B;QAKtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEtD,IAAI,IAAI,EAAE,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAChD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;aAAM,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACzE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC/D,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC;QACvG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAuC;QAC3D,yDAAyD;QACzD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,iDAAiD;YACjD,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;gBAChD,2CAA2C;gBAC3C,MAAM,EAAE,SAAS;gBACjB,aAAa,EAAE,gBAAgB,EAAE,4BAA4B;gBAC7D,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,8EAA8E;QAChF,CAAC;QAED,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACtC,MAAM,EAAE,CAAC,GAAG,CAAA;;;oBAGE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE;;oBAEtD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE;OACzE,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;cAgB5B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;cAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE;;gBAE1D,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE;;;;;;;;gBAQjD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;;;;;OAK1E;iBACE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;iBACzB,KAAK,EAAE,CAAC;YAEX,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,eAAgB,CAAC,CAAC;YAEvD,OAAO,IAAI,iCAAiC,CAAC,IAAI,CAAC,EAAE,EAAE,eAAgB,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEtD,gEAAgE;QAChE,qFAAqF;QACrF,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;YAChD,wCAAwC;YACxC,MAAM,IAAI,CAAC,eAAe,CAAC;gBACzB,OAAO,EAAE,IAAI,CAAC,kBAAkB;gBAChC,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,gCAAgC;YAChC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;oBAGH,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;;iBAEzD,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;wBACzB,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;OAC7E,CAAC,OAAO,EAAE,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE,SAAS,IAAI,SAAS,EAAE,CAAC;YAC1D,sEAAsE;YACtE,MAAM,IAAI,CAAC,eAAe,CAAC;gBACzB,OAAO,EAAE,MAAM,CAAC,kBAAkB;gBAClC,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,gCAAgC;YAChC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;oBAGH,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;;iBAEzD,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;wBAC3B,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;OACzE,CAAC,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,kBAAkB,CAAC,OAAsC;QAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACvD,OAAO,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC7B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;;kBAMrB,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;;;;;KAKrE;aACE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;aACzB,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,iCAAiC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACnE,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,gBAAgB,CAAC,OAAsC;QAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACrD,OAAO,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;;kBAMnB,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;;;;;KAKzE;aACE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;aACzB,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,iCAAiC,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;;kBAMhB,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;qBACrD,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;KAC5E;aACE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;aACzB,IAAI,EAAE,CAAC;QAEV,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,iCAAiC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;;kBAMhB,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;KACnE;aACE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;aACzB,IAAI,EAAE,CAAC;QAEV,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,iCAAiC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACvD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gDAAgD;QAChD,+FAA+F;QAC/F,wBAAwB;QACxB,IAAI,IAAI,CAAC,kBAAkB,EAAE,QAAQ,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;YACnC,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,73 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
-
var dispose, inner;
|
|
5
|
-
if (async) {
|
|
6
|
-
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
-
dispose = value[Symbol.asyncDispose];
|
|
8
|
-
}
|
|
9
|
-
if (dispose === void 0) {
|
|
10
|
-
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
-
dispose = value[Symbol.dispose];
|
|
12
|
-
if (async) inner = dispose;
|
|
13
|
-
}
|
|
14
|
-
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
-
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
-
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
-
}
|
|
18
|
-
else if (async) {
|
|
19
|
-
env.stack.push({ async: true });
|
|
20
|
-
}
|
|
21
|
-
return value;
|
|
22
|
-
};
|
|
23
|
-
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
-
return function (env) {
|
|
25
|
-
function fail(e) {
|
|
26
|
-
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
-
env.hasError = true;
|
|
28
|
-
}
|
|
29
|
-
var r, s = 0;
|
|
30
|
-
function next() {
|
|
31
|
-
while (r = env.stack.pop()) {
|
|
32
|
-
try {
|
|
33
|
-
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
-
if (r.dispose) {
|
|
35
|
-
var result = r.dispose.call(r.value);
|
|
36
|
-
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
-
}
|
|
38
|
-
else s |= 1;
|
|
39
|
-
}
|
|
40
|
-
catch (e) {
|
|
41
|
-
fail(e);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
-
if (env.hasError) throw env.error;
|
|
46
|
-
}
|
|
47
|
-
return next();
|
|
48
|
-
};
|
|
49
|
-
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
-
var e = new Error(message);
|
|
51
|
-
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
-
});
|
|
53
|
-
import { DisposableObserver, ReplicationAssertionError } from '@powersync/lib-services-framework';
|
|
54
|
-
import { storage, utils } from '@powersync/service-core';
|
|
1
|
+
import { ReplicationAssertionError } from '@powersync/lib-services-framework';
|
|
2
|
+
import { BroadcastIterable, CHECKPOINT_INVALIDATE_ALL, LastValueSink, storage, utils } from '@powersync/service-core';
|
|
55
3
|
import { JSONBig } from '@powersync/service-jsonbig';
|
|
56
4
|
import * as uuid from 'uuid';
|
|
57
5
|
import { BIGINT_MAX } from '../types/codecs.js';
|
|
58
6
|
import { models } from '../types/types.js';
|
|
59
7
|
import { replicaIdToSubkey } from '../utils/bson.js';
|
|
60
8
|
import { mapOpEntry } from '../utils/bucket-data.js';
|
|
9
|
+
import * as timers from 'timers/promises';
|
|
10
|
+
import * as framework from '@powersync/lib-services-framework';
|
|
61
11
|
import { pick } from '../utils/ts-codec.js';
|
|
62
12
|
import { PostgresBucketBatch } from './batch/PostgresBucketBatch.js';
|
|
63
13
|
import { PostgresWriteCheckpointAPI } from './checkpoints/PostgresWriteCheckpointAPI.js';
|
|
64
14
|
import { PostgresCompactor } from './PostgresCompactor.js';
|
|
65
|
-
|
|
15
|
+
import { wrapWithAbort } from 'ix/asynciterable/operators/withabort.js';
|
|
16
|
+
export class PostgresSyncRulesStorage extends framework.BaseObserver {
|
|
66
17
|
options;
|
|
67
18
|
group_id;
|
|
68
19
|
sync_rules;
|
|
69
20
|
slot_name;
|
|
70
21
|
factory;
|
|
22
|
+
sharedIterator = new BroadcastIterable((signal) => this.watchActiveCheckpoint(signal));
|
|
71
23
|
db;
|
|
72
24
|
writeCheckpointAPI;
|
|
73
25
|
// TODO we might be able to share this in an abstract class
|
|
@@ -245,9 +197,7 @@ export class PostgresSyncRulesStorage extends DisposableObserver {
|
|
|
245
197
|
});
|
|
246
198
|
}
|
|
247
199
|
async startBatch(options, callback) {
|
|
248
|
-
const
|
|
249
|
-
try {
|
|
250
|
-
const syncRules = await this.db.sql `
|
|
200
|
+
const syncRules = await this.db.sql `
|
|
251
201
|
SELECT
|
|
252
202
|
last_checkpoint_lsn,
|
|
253
203
|
no_checkpoint_before,
|
|
@@ -257,39 +207,29 @@ export class PostgresSyncRulesStorage extends DisposableObserver {
|
|
|
257
207
|
WHERE
|
|
258
208
|
id = ${{ type: 'int4', value: this.group_id }}
|
|
259
209
|
`
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
return null;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
catch (e_1) {
|
|
286
|
-
env_1.error = e_1;
|
|
287
|
-
env_1.hasError = true;
|
|
210
|
+
.decoded(pick(models.SyncRules, ['last_checkpoint_lsn', 'no_checkpoint_before', 'keepalive_op']))
|
|
211
|
+
.first();
|
|
212
|
+
const checkpoint_lsn = syncRules?.last_checkpoint_lsn ?? null;
|
|
213
|
+
const batch = new PostgresBucketBatch({
|
|
214
|
+
db: this.db,
|
|
215
|
+
sync_rules: this.sync_rules.parsed(options).sync_rules,
|
|
216
|
+
group_id: this.group_id,
|
|
217
|
+
slot_name: this.slot_name,
|
|
218
|
+
last_checkpoint_lsn: checkpoint_lsn,
|
|
219
|
+
keep_alive_op: syncRules?.keepalive_op,
|
|
220
|
+
no_checkpoint_before_lsn: syncRules?.no_checkpoint_before ?? options.zeroLSN,
|
|
221
|
+
store_current_data: options.storeCurrentData,
|
|
222
|
+
skip_existing_rows: options.skipExistingRows ?? false,
|
|
223
|
+
batch_limits: this.options.batchLimits
|
|
224
|
+
});
|
|
225
|
+
this.iterateListeners((cb) => cb.batchStarted?.(batch));
|
|
226
|
+
await callback(batch);
|
|
227
|
+
await batch.flush();
|
|
228
|
+
if (batch.last_flushed_op) {
|
|
229
|
+
return { flushed_op: String(batch.last_flushed_op) };
|
|
288
230
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
if (result_1)
|
|
292
|
-
await result_1;
|
|
231
|
+
else {
|
|
232
|
+
return null;
|
|
293
233
|
}
|
|
294
234
|
}
|
|
295
235
|
async getParameterSets(checkpoint, lookups) {
|
|
@@ -615,5 +555,116 @@ export class PostgresSyncRulesStorage extends DisposableObserver {
|
|
|
615
555
|
];
|
|
616
556
|
}));
|
|
617
557
|
}
|
|
558
|
+
async getActiveCheckpoint() {
|
|
559
|
+
const activeCheckpoint = await this.db.sql `
|
|
560
|
+
SELECT
|
|
561
|
+
id,
|
|
562
|
+
last_checkpoint,
|
|
563
|
+
last_checkpoint_lsn
|
|
564
|
+
FROM
|
|
565
|
+
sync_rules
|
|
566
|
+
WHERE
|
|
567
|
+
state = ${{ value: storage.SyncRuleState.ACTIVE, type: 'varchar' }}
|
|
568
|
+
ORDER BY
|
|
569
|
+
id DESC
|
|
570
|
+
LIMIT
|
|
571
|
+
1
|
|
572
|
+
`
|
|
573
|
+
.decoded(models.ActiveCheckpoint)
|
|
574
|
+
.first();
|
|
575
|
+
return this.makeActiveCheckpoint(activeCheckpoint);
|
|
576
|
+
}
|
|
577
|
+
async *watchWriteCheckpoint(options) {
|
|
578
|
+
let lastCheckpoint = null;
|
|
579
|
+
let lastWriteCheckpoint = null;
|
|
580
|
+
const { signal, user_id } = options;
|
|
581
|
+
const iter = wrapWithAbort(this.sharedIterator, signal);
|
|
582
|
+
for await (const cp of iter) {
|
|
583
|
+
const { checkpoint, lsn } = cp;
|
|
584
|
+
// lsn changes are not important by itself.
|
|
585
|
+
// What is important is:
|
|
586
|
+
// 1. checkpoint (op_id) changes.
|
|
587
|
+
// 2. write checkpoint changes for the specific user
|
|
588
|
+
const lsnFilters = lsn ? { 1: lsn } : {};
|
|
589
|
+
const currentWriteCheckpoint = await this.lastWriteCheckpoint({
|
|
590
|
+
user_id,
|
|
591
|
+
heads: {
|
|
592
|
+
...lsnFilters
|
|
593
|
+
}
|
|
594
|
+
});
|
|
595
|
+
if (currentWriteCheckpoint == lastWriteCheckpoint && checkpoint == lastCheckpoint) {
|
|
596
|
+
// No change - wait for next one
|
|
597
|
+
// In some cases, many LSNs may be produced in a short time.
|
|
598
|
+
// Add a delay to throttle the write checkpoint lookup a bit.
|
|
599
|
+
await timers.setTimeout(20 + 10 * Math.random());
|
|
600
|
+
continue;
|
|
601
|
+
}
|
|
602
|
+
lastWriteCheckpoint = currentWriteCheckpoint;
|
|
603
|
+
lastCheckpoint = checkpoint;
|
|
604
|
+
yield {
|
|
605
|
+
base: cp,
|
|
606
|
+
writeCheckpoint: currentWriteCheckpoint,
|
|
607
|
+
update: CHECKPOINT_INVALIDATE_ALL
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
async *watchActiveCheckpoint(signal) {
|
|
612
|
+
const doc = await this.db.sql `
|
|
613
|
+
SELECT
|
|
614
|
+
id,
|
|
615
|
+
last_checkpoint,
|
|
616
|
+
last_checkpoint_lsn
|
|
617
|
+
FROM
|
|
618
|
+
sync_rules
|
|
619
|
+
WHERE
|
|
620
|
+
state = ${{ type: 'varchar', value: storage.SyncRuleState.ACTIVE }}
|
|
621
|
+
LIMIT
|
|
622
|
+
1
|
|
623
|
+
`
|
|
624
|
+
.decoded(models.ActiveCheckpoint)
|
|
625
|
+
.first();
|
|
626
|
+
if (doc == null) {
|
|
627
|
+
// Abort the connections - clients will have to retry later.
|
|
628
|
+
throw new framework.ServiceError(framework.ErrorCode.PSYNC_S2302, 'No active sync rules available');
|
|
629
|
+
}
|
|
630
|
+
const sink = new LastValueSink(undefined);
|
|
631
|
+
const disposeListener = this.db.registerListener({
|
|
632
|
+
notification: (notification) => sink.next(notification.payload)
|
|
633
|
+
});
|
|
634
|
+
signal.addEventListener('aborted', async () => {
|
|
635
|
+
disposeListener();
|
|
636
|
+
sink.complete();
|
|
637
|
+
});
|
|
638
|
+
yield this.makeActiveCheckpoint(doc);
|
|
639
|
+
let lastOp = null;
|
|
640
|
+
for await (const payload of sink.withSignal(signal)) {
|
|
641
|
+
if (signal.aborted) {
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
644
|
+
const notification = models.ActiveCheckpointNotification.decode(payload);
|
|
645
|
+
if (notification.active_checkpoint == null) {
|
|
646
|
+
continue;
|
|
647
|
+
}
|
|
648
|
+
if (Number(notification.active_checkpoint.id) != doc.id) {
|
|
649
|
+
// Active sync rules changed - abort and restart the stream
|
|
650
|
+
break;
|
|
651
|
+
}
|
|
652
|
+
const activeCheckpoint = this.makeActiveCheckpoint(notification.active_checkpoint);
|
|
653
|
+
if (lastOp == null || activeCheckpoint.lsn != lastOp.lsn || activeCheckpoint.checkpoint != lastOp.checkpoint) {
|
|
654
|
+
lastOp = activeCheckpoint;
|
|
655
|
+
yield activeCheckpoint;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
async getCheckpointChanges(options) {
|
|
660
|
+
// We do not track individual changes yet
|
|
661
|
+
return CHECKPOINT_INVALIDATE_ALL;
|
|
662
|
+
}
|
|
663
|
+
makeActiveCheckpoint(row) {
|
|
664
|
+
return {
|
|
665
|
+
checkpoint: utils.timestampToOpId(row?.last_checkpoint ?? 0n),
|
|
666
|
+
lsn: row?.last_checkpoint_lsn ?? null
|
|
667
|
+
};
|
|
668
|
+
}
|
|
618
669
|
}
|
|
619
670
|
//# sourceMappingURL=PostgresSyncRulesStorage.js.map
|