@powersync/service-module-postgres-storage 0.0.0-dev-20250122110924 → 0.0.0-dev-20250227082606
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 +120 -12
- package/README.md +7 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/@types/storage/PostgresBucketStorageFactory.d.ts +8 -13
- package/dist/@types/storage/PostgresCompactor.d.ts +0 -6
- package/dist/@types/storage/PostgresSyncRulesStorage.d.ts +9 -3
- package/dist/@types/storage/batch/PostgresBucketBatch.d.ts +7 -6
- package/dist/@types/types/codecs.d.ts +2 -2
- package/dist/@types/types/models/BucketData.d.ts +1 -1
- package/dist/@types/types/models/BucketParameters.d.ts +2 -2
- package/dist/@types/types/models/CurrentData.d.ts +3 -3
- package/dist/@types/types/models/SourceTable.d.ts +1 -1
- package/dist/@types/types/types.d.ts +5 -0
- package/dist/storage/PostgresBucketStorageFactory.js +68 -158
- package/dist/storage/PostgresBucketStorageFactory.js.map +1 -1
- package/dist/storage/PostgresCompactor.js +19 -6
- package/dist/storage/PostgresCompactor.js.map +1 -1
- package/dist/storage/PostgresSyncRulesStorage.js +221 -123
- package/dist/storage/PostgresSyncRulesStorage.js.map +1 -1
- package/dist/storage/batch/PostgresBucketBatch.js +31 -19
- package/dist/storage/batch/PostgresBucketBatch.js.map +1 -1
- package/dist/storage/batch/PostgresPersistedBatch.js +39 -81
- package/dist/storage/batch/PostgresPersistedBatch.js.map +1 -1
- package/dist/types/types.js.map +1 -1
- package/package.json +9 -9
- package/src/storage/PostgresBucketStorageFactory.ts +73 -179
- package/src/storage/PostgresCompactor.ts +19 -14
- package/src/storage/PostgresSyncRulesStorage.ts +231 -38
- package/src/storage/batch/PostgresBucketBatch.ts +39 -22
- package/src/storage/batch/PostgresPersistedBatch.ts +39 -81
- package/src/types/models/SourceTable.ts +1 -1
- package/src/types/types.ts +1 -0
- package/test/src/__snapshots__/storage_sync.test.ts.snap +138 -0
- package/test/src/storage.test.ts +1 -1
- package/test/src/storage_compacting.test.ts +1 -1
- package/tsconfig.json +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as framework from '@powersync/lib-services-framework';
|
|
2
|
-
import { storage } from '@powersync/service-core';
|
|
2
|
+
import { GetIntanceOptions, 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,35 +8,30 @@ 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>;
|
|
20
|
-
getInstance(syncRules: storage.PersistedSyncRulesContent): storage.SyncRulesBucketStorage;
|
|
19
|
+
getInstance(syncRules: storage.PersistedSyncRulesContent, options?: GetIntanceOptions): storage.SyncRulesBucketStorage;
|
|
21
20
|
getStorageMetrics(): Promise<storage.StorageMetrics>;
|
|
22
21
|
getPowerSyncInstanceId(): Promise<string>;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}): Promise<{
|
|
22
|
+
getSystemIdentifier(): Promise<storage.BucketStorageSystemIdentifier>;
|
|
23
|
+
configureSyncRules(options: UpdateSyncRulesOptions): Promise<{
|
|
26
24
|
updated: boolean;
|
|
27
25
|
persisted_sync_rules?: storage.PersistedSyncRulesContent;
|
|
28
26
|
lock?: storage.ReplicationLock;
|
|
29
27
|
}>;
|
|
30
28
|
updateSyncRules(options: storage.UpdateSyncRulesOptions): Promise<PostgresPersistedSyncRulesContent>;
|
|
31
|
-
|
|
29
|
+
restartReplication(sync_rules_group_id: number): Promise<void>;
|
|
32
30
|
getActiveSyncRules(options: storage.ParseSyncRulesOptions): Promise<storage.PersistedSyncRules | null>;
|
|
33
31
|
getActiveSyncRulesContent(): Promise<storage.PersistedSyncRulesContent | null>;
|
|
34
32
|
getNextSyncRules(options: storage.ParseSyncRulesOptions): Promise<storage.PersistedSyncRules | null>;
|
|
35
33
|
getNextSyncRulesContent(): Promise<storage.PersistedSyncRulesContent | null>;
|
|
36
34
|
getReplicatingSyncRules(): Promise<storage.PersistedSyncRulesContent[]>;
|
|
37
35
|
getStoppedSyncRules(): Promise<storage.PersistedSyncRulesContent[]>;
|
|
38
|
-
|
|
39
|
-
watchWriteCheckpoint(user_id: string, signal: AbortSignal): AsyncIterable<storage.WriteCheckpoint>;
|
|
40
|
-
protected watchActiveCheckpoint(signal: AbortSignal): AsyncIterable<storage.ActiveCheckpoint>;
|
|
41
|
-
private makeActiveCheckpoint;
|
|
36
|
+
getActiveStorage(): Promise<SyncRulesBucketStorage | null>;
|
|
42
37
|
}
|
|
@@ -4,12 +4,6 @@ import { storage } from '@powersync/service-core';
|
|
|
4
4
|
* Additional options, primarily for testing.
|
|
5
5
|
*/
|
|
6
6
|
export interface PostgresCompactOptions extends storage.CompactOptions {
|
|
7
|
-
/** Minimum of 2 */
|
|
8
|
-
clearBatchLimit?: number;
|
|
9
|
-
/** Minimum of 1 */
|
|
10
|
-
moveBatchLimit?: number;
|
|
11
|
-
/** Minimum of 1 */
|
|
12
|
-
moveBatchQueryLimit?: number;
|
|
13
7
|
}
|
|
14
8
|
export declare class PostgresCompactor {
|
|
15
9
|
private db;
|
|
@@ -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,13 +52,14 @@ 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>;
|
|
58
59
|
drop(sourceTables: storage.SourceTable[]): Promise<storage.FlushedResult | null>;
|
|
59
60
|
flush(): Promise<storage.FlushedResult | null>;
|
|
60
61
|
private flushInner;
|
|
61
|
-
commit(lsn: string): Promise<boolean>;
|
|
62
|
+
commit(lsn: string, options?: storage.BucketBatchCommitOptions): Promise<boolean>;
|
|
62
63
|
keepalive(lsn: string): Promise<boolean>;
|
|
63
64
|
markSnapshotDone(tables: storage.SourceTable[], no_checkpoint_before_lsn: string): Promise<storage.SourceTable[]>;
|
|
64
65
|
addCustomWriteCheckpoint(checkpoint: storage.BatchedCustomWriteCheckpointOptions): void;
|
|
@@ -66,14 +67,14 @@ export declare class PostgresBucketBatch extends DisposableObserver<storage.Buck
|
|
|
66
67
|
protected saveOperation(persistedBatch: PostgresPersistedBatch, operation: RecordOperation, currentData?: CurrentDataDecoded | null): Promise<{
|
|
67
68
|
group_id: number;
|
|
68
69
|
source_table: string;
|
|
69
|
-
source_key: Buffer
|
|
70
|
-
data: Buffer
|
|
70
|
+
source_key: Buffer<ArrayBuffer>;
|
|
71
|
+
data: Buffer<ArrayBuffer>;
|
|
71
72
|
buckets: {
|
|
72
73
|
id: string;
|
|
73
74
|
bucket: string;
|
|
74
75
|
table: string;
|
|
75
76
|
}[];
|
|
76
|
-
lookups: Buffer[];
|
|
77
|
+
lookups: Buffer<ArrayBuffer>[];
|
|
77
78
|
} | null>;
|
|
78
79
|
/**
|
|
79
80
|
* Gets relevant {@link SqlEventDescriptor}s for the given {@link SourceTable}
|
|
@@ -44,12 +44,12 @@ export declare const jsonb: <Decoded>(subCodec: t.Codec<Decoded, any>) => t.Code
|
|
|
44
44
|
*/
|
|
45
45
|
export declare const jsonb_raw: <Decoded>() => t.Codec<Decoded, string, string, t.CodecProps>;
|
|
46
46
|
export declare const bigint: t.Codec<bigint, string | number, string, t.CodecProps>;
|
|
47
|
-
export declare const uint8array: t.Codec<Uint8Array
|
|
47
|
+
export declare const uint8array: t.Codec<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, string, t.CodecProps>;
|
|
48
48
|
/**
|
|
49
49
|
* PGWire returns BYTEA values as Uint8Array instances.
|
|
50
50
|
* We also serialize to a hex string for bulk inserts.
|
|
51
51
|
*/
|
|
52
|
-
export declare const hexBuffer: t.Codec<Buffer
|
|
52
|
+
export declare const hexBuffer: t.Codec<Buffer<ArrayBuffer>, string, "hexBuffer", t.CodecProps>;
|
|
53
53
|
/**
|
|
54
54
|
* PGWire returns INTEGER columns as a `bigint`.
|
|
55
55
|
* This does a decode operation to `number`.
|
|
@@ -11,7 +11,7 @@ export declare const BucketData: t.ObjectCodec<{
|
|
|
11
11
|
op_id: t.Codec<bigint, string | number, string, t.CodecProps>;
|
|
12
12
|
op: t.EnumCodec<typeof OpType>;
|
|
13
13
|
source_table: t.Union<t.Codec<null, null, string, t.CodecProps>, t.IdentityCodec<t.CodecType.String>>;
|
|
14
|
-
source_key: t.Union<t.Codec<null, null, string, t.CodecProps>, t.Codec<Buffer
|
|
14
|
+
source_key: t.Union<t.Codec<null, null, string, t.CodecProps>, t.Codec<Buffer<ArrayBuffer>, string, "hexBuffer", t.CodecProps>>;
|
|
15
15
|
table_name: t.Union<t.Codec<string, string, string, t.CodecProps>, t.Codec<null, null, t.CodecType.Null, t.CodecProps>>;
|
|
16
16
|
row_id: t.Union<t.Codec<string, string, string, t.CodecProps>, t.Codec<null, null, t.CodecType.Null, t.CodecProps>>;
|
|
17
17
|
checksum: t.Codec<bigint, string | number, string, t.CodecProps>;
|
|
@@ -3,8 +3,8 @@ export declare const BucketParameters: t.ObjectCodec<{
|
|
|
3
3
|
id: t.Codec<bigint, string | number, string, t.CodecProps>;
|
|
4
4
|
group_id: t.Codec<number, number, "pg_number", t.CodecProps>;
|
|
5
5
|
source_table: t.IdentityCodec<t.CodecType.String>;
|
|
6
|
-
source_key: t.Codec<Buffer
|
|
7
|
-
lookup: t.Codec<Buffer
|
|
6
|
+
source_key: t.Codec<Buffer<ArrayBuffer>, string, "hexBuffer", t.CodecProps>;
|
|
7
|
+
lookup: t.Codec<Buffer<ArrayBuffer>, string, "hexBuffer", t.CodecProps>;
|
|
8
8
|
bucket_parameters: t.IdentityCodec<t.CodecType.String>;
|
|
9
9
|
}>;
|
|
10
10
|
export type BucketParameters = t.Encoded<typeof BucketParameters>;
|
|
@@ -12,10 +12,10 @@ export declare const CurrentData: t.ObjectCodec<{
|
|
|
12
12
|
bucket: string;
|
|
13
13
|
table: string;
|
|
14
14
|
}[], string, string, t.CodecProps>;
|
|
15
|
-
data: t.Codec<Buffer
|
|
15
|
+
data: t.Codec<Buffer<ArrayBuffer>, string, "hexBuffer", t.CodecProps>;
|
|
16
16
|
group_id: t.Codec<number, number, "pg_number", t.CodecProps>;
|
|
17
|
-
lookups: t.ArrayCodec<t.Codec<Buffer
|
|
18
|
-
source_key: t.Codec<Buffer
|
|
17
|
+
lookups: t.ArrayCodec<t.Codec<Buffer<ArrayBuffer>, string, "hexBuffer", t.CodecProps>>;
|
|
18
|
+
source_key: t.Codec<Buffer<ArrayBuffer>, string, "hexBuffer", t.CodecProps>;
|
|
19
19
|
source_table: t.IdentityCodec<t.CodecType.String>;
|
|
20
20
|
}>;
|
|
21
21
|
export type CurrentData = t.Encoded<typeof CurrentData>;
|
|
@@ -31,9 +31,11 @@ export declare const OperationBatchLimits: t.Intersection<t.Codec<{
|
|
|
31
31
|
export type OperationBatchLimits = t.Encoded<typeof OperationBatchLimits>;
|
|
32
32
|
export declare const PostgresStorageConfig: t.Intersection<t.Codec<{
|
|
33
33
|
type: string;
|
|
34
|
+
max_pool_size?: number | undefined;
|
|
34
35
|
} & {
|
|
35
36
|
type: "postgresql";
|
|
36
37
|
id?: string | undefined;
|
|
38
|
+
max_pool_size?: number | undefined;
|
|
37
39
|
tag?: string | undefined;
|
|
38
40
|
uri?: string | undefined;
|
|
39
41
|
hostname?: string | undefined;
|
|
@@ -50,9 +52,11 @@ export declare const PostgresStorageConfig: t.Intersection<t.Codec<{
|
|
|
50
52
|
slot_name_prefix?: string | undefined;
|
|
51
53
|
}, {
|
|
52
54
|
type: string;
|
|
55
|
+
max_pool_size?: number | undefined;
|
|
53
56
|
} & {
|
|
54
57
|
type: "postgresql";
|
|
55
58
|
id?: string | undefined;
|
|
59
|
+
max_pool_size?: number | undefined;
|
|
56
60
|
tag?: string | undefined;
|
|
57
61
|
uri?: string | undefined;
|
|
58
62
|
hostname?: string | undefined;
|
|
@@ -91,6 +95,7 @@ export type PostgresStorageConfigDecoded = t.Decoded<typeof PostgresStorageConfi
|
|
|
91
95
|
export type RequiredOperationBatchLimits = Required<OperationBatchLimits>;
|
|
92
96
|
export type NormalizedPostgresStorageConfig = pg_wire.NormalizedConnectionConfig & {
|
|
93
97
|
batch_limits: RequiredOperationBatchLimits;
|
|
98
|
+
max_pool_size: number;
|
|
94
99
|
};
|
|
95
100
|
export declare const normalizePostgresStorageConfig: (baseConfig: PostgresStorageConfigDecoded) => NormalizedPostgresStorageConfig;
|
|
96
101
|
export declare const isPostgresStorageConfig: (config: configFile.BaseStorageConfig) => config is PostgresStorageConfig;
|
|
@@ -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,25 +28,25 @@ 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) {
|
|
62
34
|
// It should be possible to prepare statements for some common operations here.
|
|
63
35
|
// This has not been implemented yet.
|
|
64
36
|
}
|
|
65
|
-
getInstance(syncRules) {
|
|
37
|
+
getInstance(syncRules, options) {
|
|
66
38
|
const storage = new PostgresSyncRulesStorage({
|
|
67
39
|
factory: this,
|
|
68
40
|
db: this.db,
|
|
69
41
|
sync_rules: syncRules,
|
|
70
42
|
batchLimits: this.options.config.batch_limits
|
|
71
43
|
});
|
|
72
|
-
|
|
44
|
+
if (!options?.skipLifecycleHooks) {
|
|
45
|
+
this.iterateListeners((cb) => cb.syncStorageCreated?.(storage));
|
|
46
|
+
}
|
|
73
47
|
storage.registerListener({
|
|
74
48
|
batchStarted: (batch) => {
|
|
75
|
-
|
|
76
|
-
batch.registerManagedListener(storage, {
|
|
49
|
+
batch.registerListener({
|
|
77
50
|
replicationEvent: (payload) => this.iterateListeners((cb) => cb.replicationEvent?.(payload))
|
|
78
51
|
});
|
|
79
52
|
}
|
|
@@ -135,36 +108,45 @@ export class PostgresBucketStorageFactory extends framework.DisposableObserver {
|
|
|
135
108
|
.first();
|
|
136
109
|
return newInstanceRow.id;
|
|
137
110
|
}
|
|
111
|
+
async getSystemIdentifier() {
|
|
112
|
+
const id = lib_postgres.utils.encodePostgresSystemIdentifier(await lib_postgres.utils.queryPostgresSystemIdentifier(this.db.pool));
|
|
113
|
+
return {
|
|
114
|
+
id,
|
|
115
|
+
type: lib_postgres.POSTGRES_CONNECTION_TYPE
|
|
116
|
+
};
|
|
117
|
+
}
|
|
138
118
|
// TODO possibly share implementation in abstract class
|
|
139
|
-
async configureSyncRules(
|
|
119
|
+
async configureSyncRules(options) {
|
|
140
120
|
const next = await this.getNextSyncRulesContent();
|
|
141
121
|
const active = await this.getActiveSyncRulesContent();
|
|
142
|
-
if (next?.sync_rules_content ==
|
|
122
|
+
if (next?.sync_rules_content == options.content) {
|
|
143
123
|
framework.logger.info('Sync rules from configuration unchanged');
|
|
144
124
|
return { updated: false };
|
|
145
125
|
}
|
|
146
|
-
else if (next == null && active?.sync_rules_content ==
|
|
126
|
+
else if (next == null && active?.sync_rules_content == options.content) {
|
|
147
127
|
framework.logger.info('Sync rules from configuration unchanged');
|
|
148
128
|
return { updated: false };
|
|
149
129
|
}
|
|
150
130
|
else {
|
|
151
131
|
framework.logger.info('Sync rules updated from configuration');
|
|
152
|
-
const persisted_sync_rules = await this.updateSyncRules(
|
|
153
|
-
content: sync_rules,
|
|
154
|
-
lock: options?.lock
|
|
155
|
-
});
|
|
132
|
+
const persisted_sync_rules = await this.updateSyncRules(options);
|
|
156
133
|
return { updated: true, persisted_sync_rules, lock: persisted_sync_rules.current_lock ?? undefined };
|
|
157
134
|
}
|
|
158
135
|
}
|
|
159
136
|
async updateSyncRules(options) {
|
|
160
137
|
// TODO some shared implementation for this might be nice
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
138
|
+
if (options.validate) {
|
|
139
|
+
// Parse and validate before applying any changes
|
|
140
|
+
sync_rules.SqlSyncRules.fromYaml(options.content, {
|
|
141
|
+
// No schema-based validation at this point
|
|
142
|
+
schema: undefined,
|
|
143
|
+
defaultSchema: 'not_applicable', // Not needed for validation
|
|
144
|
+
throwOnError: true
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
// Apply unconditionally. Any errors will be reported via the diagnostics API.
|
|
149
|
+
}
|
|
168
150
|
return this.db.transaction(async (db) => {
|
|
169
151
|
await db.sql `
|
|
170
152
|
UPDATE sync_rules
|
|
@@ -212,15 +194,16 @@ export class PostgresBucketStorageFactory extends framework.DisposableObserver {
|
|
|
212
194
|
return new PostgresPersistedSyncRulesContent(this.db, newSyncRulesRow);
|
|
213
195
|
});
|
|
214
196
|
}
|
|
215
|
-
async
|
|
197
|
+
async restartReplication(sync_rules_group_id) {
|
|
216
198
|
const next = await this.getNextSyncRulesContent();
|
|
217
199
|
const active = await this.getActiveSyncRulesContent();
|
|
218
200
|
// In both the below cases, we create a new sync rules instance.
|
|
219
|
-
// The current one will continue
|
|
220
|
-
if (next != null && next.
|
|
201
|
+
// The current one will continue serving sync requests until the next one has finished processing.
|
|
202
|
+
if (next != null && next.id == sync_rules_group_id) {
|
|
221
203
|
// We need to redo the "next" sync rules
|
|
222
204
|
await this.updateSyncRules({
|
|
223
|
-
content: next.sync_rules_content
|
|
205
|
+
content: next.sync_rules_content,
|
|
206
|
+
validate: false
|
|
224
207
|
});
|
|
225
208
|
// Pro-actively stop replicating
|
|
226
209
|
await this.db.sql `
|
|
@@ -232,16 +215,29 @@ export class PostgresBucketStorageFactory extends framework.DisposableObserver {
|
|
|
232
215
|
AND state = ${{ value: storage.SyncRuleState.PROCESSING, type: 'varchar' }}
|
|
233
216
|
`.execute();
|
|
234
217
|
}
|
|
235
|
-
else if (next == null && active?.
|
|
218
|
+
else if (next == null && active?.id == sync_rules_group_id) {
|
|
236
219
|
// Slot removed for "active" sync rules, while there is no "next" one.
|
|
237
220
|
await this.updateSyncRules({
|
|
238
|
-
content: active.sync_rules_content
|
|
221
|
+
content: active.sync_rules_content,
|
|
222
|
+
validate: false
|
|
239
223
|
});
|
|
240
|
-
// Pro-actively stop replicating
|
|
224
|
+
// Pro-actively stop replicating, but still serve clients with existing data
|
|
241
225
|
await this.db.sql `
|
|
242
226
|
UPDATE sync_rules
|
|
243
227
|
SET
|
|
244
|
-
state = ${{ value: storage.SyncRuleState.
|
|
228
|
+
state = ${{ value: storage.SyncRuleState.ERRORED, type: 'varchar' }}
|
|
229
|
+
WHERE
|
|
230
|
+
id = ${{ value: active.id, type: 'int4' }}
|
|
231
|
+
AND state = ${{ value: storage.SyncRuleState.ACTIVE, type: 'varchar' }}
|
|
232
|
+
`.execute();
|
|
233
|
+
}
|
|
234
|
+
else if (next != null && active?.id == sync_rules_group_id) {
|
|
235
|
+
// Already have "next" sync rules - don't update any.
|
|
236
|
+
// Pro-actively stop replicating, but still serve clients with existing data
|
|
237
|
+
await this.db.sql `
|
|
238
|
+
UPDATE sync_rules
|
|
239
|
+
SET
|
|
240
|
+
state = ${{ value: storage.SyncRuleState.ERRORED, type: 'varchar' }}
|
|
245
241
|
WHERE
|
|
246
242
|
id = ${{ value: active.id, type: 'int4' }}
|
|
247
243
|
AND state = ${{ value: storage.SyncRuleState.ACTIVE, type: 'varchar' }}
|
|
@@ -261,6 +257,7 @@ export class PostgresBucketStorageFactory extends framework.DisposableObserver {
|
|
|
261
257
|
sync_rules
|
|
262
258
|
WHERE
|
|
263
259
|
state = ${{ value: storage.SyncRuleState.ACTIVE, type: 'varchar' }}
|
|
260
|
+
OR state = ${{ value: storage.SyncRuleState.ERRORED, type: 'varchar' }}
|
|
264
261
|
ORDER BY
|
|
265
262
|
id DESC
|
|
266
263
|
LIMIT
|
|
@@ -325,109 +322,22 @@ export class PostgresBucketStorageFactory extends framework.DisposableObserver {
|
|
|
325
322
|
.rows();
|
|
326
323
|
return rows.map((row) => new PostgresPersistedSyncRulesContent(this.db, row));
|
|
327
324
|
}
|
|
328
|
-
async
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
last_checkpoint,
|
|
333
|
-
last_checkpoint_lsn
|
|
334
|
-
FROM
|
|
335
|
-
sync_rules
|
|
336
|
-
WHERE
|
|
337
|
-
state = ${{ value: storage.SyncRuleState.ACTIVE, type: 'varchar' }}
|
|
338
|
-
ORDER BY
|
|
339
|
-
id DESC
|
|
340
|
-
LIMIT
|
|
341
|
-
1
|
|
342
|
-
`
|
|
343
|
-
.decoded(models.ActiveCheckpoint)
|
|
344
|
-
.first();
|
|
345
|
-
return this.makeActiveCheckpoint(activeCheckpoint);
|
|
346
|
-
}
|
|
347
|
-
async *watchWriteCheckpoint(user_id, signal) {
|
|
348
|
-
let lastCheckpoint = null;
|
|
349
|
-
let lastWriteCheckpoint = null;
|
|
350
|
-
const iter = wrapWithAbort(this.sharedIterator, signal);
|
|
351
|
-
for await (const cp of iter) {
|
|
352
|
-
const { checkpoint, lsn } = cp;
|
|
353
|
-
// lsn changes are not important by itself.
|
|
354
|
-
// What is important is:
|
|
355
|
-
// 1. checkpoint (op_id) changes.
|
|
356
|
-
// 2. write checkpoint changes for the specific user
|
|
357
|
-
const bucketStorage = await cp.getBucketStorage();
|
|
358
|
-
if (!bucketStorage) {
|
|
359
|
-
continue;
|
|
360
|
-
}
|
|
361
|
-
const lsnFilters = lsn ? { 1: lsn } : {};
|
|
362
|
-
const currentWriteCheckpoint = await bucketStorage.lastWriteCheckpoint({
|
|
363
|
-
user_id,
|
|
364
|
-
heads: {
|
|
365
|
-
...lsnFilters
|
|
366
|
-
}
|
|
367
|
-
});
|
|
368
|
-
if (currentWriteCheckpoint == lastWriteCheckpoint && checkpoint == lastCheckpoint) {
|
|
369
|
-
// No change - wait for next one
|
|
370
|
-
// In some cases, many LSNs may be produced in a short time.
|
|
371
|
-
// Add a delay to throttle the write checkpoint lookup a bit.
|
|
372
|
-
await timers.setTimeout(20 + 10 * Math.random());
|
|
373
|
-
continue;
|
|
374
|
-
}
|
|
375
|
-
lastWriteCheckpoint = currentWriteCheckpoint;
|
|
376
|
-
lastCheckpoint = checkpoint;
|
|
377
|
-
yield { base: cp, writeCheckpoint: currentWriteCheckpoint };
|
|
325
|
+
async getActiveStorage() {
|
|
326
|
+
const content = await this.getActiveSyncRulesContent();
|
|
327
|
+
if (content == null) {
|
|
328
|
+
return null;
|
|
378
329
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
state = ${{ type: 'varchar', value: storage.SyncRuleState.ACTIVE }}
|
|
390
|
-
LIMIT
|
|
391
|
-
1
|
|
392
|
-
`
|
|
393
|
-
.decoded(models.ActiveCheckpoint)
|
|
394
|
-
.first();
|
|
395
|
-
const sink = new sync.LastValueSink(undefined);
|
|
396
|
-
const disposeListener = this.db.registerListener({
|
|
397
|
-
notification: (notification) => sink.next(notification.payload)
|
|
398
|
-
});
|
|
399
|
-
signal.addEventListener('aborted', async () => {
|
|
400
|
-
disposeListener();
|
|
401
|
-
sink.complete();
|
|
402
|
-
});
|
|
403
|
-
yield this.makeActiveCheckpoint(doc);
|
|
404
|
-
let lastOp = null;
|
|
405
|
-
for await (const payload of sink.withSignal(signal)) {
|
|
406
|
-
if (signal.aborted) {
|
|
407
|
-
return;
|
|
408
|
-
}
|
|
409
|
-
const notification = models.ActiveCheckpointNotification.decode(payload);
|
|
410
|
-
const activeCheckpoint = this.makeActiveCheckpoint(notification.active_checkpoint);
|
|
411
|
-
if (lastOp == null || activeCheckpoint.lsn != lastOp.lsn || activeCheckpoint.checkpoint != lastOp.checkpoint) {
|
|
412
|
-
lastOp = activeCheckpoint;
|
|
413
|
-
yield activeCheckpoint;
|
|
414
|
-
}
|
|
330
|
+
// It is important that this instance is cached.
|
|
331
|
+
// Not for the instance construction itself, but to ensure that internal caches on the instance
|
|
332
|
+
// are re-used properly.
|
|
333
|
+
if (this.activeStorageCache?.group_id == content.id) {
|
|
334
|
+
return this.activeStorageCache;
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
const instance = this.getInstance(content);
|
|
338
|
+
this.activeStorageCache = instance;
|
|
339
|
+
return instance;
|
|
415
340
|
}
|
|
416
|
-
}
|
|
417
|
-
makeActiveCheckpoint(row) {
|
|
418
|
-
return {
|
|
419
|
-
checkpoint: utils.timestampToOpId(row?.last_checkpoint ?? 0n),
|
|
420
|
-
lsn: row?.last_checkpoint_lsn ?? null,
|
|
421
|
-
hasSyncRules() {
|
|
422
|
-
return row != null;
|
|
423
|
-
},
|
|
424
|
-
getBucketStorage: async () => {
|
|
425
|
-
if (row == null) {
|
|
426
|
-
return null;
|
|
427
|
-
}
|
|
428
|
-
return (await this.storageCache.fetch(Number(row.id))) ?? null;
|
|
429
|
-
}
|
|
430
|
-
};
|
|
431
341
|
}
|
|
432
342
|
}
|
|
433
343
|
//# 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":"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"}
|