@powersync/service-core 1.25.0 → 1.26.1
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 +52 -0
- package/dist/api/diagnostics.js +2 -0
- package/dist/api/diagnostics.js.map +1 -1
- package/dist/entry/commands/compact-action.js +28 -24
- package/dist/entry/commands/compact-action.js.map +1 -1
- package/dist/metrics/metrics-interfaces.d.ts +5 -1
- package/dist/metrics/metrics-interfaces.js.map +1 -1
- package/dist/metrics/open-telemetry/MetricAttributeFilteringExporter.d.ts +36 -0
- package/dist/metrics/open-telemetry/MetricAttributeFilteringExporter.js +70 -0
- package/dist/metrics/open-telemetry/MetricAttributeFilteringExporter.js.map +1 -0
- package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.js +6 -1
- package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.js.map +1 -1
- package/dist/metrics/open-telemetry/util.js +7 -3
- package/dist/metrics/open-telemetry/util.js.map +1 -1
- package/dist/replication/AbstractReplicator.js +16 -6
- package/dist/replication/AbstractReplicator.js.map +1 -1
- package/dist/routes/configure-fastify.d.ts +9 -0
- package/dist/routes/endpoints/admin.d.ts +18 -0
- package/dist/routes/endpoints/admin.js +3 -1
- package/dist/routes/endpoints/admin.js.map +1 -1
- package/dist/routes/endpoints/sync-rules.js +3 -1
- package/dist/routes/endpoints/sync-rules.js.map +1 -1
- package/dist/storage/BucketStorageBatch.d.ts +2 -1
- package/dist/storage/BucketStorageBatch.js.map +1 -1
- package/dist/storage/BucketStorageFactory.d.ts +28 -4
- package/dist/storage/BucketStorageFactory.js +8 -4
- package/dist/storage/BucketStorageFactory.js.map +1 -1
- package/dist/storage/PersistedSyncConfigContent.d.ts +2 -0
- package/dist/storage/PersistedSyncConfigContent.js +23 -10
- package/dist/storage/PersistedSyncConfigContent.js.map +1 -1
- package/dist/storage/ReplicationEventPayload.d.ts +6 -1
- package/dist/storage/SourceTable.d.ts +13 -5
- package/dist/storage/SourceTable.js +8 -4
- package/dist/storage/SourceTable.js.map +1 -1
- package/dist/storage/StorageVersionConfig.d.ts +4 -0
- package/dist/storage/StorageVersionConfig.js +10 -1
- package/dist/storage/StorageVersionConfig.js.map +1 -1
- package/dist/storage/SyncRulesBucketStorage.d.ts +39 -7
- package/dist/storage/SyncRulesBucketStorage.js.map +1 -1
- package/dist/storage/WriteCheckpointAPI.d.ts +25 -3
- package/dist/storage/WriteCheckpointAPI.js.map +1 -1
- package/dist/storage/implementation/BucketDefinitionMapping.d.ts +23 -7
- package/dist/storage/implementation/BucketDefinitionMapping.js +88 -14
- package/dist/storage/implementation/BucketDefinitionMapping.js.map +1 -1
- package/dist/storage/implementation/IncrementalReprocessingSyncConfigLog.js +9 -1
- package/dist/storage/implementation/IncrementalReprocessingSyncConfigLog.js.map +1 -1
- package/dist/storage/storage-metrics.js +120 -4
- package/dist/storage/storage-metrics.js.map +1 -1
- package/dist/sync/BucketChecksumState.d.ts +1 -1
- package/dist/sync/BucketChecksumState.js.map +1 -1
- package/dist/sync/sync.js +37 -9
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/util.d.ts +1 -1
- package/dist/sync/util.js +13 -1
- package/dist/sync/util.js.map +1 -1
- package/dist/util/config/compound-config-collector.js +5 -0
- package/dist/util/config/compound-config-collector.js.map +1 -1
- package/dist/util/config/sync-rules/impl/base64-sync-rules-collector.js +1 -0
- package/dist/util/config/sync-rules/impl/base64-sync-rules-collector.js.map +1 -1
- package/dist/util/config/sync-rules/impl/filesystem-sync-rules-collector.js +1 -0
- package/dist/util/config/sync-rules/impl/filesystem-sync-rules-collector.js.map +1 -1
- package/dist/util/config/sync-rules/sync-rules-provider.d.ts +2 -0
- package/dist/util/config/sync-rules/sync-rules-provider.js +3 -0
- package/dist/util/config/sync-rules/sync-rules-provider.js.map +1 -1
- package/dist/util/config/types.d.ts +1 -0
- package/dist/util/protocol-types.d.ts +4 -4
- package/dist/util/protocol-types.js +3 -2
- package/dist/util/protocol-types.js.map +1 -1
- package/dist/util/utils.d.ts +1 -0
- package/dist/util/utils.js +15 -0
- package/dist/util/utils.js.map +1 -1
- package/package.json +6 -5
- package/src/api/diagnostics.ts +2 -0
- package/src/entry/commands/compact-action.ts +32 -24
- package/src/metrics/metrics-interfaces.ts +6 -1
- package/src/metrics/open-telemetry/MetricAttributeFilteringExporter.ts +85 -0
- package/src/metrics/open-telemetry/OpenTelemetryMetricsFactory.ts +7 -2
- package/src/metrics/open-telemetry/util.ts +7 -3
- package/src/replication/AbstractReplicator.ts +22 -6
- package/src/routes/endpoints/admin.ts +3 -1
- package/src/routes/endpoints/sync-rules.ts +3 -1
- package/src/storage/BucketStorageBatch.ts +2 -1
- package/src/storage/BucketStorageFactory.ts +44 -8
- package/src/storage/PersistedSyncConfigContent.ts +26 -11
- package/src/storage/ReplicationEventPayload.ts +6 -1
- package/src/storage/SourceTable.ts +17 -4
- package/src/storage/StorageVersionConfig.ts +11 -1
- package/src/storage/SyncRulesBucketStorage.ts +47 -7
- package/src/storage/WriteCheckpointAPI.ts +32 -3
- package/src/storage/implementation/BucketDefinitionMapping.ts +120 -17
- package/src/storage/implementation/IncrementalReprocessingSyncConfigLog.ts +22 -5
- package/src/storage/storage-metrics.ts +154 -8
- package/src/sync/BucketChecksumState.ts +3 -1
- package/src/sync/sync.ts +40 -11
- package/src/sync/util.ts +25 -9
- package/src/util/config/compound-config-collector.ts +6 -0
- package/src/util/config/sync-rules/impl/base64-sync-rules-collector.ts +1 -0
- package/src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts +1 -0
- package/src/util/config/sync-rules/sync-rules-provider.ts +5 -0
- package/src/util/config/types.ts +1 -0
- package/src/util/protocol-types.ts +3 -2
- package/src/util/utils.ts +14 -0
- package/test/src/AbstractReplicator.test.ts +30 -0
- package/test/src/MetricAttributeFilteringExporter.test.ts +96 -0
- package/test/src/PersistedSyncConfigContent.test.ts +152 -0
- package/test/src/config.test.ts +40 -0
- package/test/src/diagnostics.test.ts +25 -0
- package/test/src/routes/admin.test.ts +8 -2
- package/test/src/routes/stream.test.ts +123 -2
- package/test/src/storage/SourceTable.test.ts +4 -1
- package/test/src/storage-metrics.test.ts +148 -0
- package/test/src/sync/util.test.ts +34 -0
- package/test/src/util/utils.test.ts +23 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -2,10 +2,12 @@ import { SyncRulesConfig } from '../types.js';
|
|
|
2
2
|
export interface SyncRulesProvider {
|
|
3
3
|
get(): Promise<string | undefined>;
|
|
4
4
|
readonly exitOnError: boolean;
|
|
5
|
+
readonly versionLabel: string | undefined;
|
|
5
6
|
}
|
|
6
7
|
export declare class ConfigurationFileSyncRulesProvider implements SyncRulesProvider {
|
|
7
8
|
private config;
|
|
8
9
|
constructor(config: SyncRulesConfig);
|
|
9
10
|
get(): Promise<string | undefined>;
|
|
10
11
|
get exitOnError(): boolean;
|
|
12
|
+
get versionLabel(): string | undefined;
|
|
11
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-rules-provider.js","sourceRoot":"","sources":["../../../../src/util/config/sync-rules/sync-rules-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-rules-provider.js","sourceRoot":"","sources":["../../../../src/util/config/sync-rules/sync-rules-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAU7B,MAAM,OAAO,kCAAkC;IACzB;IAApB,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAE/C,KAAK,CAAC,GAAG;QACP,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -20,14 +20,14 @@ export declare const RequestedStreamSubscription: t.ObjectCodec<{
|
|
|
20
20
|
/**
|
|
21
21
|
* An optional dictionary of parameters to pass to this specific stream.
|
|
22
22
|
*/
|
|
23
|
-
parameters: t.
|
|
23
|
+
parameters: t.Codec<Record<string, any> | null, Record<string, any> | null>;
|
|
24
24
|
/**
|
|
25
25
|
* Set when the client wishes to re-assign a different priority to this stream.
|
|
26
26
|
*
|
|
27
27
|
* Streams and sync rules can also assign a default priority, but clients are allowed to override those. This can be
|
|
28
28
|
* useful when the priority for partial syncs depends on e.g. the current page opened in a client.
|
|
29
29
|
*/
|
|
30
|
-
override_priority: t.
|
|
30
|
+
override_priority: t.Codec<number | null, number | null>;
|
|
31
31
|
}>;
|
|
32
32
|
export type RequestedStreamSubscription = t.Decoded<typeof RequestedStreamSubscription>;
|
|
33
33
|
/**
|
|
@@ -51,14 +51,14 @@ export declare const StreamSubscriptionRequest: t.ObjectCodec<{
|
|
|
51
51
|
/**
|
|
52
52
|
* An optional dictionary of parameters to pass to this specific stream.
|
|
53
53
|
*/
|
|
54
|
-
parameters: t.
|
|
54
|
+
parameters: t.Codec<Record<string, any> | null, Record<string, any> | null>;
|
|
55
55
|
/**
|
|
56
56
|
* Set when the client wishes to re-assign a different priority to this stream.
|
|
57
57
|
*
|
|
58
58
|
* Streams and sync rules can also assign a default priority, but clients are allowed to override those. This can be
|
|
59
59
|
* useful when the priority for partial syncs depends on e.g. the current page opened in a client.
|
|
60
60
|
*/
|
|
61
|
-
override_priority: t.
|
|
61
|
+
override_priority: t.Codec<number | null, number | null>;
|
|
62
62
|
}>>;
|
|
63
63
|
}>;
|
|
64
64
|
export type StreamSubscriptionRequest = t.Decoded<typeof StreamSubscriptionRequest>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { orNull } from '@powersync/service-types';
|
|
1
2
|
import * as t from 'ts-codec';
|
|
2
3
|
export const BucketRequest = t.object({
|
|
3
4
|
name: t.string,
|
|
@@ -17,14 +18,14 @@ export const RequestedStreamSubscription = t.object({
|
|
|
17
18
|
/**
|
|
18
19
|
* An optional dictionary of parameters to pass to this specific stream.
|
|
19
20
|
*/
|
|
20
|
-
parameters:
|
|
21
|
+
parameters: orNull(t.record(t.any)),
|
|
21
22
|
/**
|
|
22
23
|
* Set when the client wishes to re-assign a different priority to this stream.
|
|
23
24
|
*
|
|
24
25
|
* Streams and sync rules can also assign a default priority, but clients are allowed to override those. This can be
|
|
25
26
|
* useful when the priority for partial syncs depends on e.g. the current page opened in a client.
|
|
26
27
|
*/
|
|
27
|
-
override_priority:
|
|
28
|
+
override_priority: orNull(t.number)
|
|
28
29
|
});
|
|
29
30
|
/**
|
|
30
31
|
* An overview of all subscribed streams as part of a streaming sync request.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol-types.js","sourceRoot":"","sources":["../../src/util/protocol-types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM;IAEd;;OAEG;IACH,KAAK,EAAE,CAAC,CAAC,MAAM;CAChB,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC,MAAM;IAChB;;OAEG;IACH,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"protocol-types.js","sourceRoot":"","sources":["../../src/util/protocol-types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM;IAEd;;OAEG;IACH,KAAK,EAAE,CAAC,CAAC,MAAM;CAChB,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC,MAAM;IAChB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC;;;;;OAKG;IACH,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;CACpC,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;IAEtC;;OAEG;IACH,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC;CACpD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C;;OAEG;IACH,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE;IAE1C;;OAEG;IACH,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAElC;;OAEG;IACH,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;IAEtC;;OAEG;IACH,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;IAE9B;;OAEG;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAEtC;;OAEG;IACH,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAE3C;;OAEG;IACH,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE;IAE9B;;OAEG;IACH,OAAO,EAAE,yBAAyB,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC"}
|
package/dist/util/utils.d.ts
CHANGED
package/dist/util/utils.js
CHANGED
|
@@ -252,4 +252,19 @@ export function estimateRowSize(record) {
|
|
|
252
252
|
}
|
|
253
253
|
return size;
|
|
254
254
|
}
|
|
255
|
+
export function formatBytes(bytes) {
|
|
256
|
+
if (typeof bytes == 'bigint') {
|
|
257
|
+
bytes = Number(bytes); // We round either way
|
|
258
|
+
}
|
|
259
|
+
if (bytes >= 1024 * 1024 * 1024) {
|
|
260
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}GB`;
|
|
261
|
+
}
|
|
262
|
+
else if (bytes >= 1024 * 1024) {
|
|
263
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
264
|
+
}
|
|
265
|
+
else if (bytes >= 1024) {
|
|
266
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
267
|
+
}
|
|
268
|
+
return `${bytes}B`;
|
|
269
|
+
}
|
|
255
270
|
//# sourceMappingURL=utils.js.map
|
package/dist/util/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/util/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAK7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AA2B1E,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAE/E,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAA8B;IAC1D,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,EAAU,EAAE,IAAY;IAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7B,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7B,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAgB;IACrD,6EAA6E;IAC7E,6CAA6C;IAC7C,IAAI,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,qBAAqB,CAAC,yBAAyB,EAAE,KAAK,OAAO,EAAE,GAAG,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAqB,EAAE,OAAoB;IACvE,mBAAmB;IACnB,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEzD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAElD,KAAK,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YACd,QAAQ;YACR,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACjE,UAAU;gBACV,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,YAAY;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,cAAc,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;QAC5C,cAAc,EAAE,CAAC,GAAG,QAAQ,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,CAAS;IAC/C,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAmC;IACnE,OAAO,iBAAiB,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,CAAiB,EAAE,CAA0C;IAC9F,MAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,oCAAoC;QACpC,MAAM,IAAI,qBAAqB,CAAC,wBAAwB,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,CAA0C,EAC1C,CAA0C;IAE1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,aAAa;YACb,OAAO,CAAC,CAAC;QACX,CAAC;QACD,QAAQ;QACR,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,MAAM;gBACN,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,eAAe,CAAC;gBACrD,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,YAAY;aAChC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,MAAM;gBACN,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC;gBACnE,YAAY,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;aAC9C,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;SAAM,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,OAAO;YACL,MAAM;YACN,eAAe,EAAE,CAAC;YAClB,YAAY,EAAE,CAAC;SAChB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAoC,EACpC,OAAmC;IAEnC,IAAI,MAAM,GAAwB,EAAE,CAAC;IACrC,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAoC,EACpC,OAAmC;IAEnC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACxB,gDAAgD;QAChD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE1D,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAyB;IACtD,+EAA+E;IAC/E,4EAA4E;IAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAI,GAAqC;IACvE,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAkB,EAClB,GAAqC;IAErC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,gDAAgD;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,UAAwB;IACnD,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,QAAQ,EAAE,CAAC;gBACb,aAAa,GAAG,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAkB,CAAC,CAAC;YAC3E,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,EAAE,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,QAAQ,EAAE,CAAC;gBACb,aAAa,GAAG,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAkB,CAAC,CAAC;YAC3E,CAAC;YACD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,aAAa,GAAG,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,QAAkB,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,EAAE,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC;YAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,aAAa,GAAG,EAAE,CAAC,QAAkB,CAAC;QACxC,CAAC;aAAM,IAAI,EAAE,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;YAC3B,aAAa,GAAG,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,QAAkB,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU,GAAiB;QAC7B,wDAAwD;QACxD,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE;QACpD,GAAG,IAAI;KACR,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,MAAM,CAAC,KAAiB;IAC/B,OAAO,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiD;IAC/E,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QACxB,+CAA+C;QAC/C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE,CAAC;YACpC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QACvB,CAAC;aAAM,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YACvC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/util/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "1.
|
|
7
|
+
"version": "1.26.1",
|
|
8
8
|
"license": "FSL-1.1-ALv2",
|
|
9
9
|
"type": "module",
|
|
10
10
|
"exports": "./dist/index.js",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@js-sdsl/ordered-set": "^4.4.2",
|
|
13
13
|
"@opentelemetry/api": "^1.9.0",
|
|
14
|
+
"@opentelemetry/core": "^2.0.1",
|
|
14
15
|
"@opentelemetry/exporter-metrics-otlp-http": "^0.203.0",
|
|
15
16
|
"@opentelemetry/exporter-prometheus": "^0.203.0",
|
|
16
17
|
"@opentelemetry/resources": "^2.0.1",
|
|
@@ -32,11 +33,11 @@
|
|
|
32
33
|
"uuid": "^14.0.0",
|
|
33
34
|
"winston": "^3.13.0",
|
|
34
35
|
"yaml": "^2.8.3",
|
|
35
|
-
"@powersync/lib-services-framework": "0.10.
|
|
36
|
+
"@powersync/lib-services-framework": "0.10.2",
|
|
36
37
|
"@powersync/service-jsonbig": "0.17.13",
|
|
37
|
-
"@powersync/service-rsocket-router": "0.2.
|
|
38
|
-
"@powersync/service-
|
|
39
|
-
"@powersync/service-
|
|
38
|
+
"@powersync/service-rsocket-router": "0.2.27",
|
|
39
|
+
"@powersync/service-types": "0.18.0",
|
|
40
|
+
"@powersync/service-sync-rules": "0.42.0"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@types/async": "^3.2.24",
|
package/src/api/diagnostics.ts
CHANGED
|
@@ -65,6 +65,7 @@ export async function getSyncRulesStatus(
|
|
|
65
65
|
parsed = singleConfig;
|
|
66
66
|
} catch (e) {
|
|
67
67
|
return {
|
|
68
|
+
version_label: syncConfig.version_label,
|
|
68
69
|
content: include_content ? syncConfig.sync_rules_content : undefined,
|
|
69
70
|
connections: [],
|
|
70
71
|
errors: [{ level: 'fatal', message: e.message, ts: now }]
|
|
@@ -221,6 +222,7 @@ export async function getSyncRulesStatus(
|
|
|
221
222
|
}
|
|
222
223
|
|
|
223
224
|
return {
|
|
225
|
+
version_label: syncConfig.version_label,
|
|
224
226
|
content: include_content ? syncConfig.sync_rules_content : undefined,
|
|
225
227
|
connections: [
|
|
226
228
|
{
|
|
@@ -28,7 +28,11 @@ export function registerCompactAction(program: Command) {
|
|
|
28
28
|
.command(COMMAND_NAME)
|
|
29
29
|
.option(`-b, --buckets [buckets]`, 'Full bucket names, comma-separated (e.g., "global[],mybucket[\\"user1\\"]")')
|
|
30
30
|
.option('-p, --parameter-indexes', 'Compacting parameter indexes. Defaults to set unless --buckets is provided.')
|
|
31
|
-
.option('--no-parameter-indexes', 'Disabling compacting parameter indexes.')
|
|
31
|
+
.option('--no-parameter-indexes', 'Disabling compacting parameter indexes.')
|
|
32
|
+
.option(
|
|
33
|
+
'--incremental-only',
|
|
34
|
+
'[EXPERIMENTAL] Perform incremental compacting only. Parameter compaction runs on supported storage versions.'
|
|
35
|
+
);
|
|
32
36
|
|
|
33
37
|
wrapConfigCommand(compactCommand);
|
|
34
38
|
|
|
@@ -48,8 +52,9 @@ export function registerCompactAction(program: Command) {
|
|
|
48
52
|
}
|
|
49
53
|
}
|
|
50
54
|
|
|
51
|
-
|
|
55
|
+
const incremental: boolean = options.incrementalOnly ?? false;
|
|
52
56
|
|
|
57
|
+
let compactParameters: boolean | null = options.parameterIndexes;
|
|
53
58
|
if (buckets == null) {
|
|
54
59
|
logger.info('Compacting storage for all buckets...');
|
|
55
60
|
} else if (buckets.length == 0) {
|
|
@@ -87,29 +92,32 @@ export function registerCompactAction(program: Command) {
|
|
|
87
92
|
Date.now() - config.api_parameters.checkpoint_request_retention_minutes * MINUTE_MS
|
|
88
93
|
);
|
|
89
94
|
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
95
|
+
const streams = await bucketStorage.getReplicatingReplicationStreams();
|
|
96
|
+
for (let stream of streams) {
|
|
97
|
+
const storage = bucketStorage.getInstance(stream);
|
|
98
|
+
const compactParameterData =
|
|
99
|
+
(compactParameters ?? buckets == null) && (!incremental || storage.supportsIncrementalParameterCompaction());
|
|
100
|
+
logger.info(`[${stream.replicationStreamName}] Performing compaction...`);
|
|
101
|
+
if (buckets != null) {
|
|
102
|
+
await storage.compact({
|
|
103
|
+
memoryLimitMB: COMPACT_MEMORY_LIMIT_MB,
|
|
104
|
+
compactBuckets: buckets,
|
|
105
|
+
compactParameterData,
|
|
106
|
+
incrementalOnly: incremental,
|
|
107
|
+
deleteCheckpointRequestsBefore,
|
|
108
|
+
signal: abortController.signal
|
|
109
|
+
});
|
|
110
|
+
} else {
|
|
111
|
+
await storage.compact({
|
|
112
|
+
memoryLimitMB: COMPACT_MEMORY_LIMIT_MB,
|
|
113
|
+
compactParameterData,
|
|
114
|
+
incrementalOnly: incremental,
|
|
115
|
+
deleteCheckpointRequestsBefore,
|
|
116
|
+
signal: abortController.signal
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
logger.info(`[${stream.replicationStreamName}] Successfully compacted storage.`);
|
|
111
120
|
}
|
|
112
|
-
logger.info('Successfully compacted storage.');
|
|
113
121
|
} catch (e) {
|
|
114
122
|
logger.error(`Failed to compact:`, e);
|
|
115
123
|
// Indirectly triggers lifeCycleEngine.stop
|
|
@@ -19,7 +19,12 @@ export interface ObservableGauge {
|
|
|
19
19
|
* Set a value provider that provides the value for the gauge at the time of observation.
|
|
20
20
|
* @param valueProvider
|
|
21
21
|
*/
|
|
22
|
-
setValueProvider(valueProvider: () => Promise<number | undefined>): void;
|
|
22
|
+
setValueProvider(valueProvider: () => Promise<number | ObservableGaugeObservation[] | undefined>): void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface ObservableGaugeObservation {
|
|
26
|
+
value: number;
|
|
27
|
+
attributes?: Record<string, string>;
|
|
23
28
|
}
|
|
24
29
|
|
|
25
30
|
export enum Precision {
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Attributes } from '@opentelemetry/api';
|
|
2
|
+
import { ExportResult } from '@opentelemetry/core';
|
|
3
|
+
import {
|
|
4
|
+
AggregationSelector,
|
|
5
|
+
AggregationTemporalitySelector,
|
|
6
|
+
DataPoint,
|
|
7
|
+
DataPointType,
|
|
8
|
+
MetricData,
|
|
9
|
+
PushMetricExporter,
|
|
10
|
+
ResourceMetrics
|
|
11
|
+
} from '@opentelemetry/sdk-metrics';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Decorates a push exporter and removes selected attributes from every metric data point before
|
|
15
|
+
* delegating the export. The input metrics are not mutated, so another reader can export the
|
|
16
|
+
* original attributes.
|
|
17
|
+
*
|
|
18
|
+
* This exporter deliberately does not merge data points when filtering makes their attribute sets
|
|
19
|
+
* identical. Both points are forwarded with the same attributes. There is no generally correct
|
|
20
|
+
* merge operation at this layer: gauges, counters, and histograms have different aggregation
|
|
21
|
+
* semantics. Callers must therefore ensure that an excluded attribute does not distinguish data
|
|
22
|
+
* points for the same metric, resource, and instrumentation scope. Otherwise, the resulting
|
|
23
|
+
* duplicate series identity may be rejected or interpreted unpredictably downstream.
|
|
24
|
+
*
|
|
25
|
+
* Lifecycle methods and aggregation selection are delegated unchanged to the wrapped exporter.
|
|
26
|
+
*/
|
|
27
|
+
export class MetricAttributeFilteringExporter implements PushMetricExporter {
|
|
28
|
+
readonly selectAggregation?: AggregationSelector;
|
|
29
|
+
readonly selectAggregationTemporality?: AggregationTemporalitySelector;
|
|
30
|
+
|
|
31
|
+
constructor(
|
|
32
|
+
/** The exporter that receives the filtered copy of the metrics. */
|
|
33
|
+
private readonly delegate: PushMetricExporter,
|
|
34
|
+
/** Attribute names to remove from every exported data point. */
|
|
35
|
+
private readonly excludedAttributes: ReadonlySet<string>
|
|
36
|
+
) {
|
|
37
|
+
this.selectAggregation = delegate.selectAggregation?.bind(delegate);
|
|
38
|
+
this.selectAggregationTemporality = delegate.selectAggregationTemporality?.bind(delegate);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export(metrics: ResourceMetrics, resultCallback: (result: ExportResult) => void): void {
|
|
42
|
+
this.delegate.export(this.filterAttributes(metrics), resultCallback);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
forceFlush(): Promise<void> {
|
|
46
|
+
return this.delegate.forceFlush();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
shutdown(): Promise<void> {
|
|
50
|
+
return this.delegate.shutdown();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
private filterAttributes(metrics: ResourceMetrics): ResourceMetrics {
|
|
54
|
+
return {
|
|
55
|
+
...metrics,
|
|
56
|
+
scopeMetrics: metrics.scopeMetrics.map((scopeMetrics) => ({
|
|
57
|
+
...scopeMetrics,
|
|
58
|
+
metrics: scopeMetrics.metrics.map((metric) => this.filterMetricAttributes(metric))
|
|
59
|
+
}))
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private filterMetricAttributes(metric: MetricData): MetricData {
|
|
64
|
+
switch (metric.dataPointType) {
|
|
65
|
+
case DataPointType.SUM:
|
|
66
|
+
case DataPointType.GAUGE:
|
|
67
|
+
return { ...metric, dataPoints: metric.dataPoints.map((dataPoint) => this.filterDataPoint(dataPoint)) };
|
|
68
|
+
case DataPointType.HISTOGRAM:
|
|
69
|
+
return { ...metric, dataPoints: metric.dataPoints.map((dataPoint) => this.filterDataPoint(dataPoint)) };
|
|
70
|
+
case DataPointType.EXPONENTIAL_HISTOGRAM:
|
|
71
|
+
return { ...metric, dataPoints: metric.dataPoints.map((dataPoint) => this.filterDataPoint(dataPoint)) };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private filterDataPoint<T>(dataPoint: DataPoint<T>): DataPoint<T> {
|
|
76
|
+
return {
|
|
77
|
+
...dataPoint,
|
|
78
|
+
attributes: this.filterDataPointAttributes(dataPoint.attributes)
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
private filterDataPointAttributes(attributes: Attributes): Attributes {
|
|
83
|
+
return Object.fromEntries(Object.entries(attributes).filter(([name]) => !this.excludedAttributes.has(name)));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
MetricMetadata,
|
|
5
5
|
MetricsFactory,
|
|
6
6
|
ObservableGauge,
|
|
7
|
+
ObservableGaugeObservation,
|
|
7
8
|
Precision,
|
|
8
9
|
UpDownCounter
|
|
9
10
|
} from '../metrics-interfaces.js';
|
|
@@ -31,12 +32,16 @@ export class OpenTelemetryMetricsFactory implements MetricsFactory {
|
|
|
31
32
|
});
|
|
32
33
|
|
|
33
34
|
return {
|
|
34
|
-
setValueProvider(valueProvider: () => Promise<number | undefined>) {
|
|
35
|
+
setValueProvider(valueProvider: () => Promise<number | ObservableGaugeObservation[] | undefined>) {
|
|
35
36
|
gauge.addCallback(async (result) => {
|
|
36
37
|
const value = await valueProvider();
|
|
37
38
|
|
|
38
|
-
if (value
|
|
39
|
+
if (typeof value === 'number') {
|
|
39
40
|
result.observe(value);
|
|
41
|
+
} else if (value != undefined) {
|
|
42
|
+
for (const observation of value) {
|
|
43
|
+
result.observe(observation.value, observation.attributes);
|
|
44
|
+
}
|
|
40
45
|
}
|
|
41
46
|
});
|
|
42
47
|
}
|
|
@@ -4,6 +4,7 @@ import { MeterProvider, MetricReader, PeriodicExportingMetricReader } from '@ope
|
|
|
4
4
|
import { logger } from '@powersync/lib-services-framework';
|
|
5
5
|
import { ServiceContext } from '../../system/ServiceContext.js';
|
|
6
6
|
import { MetricsFactory } from '../metrics-interfaces.js';
|
|
7
|
+
import { MetricAttributeFilteringExporter } from './MetricAttributeFilteringExporter.js';
|
|
7
8
|
import { OpenTelemetryMetricsFactory } from './OpenTelemetryMetricsFactory.js';
|
|
8
9
|
|
|
9
10
|
import { resourceFromAttributes } from '@opentelemetry/resources';
|
|
@@ -29,10 +30,13 @@ export function createOpenTelemetryMetricsFactory(context: ServiceContext): Metr
|
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
if (!configuration.telemetry.disable_telemetry_sharing) {
|
|
33
|
+
const otlpExporter = new OTLPMetricExporter({
|
|
34
|
+
url: configuration.telemetry.internal_service_endpoint
|
|
35
|
+
});
|
|
32
36
|
const periodicExporter = new PeriodicExportingMetricReader({
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
// sync_config_id uniquely identifies these metric series after version_label is removed,
|
|
38
|
+
// so filtering cannot create duplicate data points.
|
|
39
|
+
exporter: new MetricAttributeFilteringExporter(otlpExporter, new Set(['version_label'])),
|
|
36
40
|
exportIntervalMillis: 1000 * 60 * 5 // 5 minutes
|
|
37
41
|
});
|
|
38
42
|
|
|
@@ -156,7 +156,8 @@ export abstract class AbstractReplicator<T extends AbstractReplicationJob = Abst
|
|
|
156
156
|
|
|
157
157
|
let configuredLock: storage.ReplicationLock | undefined = undefined;
|
|
158
158
|
if (loadedSyncConfig != null) {
|
|
159
|
-
this.
|
|
159
|
+
const versionLabel = this.syncRuleProvider.versionLabel;
|
|
160
|
+
this.logger.info(`Loaded sync config${versionLabel == null ? '' : ` ${versionLabel}`}`);
|
|
160
161
|
try {
|
|
161
162
|
// Configure new sync config, if they have changed.
|
|
162
163
|
// In that case, also immediately take out a lock, so that another process doesn't start replication on it.
|
|
@@ -165,7 +166,11 @@ export abstract class AbstractReplicator<T extends AbstractReplicationJob = Abst
|
|
|
165
166
|
// the same time.
|
|
166
167
|
|
|
167
168
|
const { lock } = await this.storage.configureSyncRules(
|
|
168
|
-
storage.updateSyncRulesFromYaml(loadedSyncConfig, {
|
|
169
|
+
storage.updateSyncRulesFromYaml(loadedSyncConfig, {
|
|
170
|
+
lock: true,
|
|
171
|
+
validate: this.syncRuleProvider.exitOnError,
|
|
172
|
+
version_label: versionLabel
|
|
173
|
+
})
|
|
169
174
|
);
|
|
170
175
|
if (lock) {
|
|
171
176
|
configuredLock = lock;
|
|
@@ -184,7 +189,11 @@ export abstract class AbstractReplicator<T extends AbstractReplicationJob = Abst
|
|
|
184
189
|
while (!this.stopped) {
|
|
185
190
|
await container.probes.touch();
|
|
186
191
|
try {
|
|
187
|
-
const refreshResult = await this.refresh({
|
|
192
|
+
const refreshResult = await this.refresh({
|
|
193
|
+
configuredLock,
|
|
194
|
+
loadedSyncConfig,
|
|
195
|
+
loadedVersionLabel: this.syncRuleProvider.versionLabel
|
|
196
|
+
});
|
|
188
197
|
if (refreshResult.replicationJobStarted || Date.now() >= fastRefreshDeadline) {
|
|
189
198
|
useFastRefresh = false;
|
|
190
199
|
}
|
|
@@ -216,6 +225,7 @@ export abstract class AbstractReplicator<T extends AbstractReplicationJob = Abst
|
|
|
216
225
|
private async refresh(options?: {
|
|
217
226
|
configuredLock?: storage.ReplicationLock;
|
|
218
227
|
loadedSyncConfig?: string;
|
|
228
|
+
loadedVersionLabel?: string;
|
|
219
229
|
}): Promise<{ replicationJobStarted: boolean }> {
|
|
220
230
|
if (this.stopped) {
|
|
221
231
|
return { replicationJobStarted: false };
|
|
@@ -233,7 +243,9 @@ export abstract class AbstractReplicator<T extends AbstractReplicationJob = Abst
|
|
|
233
243
|
const jobId = replicationStream.replicationJobId;
|
|
234
244
|
const existingJob = existingJobs.get(jobId);
|
|
235
245
|
const syncConfigMismatchMessage = 'Ignoring replication stream for sync config not loaded by this process';
|
|
236
|
-
if (
|
|
246
|
+
if (
|
|
247
|
+
!this.shouldHandleReplicationStream(replicationStream, options?.loadedSyncConfig, options?.loadedVersionLabel)
|
|
248
|
+
) {
|
|
237
249
|
this.logReplicationStreamInfoOnce(replicationStream, 'sync-config-mismatch', () => {
|
|
238
250
|
replicationStream.logger.info(syncConfigMismatchMessage);
|
|
239
251
|
});
|
|
@@ -371,7 +383,8 @@ export abstract class AbstractReplicator<T extends AbstractReplicationJob = Abst
|
|
|
371
383
|
*/
|
|
372
384
|
private shouldHandleReplicationStream(
|
|
373
385
|
replicationStream: storage.PersistedReplicationStream,
|
|
374
|
-
loadedSyncRules: string | undefined
|
|
386
|
+
loadedSyncRules: string | undefined,
|
|
387
|
+
loadedVersionLabel: string | undefined
|
|
375
388
|
) {
|
|
376
389
|
if (loadedSyncRules == null) {
|
|
377
390
|
return true;
|
|
@@ -380,7 +393,10 @@ export abstract class AbstractReplicator<T extends AbstractReplicationJob = Abst
|
|
|
380
393
|
const processingConfig = replicationStream.syncConfigContent.find(
|
|
381
394
|
(syncConfig) => syncConfig.syncConfigState == storage.SyncRuleState.PROCESSING
|
|
382
395
|
);
|
|
383
|
-
return
|
|
396
|
+
return (
|
|
397
|
+
processingConfig == null ||
|
|
398
|
+
(processingConfig.sync_rules_content == loadedSyncRules && processingConfig.version_label == loadedVersionLabel)
|
|
399
|
+
);
|
|
384
400
|
}
|
|
385
401
|
|
|
386
402
|
protected createJobId(syncRuleId: number) {
|
|
@@ -165,7 +165,9 @@ export const reprocess = routeDefinition({
|
|
|
165
165
|
storage.updateSyncRulesFromYaml(active.content.sync_rules_content, {
|
|
166
166
|
// This sync config already passed validation. But if the config is not valid anymore due
|
|
167
167
|
// to a service change, we do want to report the error here.
|
|
168
|
-
validate: true
|
|
168
|
+
validate: true,
|
|
169
|
+
version_label: active.content.version_label,
|
|
170
|
+
forceNewReplicationStream: true
|
|
169
171
|
})
|
|
170
172
|
);
|
|
171
173
|
|
|
@@ -180,7 +180,9 @@ export const reprocessSyncRules = routeDefinition({
|
|
|
180
180
|
updateSyncRulesFromYaml(sync_rules.sync_rules_content, {
|
|
181
181
|
// This sync config already passed validation. But if the rules are not valid anymore due
|
|
182
182
|
// to a service change, we do want to report the error here.
|
|
183
|
-
validate: true
|
|
183
|
+
validate: true,
|
|
184
|
+
version_label: sync_rules.version_label,
|
|
185
|
+
forceNewReplicationStream: true
|
|
184
186
|
})
|
|
185
187
|
);
|
|
186
188
|
return {
|
|
@@ -176,7 +176,8 @@ export interface BucketStorageBatch extends ObserverClient<BucketBatchStorageLis
|
|
|
176
176
|
* Queue a custom checkpoint request to be persisted after operations are
|
|
177
177
|
* flushed. Set `checkpoint_requested_at` when the custom checkpoint came from
|
|
178
178
|
* a client checkpoint request and should be cleaned up by request-retention
|
|
179
|
-
* compaction; omit it for persistent source-owned checkpoints.
|
|
179
|
+
* compaction; omit it for persistent source-owned checkpoints. Incremental
|
|
180
|
+
* event handlers should copy `event_id` from their {@link ReplicationEventPayload}.
|
|
180
181
|
*/
|
|
181
182
|
addCustomWriteCheckpoint(checkpoint: BatchedCustomWriteCheckpointOptions): void;
|
|
182
183
|
}
|