@powersync/service-core 0.0.0-dev-20250304151813 → 0.0.0-dev-20250306152715
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 +18 -4
- package/dist/api/api-index.d.ts +1 -0
- package/dist/api/api-index.js +1 -0
- package/dist/api/api-index.js.map +1 -1
- package/dist/api/api-metrics.d.ts +11 -0
- package/dist/api/api-metrics.js +30 -0
- package/dist/api/api-metrics.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/metrics/MetricsEngine.d.ts +21 -0
- package/dist/metrics/MetricsEngine.js +79 -0
- package/dist/metrics/MetricsEngine.js.map +1 -0
- package/dist/metrics/metrics-index.d.ts +4 -0
- package/dist/metrics/metrics-index.js +5 -0
- package/dist/metrics/metrics-index.js.map +1 -0
- package/dist/metrics/metrics-interfaces.d.ts +36 -0
- package/dist/metrics/metrics-interfaces.js +6 -0
- package/dist/metrics/metrics-interfaces.js.map +1 -0
- package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.d.ts +10 -0
- package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.js +51 -0
- package/dist/metrics/open-telemetry/OpenTelemetryMetricsFactory.js.map +1 -0
- package/dist/metrics/open-telemetry/util.d.ts +6 -0
- package/dist/metrics/open-telemetry/util.js +56 -0
- package/dist/metrics/open-telemetry/util.js.map +1 -0
- package/dist/replication/AbstractReplicationJob.d.ts +2 -0
- package/dist/replication/AbstractReplicationJob.js.map +1 -1
- package/dist/replication/AbstractReplicator.d.ts +3 -0
- package/dist/replication/AbstractReplicator.js +3 -0
- package/dist/replication/AbstractReplicator.js.map +1 -1
- package/dist/replication/ReplicationModule.d.ts +7 -0
- package/dist/replication/ReplicationModule.js +1 -0
- package/dist/replication/ReplicationModule.js.map +1 -1
- package/dist/replication/replication-index.d.ts +1 -0
- package/dist/replication/replication-index.js +1 -0
- package/dist/replication/replication-index.js.map +1 -1
- package/dist/replication/replication-metrics.d.ts +11 -0
- package/dist/replication/replication-metrics.js +39 -0
- package/dist/replication/replication-metrics.js.map +1 -0
- package/dist/routes/configure-fastify.d.ts +3 -3
- package/dist/routes/endpoints/checkpointing.d.ts +6 -6
- package/dist/routes/endpoints/socket-route.js +5 -5
- package/dist/routes/endpoints/socket-route.js.map +1 -1
- package/dist/routes/endpoints/sync-stream.js +6 -6
- package/dist/routes/endpoints/sync-stream.js.map +1 -1
- package/dist/storage/BucketStorageBatch.d.ts +2 -1
- package/dist/storage/BucketStorageBatch.js.map +1 -1
- package/dist/storage/ChecksumCache.d.ts +6 -6
- package/dist/storage/ChecksumCache.js +5 -6
- package/dist/storage/ChecksumCache.js.map +1 -1
- package/dist/storage/SyncRulesBucketStorage.d.ts +9 -9
- package/dist/storage/storage-index.d.ts +1 -0
- package/dist/storage/storage-index.js +1 -0
- package/dist/storage/storage-index.js.map +1 -1
- package/dist/storage/storage-metrics.d.ts +4 -0
- package/dist/storage/storage-metrics.js +56 -0
- package/dist/storage/storage-metrics.js.map +1 -0
- package/dist/sync/BucketChecksumState.d.ts +3 -3
- package/dist/sync/BucketChecksumState.js +3 -3
- package/dist/sync/BucketChecksumState.js.map +1 -1
- package/dist/sync/RequestTracker.d.ts +3 -0
- package/dist/sync/RequestTracker.js +8 -3
- package/dist/sync/RequestTracker.js.map +1 -1
- package/dist/sync/sync.d.ts +1 -1
- package/dist/sync/sync.js +8 -6
- package/dist/sync/sync.js.map +1 -1
- package/dist/system/ServiceContext.d.ts +3 -3
- package/dist/system/ServiceContext.js +7 -3
- package/dist/system/ServiceContext.js.map +1 -1
- package/dist/util/protocol-types.d.ts +10 -10
- package/dist/util/utils.d.ts +12 -2
- package/dist/util/utils.js +5 -1
- package/dist/util/utils.js.map +1 -1
- package/package.json +8 -8
- package/src/api/api-index.ts +1 -0
- package/src/api/api-metrics.ts +35 -0
- package/src/index.ts +2 -2
- package/src/metrics/MetricsEngine.ts +98 -0
- package/src/metrics/metrics-index.ts +4 -0
- package/src/metrics/metrics-interfaces.ts +41 -0
- package/src/metrics/open-telemetry/OpenTelemetryMetricsFactory.ts +66 -0
- package/src/metrics/open-telemetry/util.ts +74 -0
- package/src/replication/AbstractReplicationJob.ts +2 -0
- package/src/replication/AbstractReplicator.ts +7 -0
- package/src/replication/ReplicationModule.ts +10 -0
- package/src/replication/replication-index.ts +1 -0
- package/src/replication/replication-metrics.ts +45 -0
- package/src/routes/endpoints/socket-route.ts +6 -5
- package/src/routes/endpoints/sync-stream.ts +7 -6
- package/src/storage/BucketStorageBatch.ts +2 -1
- package/src/storage/ChecksumCache.ts +13 -14
- package/src/storage/SyncRulesBucketStorage.ts +10 -10
- package/src/storage/storage-index.ts +1 -0
- package/src/storage/storage-metrics.ts +67 -0
- package/src/sync/BucketChecksumState.ts +7 -7
- package/src/sync/RequestTracker.ts +9 -3
- package/src/sync/sync.ts +10 -8
- package/src/system/ServiceContext.ts +9 -4
- package/src/util/protocol-types.ts +10 -10
- package/src/util/utils.ts +13 -2
- package/test/src/checksum_cache.test.ts +83 -84
- package/test/src/sync/BucketChecksumState.test.ts +47 -41
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/metrics/Metrics.d.ts +0 -30
- package/dist/metrics/Metrics.js +0 -202
- package/dist/metrics/Metrics.js.map +0 -1
- package/src/metrics/Metrics.ts +0 -255
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ReplicationMetric } from '@powersync/service-types';
|
|
2
|
+
/**
|
|
3
|
+
* Create and register the core replication metrics.
|
|
4
|
+
* @param engine
|
|
5
|
+
*/
|
|
6
|
+
export function createCoreReplicationMetrics(engine) {
|
|
7
|
+
engine.createCounter({
|
|
8
|
+
name: ReplicationMetric.DATA_REPLICATED_BYTES,
|
|
9
|
+
description: 'Uncompressed size of replicated data',
|
|
10
|
+
unit: 'bytes'
|
|
11
|
+
});
|
|
12
|
+
engine.createCounter({
|
|
13
|
+
name: ReplicationMetric.ROWS_REPLICATED_TOTAL,
|
|
14
|
+
description: 'Total number of replicated rows'
|
|
15
|
+
});
|
|
16
|
+
engine.createCounter({
|
|
17
|
+
name: ReplicationMetric.TRANSACTIONS_REPLICATED_TOTAL,
|
|
18
|
+
description: 'Total number of replicated transactions'
|
|
19
|
+
});
|
|
20
|
+
engine.createCounter({
|
|
21
|
+
name: ReplicationMetric.CHUNKS_REPLICATED_TOTAL,
|
|
22
|
+
description: 'Total number of replication chunks'
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Initialise the core replication metrics. This should be called after the metrics have been created.
|
|
27
|
+
* @param engine
|
|
28
|
+
*/
|
|
29
|
+
export function initializeCoreReplicationMetrics(engine) {
|
|
30
|
+
const data_replicated_bytes = engine.getCounter(ReplicationMetric.DATA_REPLICATED_BYTES);
|
|
31
|
+
const rows_replicated_total = engine.getCounter(ReplicationMetric.ROWS_REPLICATED_TOTAL);
|
|
32
|
+
const transactions_replicated_total = engine.getCounter(ReplicationMetric.TRANSACTIONS_REPLICATED_TOTAL);
|
|
33
|
+
const chunks_replicated_total = engine.getCounter(ReplicationMetric.CHUNKS_REPLICATED_TOTAL);
|
|
34
|
+
data_replicated_bytes.add(0);
|
|
35
|
+
rows_replicated_total.add(0);
|
|
36
|
+
transactions_replicated_total.add(0);
|
|
37
|
+
chunks_replicated_total.add(0);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=replication-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-metrics.js","sourceRoot":"","sources":["../../src/replication/replication-metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAqB;IAChE,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,iBAAiB,CAAC,qBAAqB;QAC7C,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,iBAAiB,CAAC,qBAAqB;QAC7C,WAAW,EAAE,iCAAiC;KAC/C,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,iBAAiB,CAAC,6BAA6B;QACrD,WAAW,EAAE,yCAAyC;KACvD,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,CAAC;QACnB,IAAI,EAAE,iBAAiB,CAAC,uBAAuB;QAC/C,WAAW,EAAE,oCAAoC;KAClD,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAAC,MAAqB;IACpE,MAAM,qBAAqB,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IACzF,MAAM,qBAAqB,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IACzF,MAAM,6BAA6B,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,CAAC;IACzG,MAAM,uBAAuB,GAAG,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;IAE7F,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7B,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7B,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -527,13 +527,13 @@ export declare const DEFAULT_ROUTE_OPTIONS: {
|
|
|
527
527
|
}) | (import("@powersync/lib-services-framework").Endpoint<{
|
|
528
528
|
client_id?: string | undefined;
|
|
529
529
|
}, {
|
|
530
|
-
checkpoint:
|
|
530
|
+
checkpoint: bigint;
|
|
531
531
|
}, import("./router.js").Context, import("./router.js").RequestEndpointHandlerPayload<{
|
|
532
532
|
client_id?: string | undefined;
|
|
533
533
|
}, import("./router.js").Context, import("./router.js").BasicRouterRequest>, import("@powersync/lib-services-framework").EndpointHandler<import("./router.js").RequestEndpointHandlerPayload<{
|
|
534
534
|
client_id?: string | undefined;
|
|
535
535
|
}, import("./router.js").Context, import("./router.js").BasicRouterRequest>, {
|
|
536
|
-
checkpoint:
|
|
536
|
+
checkpoint: bigint;
|
|
537
537
|
}>> & {
|
|
538
538
|
path: string;
|
|
539
539
|
method: import("@powersync/lib-services-framework").HTTPMethod.GET;
|
|
@@ -550,7 +550,7 @@ export declare const DEFAULT_ROUTE_OPTIONS: {
|
|
|
550
550
|
handler: (payload: import("./router.js").RequestEndpointHandlerPayload<{
|
|
551
551
|
client_id?: string | undefined;
|
|
552
552
|
}, import("./router.js").Context, import("./router.js").BasicRouterRequest>) => Promise<{
|
|
553
|
-
checkpoint:
|
|
553
|
+
checkpoint: bigint;
|
|
554
554
|
}>;
|
|
555
555
|
}) | (import("@powersync/lib-services-framework").Endpoint<{
|
|
556
556
|
client_id?: string | undefined;
|
|
@@ -2,13 +2,13 @@ import { router, schema } from '@powersync/lib-services-framework';
|
|
|
2
2
|
export declare const writeCheckpoint: router.Endpoint<{
|
|
3
3
|
client_id?: string | undefined;
|
|
4
4
|
}, {
|
|
5
|
-
checkpoint:
|
|
5
|
+
checkpoint: bigint;
|
|
6
6
|
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
7
7
|
client_id?: string | undefined;
|
|
8
8
|
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, router.EndpointHandler<import("../router.js").RequestEndpointHandlerPayload<{
|
|
9
9
|
client_id?: string | undefined;
|
|
10
10
|
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, {
|
|
11
|
-
checkpoint:
|
|
11
|
+
checkpoint: bigint;
|
|
12
12
|
}>> & {
|
|
13
13
|
path: string;
|
|
14
14
|
method: router.HTTPMethod.GET;
|
|
@@ -25,7 +25,7 @@ export declare const writeCheckpoint: router.Endpoint<{
|
|
|
25
25
|
handler: (payload: import("../router.js").RequestEndpointHandlerPayload<{
|
|
26
26
|
client_id?: string | undefined;
|
|
27
27
|
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>) => Promise<{
|
|
28
|
-
checkpoint:
|
|
28
|
+
checkpoint: bigint;
|
|
29
29
|
}>;
|
|
30
30
|
};
|
|
31
31
|
export declare const writeCheckpoint2: router.Endpoint<{
|
|
@@ -60,13 +60,13 @@ export declare const writeCheckpoint2: router.Endpoint<{
|
|
|
60
60
|
export declare const CHECKPOINT_ROUTES: ((router.Endpoint<{
|
|
61
61
|
client_id?: string | undefined;
|
|
62
62
|
}, {
|
|
63
|
-
checkpoint:
|
|
63
|
+
checkpoint: bigint;
|
|
64
64
|
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
65
65
|
client_id?: string | undefined;
|
|
66
66
|
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, router.EndpointHandler<import("../router.js").RequestEndpointHandlerPayload<{
|
|
67
67
|
client_id?: string | undefined;
|
|
68
68
|
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, {
|
|
69
|
-
checkpoint:
|
|
69
|
+
checkpoint: bigint;
|
|
70
70
|
}>> & {
|
|
71
71
|
path: string;
|
|
72
72
|
method: router.HTTPMethod.GET;
|
|
@@ -83,7 +83,7 @@ export declare const CHECKPOINT_ROUTES: ((router.Endpoint<{
|
|
|
83
83
|
handler: (payload: import("../router.js").RequestEndpointHandlerPayload<{
|
|
84
84
|
client_id?: string | undefined;
|
|
85
85
|
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>) => Promise<{
|
|
86
|
-
checkpoint:
|
|
86
|
+
checkpoint: bigint;
|
|
87
87
|
}>;
|
|
88
88
|
}) | (router.Endpoint<{
|
|
89
89
|
client_id?: string | undefined;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { ErrorCode, errors, logger, schema } from '@powersync/lib-services-framework';
|
|
2
2
|
import { RequestParameters } from '@powersync/service-sync-rules';
|
|
3
3
|
import { serialize } from 'bson';
|
|
4
|
-
import { Metrics } from '../../metrics/Metrics.js';
|
|
5
4
|
import * as sync from '../../sync/sync-index.js';
|
|
6
5
|
import * as util from '../../util/util-index.js';
|
|
7
6
|
import { SyncRoutes } from './sync-stream.js';
|
|
7
|
+
import { APIMetric } from '@powersync/service-types';
|
|
8
8
|
export const syncStreamReactive = (router) => router.reactiveStream(SyncRoutes.STREAM, {
|
|
9
9
|
validator: schema.createTsCodecValidator(util.StreamingSyncRequest, { allowAdditional: true }),
|
|
10
10
|
handler: async ({ context, params, responder, observer, initialN, signal: upstreamSignal }) => {
|
|
11
11
|
const { service_context } = context;
|
|
12
|
-
const { routerEngine, syncContext } = service_context;
|
|
12
|
+
const { routerEngine, metricsEngine, syncContext } = service_context;
|
|
13
13
|
// Create our own controller that we can abort directly
|
|
14
14
|
const controller = new AbortController();
|
|
15
15
|
upstreamSignal.addEventListener('abort', () => {
|
|
@@ -50,8 +50,8 @@ export const syncStreamReactive = (router) => router.reactiveStream(SyncRoutes.S
|
|
|
50
50
|
const removeStopHandler = routerEngine.addStopHandler(() => {
|
|
51
51
|
controller.abort();
|
|
52
52
|
});
|
|
53
|
-
|
|
54
|
-
const tracker = new sync.RequestTracker();
|
|
53
|
+
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(1);
|
|
54
|
+
const tracker = new sync.RequestTracker(metricsEngine);
|
|
55
55
|
try {
|
|
56
56
|
for await (const data of sync.streamResponse({
|
|
57
57
|
syncContext: syncContext,
|
|
@@ -129,7 +129,7 @@ export const syncStreamReactive = (router) => router.reactiveStream(SyncRoutes.S
|
|
|
129
129
|
operations_synced: tracker.operationsSynced,
|
|
130
130
|
data_synced_bytes: tracker.dataSyncedBytes
|
|
131
131
|
});
|
|
132
|
-
|
|
132
|
+
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(-1);
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-route.js","sourceRoot":"","sources":["../../../src/routes/endpoints/socket-route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,
|
|
1
|
+
{"version":3,"file":"socket-route.js","sourceRoot":"","sources":["../../../src/routes/endpoints/socket-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,9 @@ import { RequestParameters } from '@powersync/service-sync-rules';
|
|
|
3
3
|
import { Readable } from 'stream';
|
|
4
4
|
import * as sync from '../../sync/sync-index.js';
|
|
5
5
|
import * as util from '../../util/util-index.js';
|
|
6
|
-
import { Metrics } from '../../metrics/Metrics.js';
|
|
7
6
|
import { authUser } from '../auth.js';
|
|
8
7
|
import { routeDefinition } from '../router.js';
|
|
8
|
+
import { APIMetric } from '@powersync/service-types';
|
|
9
9
|
export var SyncRoutes;
|
|
10
10
|
(function (SyncRoutes) {
|
|
11
11
|
SyncRoutes["STREAM"] = "/sync/stream";
|
|
@@ -17,7 +17,7 @@ export const syncStreamed = routeDefinition({
|
|
|
17
17
|
validator: schema.createTsCodecValidator(util.StreamingSyncRequest, { allowAdditional: true }),
|
|
18
18
|
handler: async (payload) => {
|
|
19
19
|
const { service_context } = payload.context;
|
|
20
|
-
const { routerEngine, storageEngine, syncContext } = service_context;
|
|
20
|
+
const { routerEngine, storageEngine, metricsEngine, syncContext } = service_context;
|
|
21
21
|
const headers = payload.request.headers;
|
|
22
22
|
const userAgent = headers['x-user-agent'] ?? headers['user-agent'];
|
|
23
23
|
const clientId = payload.params.client_id;
|
|
@@ -40,9 +40,9 @@ export const syncStreamed = routeDefinition({
|
|
|
40
40
|
}
|
|
41
41
|
const syncRules = bucketStorage.getParsedSyncRules(routerEngine.getAPI().getParseSyncRulesOptions());
|
|
42
42
|
const controller = new AbortController();
|
|
43
|
-
const tracker = new sync.RequestTracker();
|
|
43
|
+
const tracker = new sync.RequestTracker(metricsEngine);
|
|
44
44
|
try {
|
|
45
|
-
|
|
45
|
+
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(1);
|
|
46
46
|
const stream = Readable.from(sync.transformToBytesTracked(sync.ndjson(sync.streamResponse({
|
|
47
47
|
syncContext: syncContext,
|
|
48
48
|
bucketStorage,
|
|
@@ -76,7 +76,7 @@ export const syncStreamed = routeDefinition({
|
|
|
76
76
|
data: stream,
|
|
77
77
|
afterSend: async () => {
|
|
78
78
|
controller.abort();
|
|
79
|
-
|
|
79
|
+
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(-1);
|
|
80
80
|
logger.info(`Sync stream complete`, {
|
|
81
81
|
user_id: syncParams.user_id,
|
|
82
82
|
client_id: clientId,
|
|
@@ -89,7 +89,7 @@ export const syncStreamed = routeDefinition({
|
|
|
89
89
|
}
|
|
90
90
|
catch (ex) {
|
|
91
91
|
controller.abort();
|
|
92
|
-
|
|
92
|
+
metricsEngine.getUpDownCounter(APIMetric.CONCURRENT_CONNECTIONS).add(-1);
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-stream.js","sourceRoot":"","sources":["../../../src/routes/endpoints/sync-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sync-stream.js","sourceRoot":"","sources":["../../../src/routes/endpoints/sync-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,qCAAuB,CAAA;AACzB,CAAC,EAFW,UAAU,KAAV,UAAU,QAErB;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;IAC1C,IAAI,EAAE,UAAU,CAAC,MAAM;IACvB,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI;IAC9B,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IAC9F,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACzB,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QAC5C,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC;QACpF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QAE1C,IAAI,YAAa,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC;gBAC5B,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,WAAW,EAAE,iCAAiC;aAC/C,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAA8B,OAAO,CAAC,MAAM,CAAC;QACzD,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,aAAc,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAE1G,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,CAAC;QAEjF,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC;gBAC5B,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,WAAW,EAAE,yBAAyB;aACvC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,aAAa,CAAC,kBAAkB,CAAC,YAAa,CAAC,MAAM,EAAE,CAAC,wBAAwB,EAAE,CAAC,CAAC;QAEtG,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAC1B,IAAI,CAAC,uBAAuB,CAC1B,IAAI,CAAC,MAAM,CACT,IAAI,CAAC,cAAc,CAAC;gBAClB,WAAW,EAAE,WAAW;gBACxB,aAAa;gBACb,SAAS,EAAE,SAAS;gBACpB,MAAM;gBACN,UAAU;gBACV,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,aAAc;gBACrC,OAAO;gBACP,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CACH,EACD,OAAO,CACR,EACD,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,CAChD,CAAC;YAEF,MAAM,UAAU,GAAG,YAAa,CAAC,cAAc,CAAC,GAAG,EAAE;gBACnD,uDAAuD;gBACvD,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtB,UAAU,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC3B,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,oDAAoD;gBACpD,IAAI,KAAK,CAAC,OAAO,IAAI,sBAAsB,EAAE,CAAC;oBAC5C,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,MAAM,CAAC,cAAc,CAAC;gBAC/B,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACP,cAAc,EAAE,sBAAsB;iBACvC;gBACD,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,KAAK,IAAI,EAAE;oBACpB,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;wBAClC,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,SAAS,EAAE,QAAQ;wBACnB,UAAU,EAAE,SAAS;wBACrB,iBAAiB,EAAE,OAAO,CAAC,gBAAgB;wBAC3C,iBAAiB,EAAE,OAAO,CAAC,eAAe;qBAC3C,CAAC,CAAC;gBACL,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,YAAY,CAAC,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { BSON } from 'bson';
|
|
|
4
4
|
import { ReplicationEventPayload } from './ReplicationEventPayload.js';
|
|
5
5
|
import { SourceTable } from './SourceTable.js';
|
|
6
6
|
import { BatchedCustomWriteCheckpointOptions } from './storage-index.js';
|
|
7
|
+
import { InternalOpId } from '../util/utils.js';
|
|
7
8
|
export declare const DEFAULT_BUCKET_BATCH_COMMIT_OPTIONS: ResolvedBucketBatchCommitOptions;
|
|
8
9
|
export interface BucketStorageBatch extends ObserverClient<BucketBatchStorageListener>, AsyncDisposable {
|
|
9
10
|
/**
|
|
@@ -118,7 +119,7 @@ export interface BucketBatchStorageListener {
|
|
|
118
119
|
replicationEvent: (payload: ReplicationEventPayload) => void;
|
|
119
120
|
}
|
|
120
121
|
export interface FlushedResult {
|
|
121
|
-
flushed_op:
|
|
122
|
+
flushed_op: InternalOpId;
|
|
122
123
|
}
|
|
123
124
|
export interface BucketBatchCommitOptions {
|
|
124
125
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BucketStorageBatch.js","sourceRoot":"","sources":["../../src/storage/BucketStorageBatch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BucketStorageBatch.js","sourceRoot":"","sources":["../../src/storage/BucketStorageBatch.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,mCAAmC,GAAqC;IACnF,sBAAsB,EAAE,IAAI;CAC7B,CAAC;AAyFF,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;AACnB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BucketChecksum
|
|
2
|
-
import { ChecksumMap } from '../util/utils.js';
|
|
1
|
+
import { BucketChecksum } from '../util/protocol-types.js';
|
|
2
|
+
import { ChecksumMap, InternalOpId } from '../util/utils.js';
|
|
3
3
|
export interface PartialChecksum {
|
|
4
4
|
bucket: string;
|
|
5
5
|
/**
|
|
@@ -19,8 +19,8 @@ export interface PartialChecksum {
|
|
|
19
19
|
}
|
|
20
20
|
export interface FetchPartialBucketChecksum {
|
|
21
21
|
bucket: string;
|
|
22
|
-
start?:
|
|
23
|
-
end:
|
|
22
|
+
start?: InternalOpId;
|
|
23
|
+
end: InternalOpId;
|
|
24
24
|
}
|
|
25
25
|
export type PartialChecksumMap = Map<string, PartialChecksum>;
|
|
26
26
|
export type FetchChecksums = (batch: FetchPartialBucketChecksum[]) => Promise<PartialChecksumMap>;
|
|
@@ -56,7 +56,7 @@ export declare class ChecksumCache {
|
|
|
56
56
|
private bucketCheckpoints;
|
|
57
57
|
private fetchChecksums;
|
|
58
58
|
constructor(options: ChecksumCacheOptions);
|
|
59
|
-
getChecksums(checkpoint:
|
|
59
|
+
getChecksums(checkpoint: InternalOpId, buckets: string[]): Promise<BucketChecksum[]>;
|
|
60
60
|
/**
|
|
61
61
|
* Get bucket checksums for a checkpoint.
|
|
62
62
|
*
|
|
@@ -64,5 +64,5 @@ export declare class ChecksumCache {
|
|
|
64
64
|
*
|
|
65
65
|
* @returns a Map with exactly one entry for each bucket requested
|
|
66
66
|
*/
|
|
67
|
-
getChecksumMap(checkpoint:
|
|
67
|
+
getChecksumMap(checkpoint: InternalOpId, buckets: string[]): Promise<ChecksumMap>;
|
|
68
68
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { addBucketChecksums } from '../util/utils.js';
|
|
2
|
-
import { LRUCache } from 'lru-cache/min';
|
|
3
1
|
import { OrderedSet } from '@js-sdsl/ordered-set';
|
|
2
|
+
import { LRUCache } from 'lru-cache/min';
|
|
3
|
+
import { addBucketChecksums } from '../util/utils.js';
|
|
4
4
|
// Approximately 5MB of memory, if we assume 50 bytes per entry
|
|
5
5
|
const DEFAULT_MAX_SIZE = 100_000;
|
|
6
6
|
const TTL_MS = 3_600_000;
|
|
@@ -43,8 +43,7 @@ export class ChecksumCache {
|
|
|
43
43
|
},
|
|
44
44
|
dispose: (value, key) => {
|
|
45
45
|
// Remove from the set of cached checkpoints for the bucket
|
|
46
|
-
const {
|
|
47
|
-
const checkpoint = BigInt(checkpointString);
|
|
46
|
+
const { checkpoint } = parseCacheKey(key);
|
|
48
47
|
const checkpointSet = this.bucketCheckpoints.get(value.bucket);
|
|
49
48
|
if (checkpointSet == null) {
|
|
50
49
|
return;
|
|
@@ -165,7 +164,7 @@ export class ChecksumCache {
|
|
|
165
164
|
// Partial checksum found - make a partial checksum request
|
|
166
165
|
bucketRequest = {
|
|
167
166
|
bucket,
|
|
168
|
-
start: cp
|
|
167
|
+
start: cp,
|
|
169
168
|
end: checkpoint
|
|
170
169
|
};
|
|
171
170
|
add.set(bucket, cached);
|
|
@@ -241,6 +240,6 @@ function makeCacheKey(checkpoint, bucket) {
|
|
|
241
240
|
}
|
|
242
241
|
function parseCacheKey(key) {
|
|
243
242
|
const index = key.indexOf('/');
|
|
244
|
-
return {
|
|
243
|
+
return { checkpoint: BigInt(key.substring(0, index)), bucket: key.substring(index + 1) };
|
|
245
244
|
}
|
|
246
245
|
//# sourceMappingURL=ChecksumCache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChecksumCache.js","sourceRoot":"","sources":["../../src/storage/ChecksumCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChecksumCache.js","sourceRoot":"","sources":["../../src/storage/ChecksumCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ export interface SyncRulesBucketStorage extends ObserverClient<SyncRulesBucketSt
|
|
|
51
51
|
/**
|
|
52
52
|
* Used to resolve "dynamic" parameter queries.
|
|
53
53
|
*/
|
|
54
|
-
getParameterSets(checkpoint: util.
|
|
54
|
+
getParameterSets(checkpoint: util.InternalOpId, lookups: SqliteJsonValue[][]): Promise<SqliteJsonRow[]>;
|
|
55
55
|
getCheckpointChanges(options: GetCheckpointChangesOptions): Promise<CheckpointChanges>;
|
|
56
56
|
/**
|
|
57
57
|
* Yields the latest user write checkpoint whenever the sync checkpoint updates.
|
|
@@ -70,13 +70,13 @@ export interface SyncRulesBucketStorage extends ObserverClient<SyncRulesBucketSt
|
|
|
70
70
|
* @param dataBuckets current bucket states
|
|
71
71
|
* @param options batch size options
|
|
72
72
|
*/
|
|
73
|
-
getBucketDataBatch(checkpoint: util.
|
|
73
|
+
getBucketDataBatch(checkpoint: util.InternalOpId, dataBuckets: Map<string, util.InternalOpId>, options?: BucketDataBatchOptions): AsyncIterable<SyncBucketDataBatch>;
|
|
74
74
|
/**
|
|
75
75
|
* Compute checksums for a given list of buckets.
|
|
76
76
|
*
|
|
77
77
|
* Returns zero checksums for any buckets not found.
|
|
78
78
|
*/
|
|
79
|
-
getChecksums(checkpoint: util.
|
|
79
|
+
getChecksums(checkpoint: util.InternalOpId, buckets: string[]): Promise<util.ChecksumMap>;
|
|
80
80
|
}
|
|
81
81
|
export interface SyncRulesBucketStorageListener {
|
|
82
82
|
batchStarted: (batch: BucketStorageBatch) => void;
|
|
@@ -133,7 +133,7 @@ export interface CompactOptions {
|
|
|
133
133
|
* This can also be used to create a "safe buffer" of recent operations that should
|
|
134
134
|
* not be compacted, to avoid invalidating checkpoints in use.
|
|
135
135
|
*/
|
|
136
|
-
maxOpId?:
|
|
136
|
+
maxOpId?: util.InternalOpId;
|
|
137
137
|
/**
|
|
138
138
|
* If specified, compact only the specific buckets.
|
|
139
139
|
*
|
|
@@ -171,10 +171,10 @@ export interface BucketDataBatchOptions {
|
|
|
171
171
|
}
|
|
172
172
|
export interface SyncBucketDataBatch {
|
|
173
173
|
batch: util.SyncBucketData;
|
|
174
|
-
targetOp:
|
|
174
|
+
targetOp: util.InternalOpId | null;
|
|
175
175
|
}
|
|
176
176
|
export interface ReplicationCheckpoint {
|
|
177
|
-
readonly checkpoint: util.
|
|
177
|
+
readonly checkpoint: util.InternalOpId;
|
|
178
178
|
readonly lsn: string | null;
|
|
179
179
|
}
|
|
180
180
|
export interface WatchWriteCheckpointOptions {
|
|
@@ -189,14 +189,14 @@ export interface WatchFilterEvent {
|
|
|
189
189
|
}
|
|
190
190
|
export interface WriteCheckpoint {
|
|
191
191
|
base: ReplicationCheckpoint;
|
|
192
|
-
writeCheckpoint:
|
|
192
|
+
writeCheckpoint: util.InternalOpId | null;
|
|
193
193
|
}
|
|
194
194
|
export interface StorageCheckpointUpdate extends WriteCheckpoint {
|
|
195
195
|
update: CheckpointChanges;
|
|
196
196
|
}
|
|
197
197
|
export interface GetCheckpointChangesOptions {
|
|
198
|
-
lastCheckpoint: util.
|
|
199
|
-
nextCheckpoint: util.
|
|
198
|
+
lastCheckpoint: util.InternalOpId;
|
|
199
|
+
nextCheckpoint: util.InternalOpId;
|
|
200
200
|
}
|
|
201
201
|
export interface CheckpointChanges {
|
|
202
202
|
updatedDataBuckets: string[];
|
|
@@ -6,6 +6,7 @@ export * from './SourceEntity.js';
|
|
|
6
6
|
export * from './SourceTable.js';
|
|
7
7
|
export * from './StorageEngine.js';
|
|
8
8
|
export * from './StorageProvider.js';
|
|
9
|
+
export * from './storage-metrics.js';
|
|
9
10
|
export * from './WriteCheckpointAPI.js';
|
|
10
11
|
export * from './BucketStorageFactory.js';
|
|
11
12
|
export * from './BucketStorageBatch.js';
|
|
@@ -6,6 +6,7 @@ export * from './SourceEntity.js';
|
|
|
6
6
|
export * from './SourceTable.js';
|
|
7
7
|
export * from './StorageEngine.js';
|
|
8
8
|
export * from './StorageProvider.js';
|
|
9
|
+
export * from './storage-metrics.js';
|
|
9
10
|
export * from './WriteCheckpointAPI.js';
|
|
10
11
|
export * from './BucketStorageFactory.js';
|
|
11
12
|
export * from './BucketStorageBatch.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-index.js","sourceRoot":"","sources":["../../src/storage/storage-index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"storage-index.js","sourceRoot":"","sources":["../../src/storage/storage-index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { MetricsEngine } from '../metrics/MetricsEngine.js';
|
|
2
|
+
import { BucketStorageFactory } from './BucketStorageFactory.js';
|
|
3
|
+
export declare function createCoreStorageMetrics(engine: MetricsEngine): void;
|
|
4
|
+
export declare function initializeCoreStorageMetrics(engine: MetricsEngine, storage: BucketStorageFactory): void;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { logger } from '@powersync/lib-services-framework';
|
|
2
|
+
import { StorageMetric } from '@powersync/service-types';
|
|
3
|
+
export function createCoreStorageMetrics(engine) {
|
|
4
|
+
engine.createObservableGauge({
|
|
5
|
+
name: StorageMetric.REPLICATION_SIZE_BYTES,
|
|
6
|
+
description: 'Size of current data stored in PowerSync',
|
|
7
|
+
unit: 'bytes'
|
|
8
|
+
});
|
|
9
|
+
engine.createObservableGauge({
|
|
10
|
+
name: StorageMetric.OPERATION_SIZE_BYTES,
|
|
11
|
+
description: 'Size of operations stored in PowerSync',
|
|
12
|
+
unit: 'bytes'
|
|
13
|
+
});
|
|
14
|
+
engine.createObservableGauge({
|
|
15
|
+
name: StorageMetric.PARAMETER_SIZE_BYTES,
|
|
16
|
+
description: 'Size of parameter data stored in PowerSync',
|
|
17
|
+
unit: 'bytes'
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export function initializeCoreStorageMetrics(engine, storage) {
|
|
21
|
+
const replication_storage_size_bytes = engine.getObservableGauge(StorageMetric.REPLICATION_SIZE_BYTES);
|
|
22
|
+
const operation_storage_size_bytes = engine.getObservableGauge(StorageMetric.OPERATION_SIZE_BYTES);
|
|
23
|
+
const parameter_storage_size_bytes = engine.getObservableGauge(StorageMetric.PARAMETER_SIZE_BYTES);
|
|
24
|
+
const MINIMUM_INTERVAL = 60_000;
|
|
25
|
+
let cachedRequest = undefined;
|
|
26
|
+
let cacheTimestamp = 0;
|
|
27
|
+
const getMetrics = () => {
|
|
28
|
+
if (cachedRequest == null || Date.now() - cacheTimestamp > MINIMUM_INTERVAL) {
|
|
29
|
+
cachedRequest = storage.getStorageMetrics().catch((e) => {
|
|
30
|
+
logger.error(`Failed to get storage metrics`, e);
|
|
31
|
+
return null;
|
|
32
|
+
});
|
|
33
|
+
cacheTimestamp = Date.now();
|
|
34
|
+
}
|
|
35
|
+
return cachedRequest;
|
|
36
|
+
};
|
|
37
|
+
replication_storage_size_bytes.setValueProvider(async () => {
|
|
38
|
+
const metrics = await getMetrics();
|
|
39
|
+
if (metrics) {
|
|
40
|
+
return metrics.replication_size_bytes;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
operation_storage_size_bytes.setValueProvider(async () => {
|
|
44
|
+
const metrics = await getMetrics();
|
|
45
|
+
if (metrics) {
|
|
46
|
+
return metrics.operations_size_bytes;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
parameter_storage_size_bytes.setValueProvider(async () => {
|
|
50
|
+
const metrics = await getMetrics();
|
|
51
|
+
if (metrics) {
|
|
52
|
+
return metrics.parameters_size_bytes;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=storage-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-metrics.js","sourceRoot":"","sources":["../../src/storage/storage-metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,UAAU,wBAAwB,CAAC,MAAqB;IAC5D,MAAM,CAAC,qBAAqB,CAAC;QAC3B,IAAI,EAAE,aAAa,CAAC,sBAAsB;QAC1C,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,qBAAqB,CAAC;QAC3B,IAAI,EAAE,aAAa,CAAC,oBAAoB;QACxC,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,qBAAqB,CAAC;QAC3B,IAAI,EAAE,aAAa,CAAC,oBAAoB;QACxC,WAAW,EAAE,4CAA4C;QACzD,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAqB,EAAE,OAA6B;IAC/F,MAAM,8BAA8B,GAAG,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACvG,MAAM,4BAA4B,GAAG,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACnG,MAAM,4BAA4B,GAAG,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEnG,MAAM,gBAAgB,GAAG,MAAM,CAAC;IAEhC,IAAI,aAAa,GAA+C,SAAS,CAAC;IAC1E,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,gBAAgB,EAAE,CAAC;YAC5E,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtD,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;IAEF,8BAA8B,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACzD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,sBAAsB,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4BAA4B,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,qBAAqB,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4BAA4B,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,qBAAqB,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -10,7 +10,7 @@ export interface BucketChecksumStateOptions {
|
|
|
10
10
|
syncParams: RequestParameters;
|
|
11
11
|
initialBucketPositions?: {
|
|
12
12
|
name: string;
|
|
13
|
-
after:
|
|
13
|
+
after: util.InternalOpId;
|
|
14
14
|
}[];
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
@@ -45,7 +45,7 @@ export declare class BucketChecksumState {
|
|
|
45
45
|
* @param bucketsToFetch List of buckets to fetch, typically from buildNextCheckpointLine, or a subset of that
|
|
46
46
|
* @returns
|
|
47
47
|
*/
|
|
48
|
-
getFilteredBucketPositions(bucketsToFetch: BucketDescription[]): Map<string,
|
|
48
|
+
getFilteredBucketPositions(bucketsToFetch: BucketDescription[]): Map<string, util.InternalOpId>;
|
|
49
49
|
/**
|
|
50
50
|
* Update the position of bucket data the client has.
|
|
51
51
|
*
|
|
@@ -54,7 +54,7 @@ export declare class BucketChecksumState {
|
|
|
54
54
|
*/
|
|
55
55
|
updateBucketPosition(options: {
|
|
56
56
|
bucket: string;
|
|
57
|
-
nextAfter:
|
|
57
|
+
nextAfter: util.InternalOpId;
|
|
58
58
|
hasMore: boolean;
|
|
59
59
|
}): void;
|
|
60
60
|
}
|
|
@@ -46,7 +46,7 @@ export class BucketChecksumState {
|
|
|
46
46
|
for (let bucket of allBuckets) {
|
|
47
47
|
dataBucketsNew.set(bucket.bucket, {
|
|
48
48
|
description: bucket,
|
|
49
|
-
start_op_id: this.bucketDataPositions.get(bucket.bucket)?.start_op_id ??
|
|
49
|
+
start_op_id: this.bucketDataPositions.get(bucket.bucket)?.start_op_id ?? 0n
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
this.bucketDataPositions = dataBucketsNew;
|
|
@@ -134,7 +134,7 @@ export class BucketChecksumState {
|
|
|
134
134
|
});
|
|
135
135
|
checkpointLine = {
|
|
136
136
|
checkpoint_diff: {
|
|
137
|
-
last_op_id: base.checkpoint,
|
|
137
|
+
last_op_id: util.internalToExternalOpId(base.checkpoint),
|
|
138
138
|
write_checkpoint: writeCheckpoint ? String(writeCheckpoint) : undefined,
|
|
139
139
|
removed_buckets: diff.removedBuckets,
|
|
140
140
|
updated_buckets: updatedBucketDescriptions
|
|
@@ -148,7 +148,7 @@ export class BucketChecksumState {
|
|
|
148
148
|
bucketsToFetch = allBuckets;
|
|
149
149
|
checkpointLine = {
|
|
150
150
|
checkpoint: {
|
|
151
|
-
last_op_id: base.checkpoint,
|
|
151
|
+
last_op_id: util.internalToExternalOpId(base.checkpoint),
|
|
152
152
|
write_checkpoint: writeCheckpoint ? String(writeCheckpoint) : undefined,
|
|
153
153
|
buckets: [...checksumMap.values()].map((e) => ({
|
|
154
154
|
...e,
|