@powersync/service-core 0.0.0-dev-20240718134716 → 0.0.0-dev-20240725112650
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 +11 -6
- package/dist/entry/cli-entry.js +2 -1
- package/dist/entry/cli-entry.js.map +1 -1
- package/dist/entry/commands/compact-action.d.ts +2 -0
- package/dist/entry/commands/compact-action.js +48 -0
- package/dist/entry/commands/compact-action.js.map +1 -0
- package/dist/entry/entry-index.d.ts +1 -0
- package/dist/entry/entry-index.js +1 -0
- package/dist/entry/entry-index.js.map +1 -1
- package/dist/metrics/Metrics.d.ts +4 -3
- package/dist/metrics/Metrics.js +51 -0
- package/dist/metrics/Metrics.js.map +1 -1
- package/dist/replication/WalStream.js +6 -8
- package/dist/replication/WalStream.js.map +1 -1
- package/dist/routes/configure-fastify.d.ts +883 -0
- package/dist/routes/configure-fastify.js +58 -0
- package/dist/routes/configure-fastify.js.map +1 -0
- package/dist/routes/configure-rsocket.d.ts +13 -0
- package/dist/routes/configure-rsocket.js +46 -0
- package/dist/routes/configure-rsocket.js.map +1 -0
- package/dist/routes/endpoints/socket-route.js +6 -14
- package/dist/routes/endpoints/socket-route.js.map +1 -1
- package/dist/routes/endpoints/sync-stream.js +4 -5
- package/dist/routes/endpoints/sync-stream.js.map +1 -1
- package/dist/routes/route-register.d.ts +1 -1
- package/dist/routes/route-register.js +1 -1
- package/dist/routes/route-register.js.map +1 -1
- package/dist/routes/router-socket.d.ts +4 -4
- package/dist/routes/router-socket.js.map +1 -1
- package/dist/routes/router.d.ts +1 -0
- package/dist/routes/router.js.map +1 -1
- package/dist/routes/routes-index.d.ts +2 -0
- package/dist/routes/routes-index.js +2 -0
- package/dist/routes/routes-index.js.map +1 -1
- package/dist/storage/BucketStorage.d.ts +31 -1
- package/dist/storage/BucketStorage.js.map +1 -1
- package/dist/storage/mongo/MongoCompactor.d.ts +40 -0
- package/dist/storage/mongo/MongoCompactor.js +292 -0
- package/dist/storage/mongo/MongoCompactor.js.map +1 -0
- package/dist/storage/mongo/MongoSyncBucketStorage.d.ts +3 -2
- package/dist/storage/mongo/MongoSyncBucketStorage.js +19 -13
- package/dist/storage/mongo/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/mongo/models.d.ts +5 -4
- package/dist/storage/mongo/models.js.map +1 -1
- package/dist/storage/mongo/util.d.ts +3 -0
- package/dist/storage/mongo/util.js +22 -0
- package/dist/storage/mongo/util.js.map +1 -1
- package/dist/sync/RequestTracker.js +2 -3
- package/dist/sync/RequestTracker.js.map +1 -1
- package/dist/sync/sync-index.d.ts +1 -0
- package/dist/sync/sync-index.js +1 -0
- package/dist/sync/sync-index.js.map +1 -1
- package/dist/sync/sync.js +20 -7
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/util.js.map +1 -1
- package/dist/util/config/collectors/config-collector.d.ts +12 -0
- package/dist/util/config/collectors/config-collector.js +43 -0
- package/dist/util/config/collectors/config-collector.js.map +1 -1
- package/dist/util/config/compound-config-collector.d.ts +3 -29
- package/dist/util/config/compound-config-collector.js +22 -69
- package/dist/util/config/compound-config-collector.js.map +1 -1
- package/package.json +6 -4
- package/src/entry/cli-entry.ts +2 -1
- package/src/entry/commands/compact-action.ts +54 -0
- package/src/entry/entry-index.ts +1 -0
- package/src/metrics/Metrics.ts +67 -2
- package/src/replication/WalStream.ts +6 -10
- package/src/routes/configure-fastify.ts +102 -0
- package/src/routes/configure-rsocket.ts +59 -0
- package/src/routes/endpoints/socket-route.ts +6 -15
- package/src/routes/endpoints/sync-stream.ts +4 -5
- package/src/routes/route-register.ts +2 -2
- package/src/routes/router-socket.ts +5 -5
- package/src/routes/router.ts +2 -0
- package/src/routes/routes-index.ts +2 -0
- package/src/storage/BucketStorage.ts +36 -1
- package/src/storage/mongo/MongoCompactor.ts +371 -0
- package/src/storage/mongo/MongoSyncBucketStorage.ts +25 -14
- package/src/storage/mongo/models.ts +5 -4
- package/src/storage/mongo/util.ts +25 -0
- package/src/sync/RequestTracker.ts +3 -3
- package/src/sync/sync-index.ts +1 -0
- package/src/sync/sync.ts +21 -7
- package/src/sync/util.ts +1 -0
- package/src/util/config/collectors/config-collector.ts +48 -0
- package/src/util/config/compound-config-collector.ts +23 -87
- package/test/src/__snapshots__/sync.test.ts.snap +85 -0
- package/test/src/bucket_validation.test.ts +142 -0
- package/test/src/bucket_validation.ts +116 -0
- package/test/src/compacting.test.ts +207 -0
- package/test/src/data_storage.test.ts +19 -60
- package/test/src/slow_tests.test.ts +144 -102
- package/test/src/sync.test.ts +169 -29
- package/test/src/util.ts +71 -13
- package/test/src/wal_stream.test.ts +21 -16
- package/test/src/wal_stream_utils.ts +13 -4
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { registerFastifyRoutes } from './route-register.js';
|
|
2
|
+
import { ADMIN_ROUTES } from './endpoints/admin.js';
|
|
3
|
+
import { CHECKPOINT_ROUTES } from './endpoints/checkpointing.js';
|
|
4
|
+
import { DEV_ROUTES } from './endpoints/dev.js';
|
|
5
|
+
import { SYNC_RULES_ROUTES } from './endpoints/sync-rules.js';
|
|
6
|
+
import { SYNC_STREAM_ROUTES } from './endpoints/sync-stream.js';
|
|
7
|
+
import { createRequestQueueHook } from './hooks.js';
|
|
8
|
+
export const DEFAULT_ROUTE_OPTIONS = {
|
|
9
|
+
api: {
|
|
10
|
+
routes: [...ADMIN_ROUTES, ...CHECKPOINT_ROUTES, ...DEV_ROUTES, ...SYNC_RULES_ROUTES],
|
|
11
|
+
queueOptions: {
|
|
12
|
+
concurrency: 10,
|
|
13
|
+
max_queue_depth: 20
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
syncStream: {
|
|
17
|
+
routes: [...SYNC_STREAM_ROUTES],
|
|
18
|
+
queueOptions: {
|
|
19
|
+
concurrency: 200,
|
|
20
|
+
max_queue_depth: 0
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Registers default routes on a Fastify server. Consumers can optionally configure
|
|
26
|
+
* concurrency queue limits or override routes.
|
|
27
|
+
*/
|
|
28
|
+
export function configureFastifyServer(server, options) {
|
|
29
|
+
const { system, routes = DEFAULT_ROUTE_OPTIONS } = options;
|
|
30
|
+
/**
|
|
31
|
+
* Fastify creates an encapsulated context for each `.register` call.
|
|
32
|
+
* Creating a separate context here to separate the concurrency limits for Admin APIs
|
|
33
|
+
* and Sync Streaming routes.
|
|
34
|
+
* https://github.com/fastify/fastify/blob/main/docs/Reference/Encapsulation.md
|
|
35
|
+
*/
|
|
36
|
+
server.register(async function (childContext) {
|
|
37
|
+
registerFastifyRoutes(childContext, async () => {
|
|
38
|
+
return {
|
|
39
|
+
user_id: undefined,
|
|
40
|
+
system: system
|
|
41
|
+
};
|
|
42
|
+
}, routes.api?.routes ?? DEFAULT_ROUTE_OPTIONS.api.routes);
|
|
43
|
+
// Limit the active concurrent requests
|
|
44
|
+
childContext.addHook('onRequest', createRequestQueueHook(routes.api?.queueOptions ?? DEFAULT_ROUTE_OPTIONS.api.queueOptions));
|
|
45
|
+
});
|
|
46
|
+
// Create a separate context for concurrency queueing
|
|
47
|
+
server.register(async function (childContext) {
|
|
48
|
+
registerFastifyRoutes(childContext, async () => {
|
|
49
|
+
return {
|
|
50
|
+
user_id: undefined,
|
|
51
|
+
system: system
|
|
52
|
+
};
|
|
53
|
+
}, routes.syncStream?.routes ?? DEFAULT_ROUTE_OPTIONS.syncStream.routes);
|
|
54
|
+
// Limit the active concurrent requests
|
|
55
|
+
childContext.addHook('onRequest', createRequestQueueHook(routes.syncStream?.queueOptions ?? DEFAULT_ROUTE_OPTIONS.syncStream.queueOptions));
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=configure-fastify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-fastify.js","sourceRoot":"","sources":["../../src/routes/configure-fastify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAI5D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAA4B,MAAM,YAAY,CAAC;AA0B9E,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE;QACH,MAAM,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,iBAAiB,EAAE,GAAG,UAAU,EAAE,GAAG,iBAAiB,CAAC;QACpF,YAAY,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,eAAe,EAAE,EAAE;SACpB;KACF;IACD,UAAU,EAAE;QACV,MAAM,EAAE,CAAC,GAAG,kBAAkB,CAAC;QAC/B,YAAY,EAAE;YACZ,WAAW,EAAE,GAAG;YAChB,eAAe,EAAE,CAAC;SACnB;KACF;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA+B,EAAE,OAA4B;IAClG,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,qBAAqB,EAAE,GAAG,OAAO,CAAC;IAC3D;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW,YAAY;QAC1C,qBAAqB,CACnB,YAAY,EACZ,KAAK,IAAI,EAAE;YACT,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,MAAM;aACf,CAAC;QACJ,CAAC,EACD,MAAM,CAAC,GAAG,EAAE,MAAM,IAAI,qBAAqB,CAAC,GAAG,CAAC,MAAM,CACvD,CAAC;QACF,uCAAuC;QACvC,YAAY,CAAC,OAAO,CAClB,WAAW,EACX,sBAAsB,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,IAAI,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAC3F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,qDAAqD;IACrD,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW,YAAY;QAC1C,qBAAqB,CACnB,YAAY,EACZ,KAAK,IAAI,EAAE;YACT,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,MAAM;aACf,CAAC;QACJ,CAAC,EACD,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,qBAAqB,CAAC,UAAU,CAAC,MAAM,CACrE,CAAC;QACF,uCAAuC;QACvC,YAAY,CAAC,OAAO,CAClB,WAAW,EACX,sBAAsB,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,IAAI,qBAAqB,CAAC,UAAU,CAAC,YAAY,CAAC,CACzG,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import * as http from 'http';
|
|
3
|
+
import { ReactiveSocketRouter } from '@powersync/service-rsocket-router';
|
|
4
|
+
import { CorePowerSyncSystem } from '../system/CorePowerSyncSystem.js';
|
|
5
|
+
import { SocketRouteGenerator } from './router-socket.js';
|
|
6
|
+
import { Context } from './router.js';
|
|
7
|
+
export type RSockerRouterConfig = {
|
|
8
|
+
system: CorePowerSyncSystem;
|
|
9
|
+
server: http.Server;
|
|
10
|
+
routeGenerators?: SocketRouteGenerator[];
|
|
11
|
+
};
|
|
12
|
+
export declare const DEFAULT_SOCKET_ROUTES: SocketRouteGenerator[];
|
|
13
|
+
export declare function configureRSocket(router: ReactiveSocketRouter<Context>, options: RSockerRouterConfig): void;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { deserialize } from 'bson';
|
|
2
|
+
import { errors, logger } from '@powersync/lib-services-framework';
|
|
3
|
+
import { RSocketRequestMeta } from '@powersync/service-rsocket-router';
|
|
4
|
+
import { generateContext, getTokenFromHeader } from './auth.js';
|
|
5
|
+
import { syncStreamReactive } from './endpoints/socket-route.js';
|
|
6
|
+
import { RSocketContextMeta } from './router-socket.js';
|
|
7
|
+
export const DEFAULT_SOCKET_ROUTES = [syncStreamReactive];
|
|
8
|
+
export function configureRSocket(router, options) {
|
|
9
|
+
const { routeGenerators = DEFAULT_SOCKET_ROUTES, server, system } = options;
|
|
10
|
+
router.applyWebSocketEndpoints(server, {
|
|
11
|
+
contextProvider: async (data) => {
|
|
12
|
+
const { token } = RSocketContextMeta.decode(deserialize(data));
|
|
13
|
+
if (!token) {
|
|
14
|
+
throw new errors.AuthorizationError('No token provided');
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const extracted_token = getTokenFromHeader(token);
|
|
18
|
+
if (extracted_token != null) {
|
|
19
|
+
const { context, errors: token_errors } = await generateContext(system, extracted_token);
|
|
20
|
+
if (context?.token_payload == null) {
|
|
21
|
+
throw new errors.AuthorizationError(token_errors ?? 'Authentication required');
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
token,
|
|
25
|
+
...context,
|
|
26
|
+
token_errors: token_errors,
|
|
27
|
+
system
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
throw new errors.AuthorizationError('No token provided');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (ex) {
|
|
35
|
+
logger.error(ex);
|
|
36
|
+
throw ex;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
endpoints: routeGenerators.map((generator) => generator(router)),
|
|
40
|
+
metaDecoder: async (meta) => {
|
|
41
|
+
return RSocketRequestMeta.decode(deserialize(meta));
|
|
42
|
+
},
|
|
43
|
+
payloadDecoder: async (rawData) => rawData && deserialize(rawData)
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=configure-rsocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-rsocket.js","sourceRoot":"","sources":["../../src/routes/configure-rsocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAwB,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAG7F,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,oBAAoB,CAAC;AAS9E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAE1D,MAAM,UAAU,gBAAgB,CAAC,MAAqC,EAAE,OAA4B;IAClG,MAAM,EAAE,eAAe,GAAG,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE5E,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE;QACrC,eAAe,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;YACtC,MAAM,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAQ,CAAC,CAAC;YAEtE,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;aAC1D;YAED,IAAI;gBACF,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,eAAe,IAAI,IAAI,EAAE;oBAC3B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;oBACzF,IAAI,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE;wBAClC,MAAM,IAAI,MAAM,CAAC,kBAAkB,CAAC,YAAY,IAAI,yBAAyB,CAAC,CAAC;qBAChF;oBACD,OAAO;wBACL,KAAK;wBACL,GAAG,OAAO;wBACV,YAAY,EAAE,YAAY;wBAC1B,MAAM;qBACP,CAAC;iBACH;qBAAM;oBACL,MAAM,IAAI,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;iBAC1D;aACF;YAAC,OAAO,EAAE,EAAE;gBACX,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjB,MAAM,EAAE,CAAC;aACV;QACH,CAAC;QACD,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,WAAW,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;YAClC,OAAO,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAQ,CAAC,CAAC;QAC7D,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,OAAgB,EAAE,EAAE,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC;KAC5E,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { errors, logger, schema } from '@powersync/lib-services-framework';
|
|
2
2
|
import { RequestParameters } from '@powersync/service-sync-rules';
|
|
3
3
|
import { serialize } from 'bson';
|
|
4
4
|
import { Metrics } from '../../metrics/Metrics.js';
|
|
5
|
-
import
|
|
5
|
+
import * as sync from '../../sync/sync-index.js';
|
|
6
6
|
import * as util from '../../util/util-index.js';
|
|
7
7
|
import { SyncRoutes } from './sync-stream.js';
|
|
8
|
-
import { RequestTracker } from '../../sync/RequestTracker.js';
|
|
9
8
|
export const syncStreamReactive = (router) => router.reactiveStream(SyncRoutes.STREAM, {
|
|
10
|
-
authorize: ({ context }) => {
|
|
11
|
-
return {
|
|
12
|
-
authorized: !!context.token_payload,
|
|
13
|
-
errors: ['Authentication required'].concat(context.token_errors ?? [])
|
|
14
|
-
};
|
|
15
|
-
},
|
|
16
9
|
validator: schema.createTsCodecValidator(util.StreamingSyncRequest, { allowAdditional: true }),
|
|
17
10
|
handler: async ({ context, params, responder, observer, initialN }) => {
|
|
18
11
|
const { system } = context;
|
|
@@ -51,11 +44,10 @@ export const syncStreamReactive = (router) => router.reactiveStream(SyncRoutes.S
|
|
|
51
44
|
const removeStopHandler = system.addStopHandler(() => {
|
|
52
45
|
observer.triggerCancel();
|
|
53
46
|
});
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const tracker = new RequestTracker();
|
|
47
|
+
Metrics.getInstance().concurrent_connections.add(1);
|
|
48
|
+
const tracker = new sync.RequestTracker();
|
|
57
49
|
try {
|
|
58
|
-
for await (const data of streamResponse({
|
|
50
|
+
for await (const data of sync.streamResponse({
|
|
59
51
|
storage,
|
|
60
52
|
params: {
|
|
61
53
|
...params,
|
|
@@ -121,7 +113,7 @@ export const syncStreamReactive = (router) => router.reactiveStream(SyncRoutes.S
|
|
|
121
113
|
operations_synced: tracker.operationsSynced,
|
|
122
114
|
data_synced_bytes: tracker.dataSyncedBytes
|
|
123
115
|
});
|
|
124
|
-
|
|
116
|
+
Metrics.getInstance().concurrent_connections.add(-1);
|
|
125
117
|
}
|
|
126
118
|
}
|
|
127
119
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-route.js","sourceRoot":"","sources":["../../../src/routes/endpoints/socket-route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"socket-route.js","sourceRoot":"","sources":["../../../src/routes/endpoints/socket-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { errors, logger, router, schema } from '@powersync/lib-services-framework';
|
|
2
2
|
import { RequestParameters } from '@powersync/service-sync-rules';
|
|
3
3
|
import { Readable } from 'stream';
|
|
4
4
|
import * as sync from '../../sync/sync-index.js';
|
|
@@ -37,11 +37,10 @@ export const syncStreamed = routeDefinition({
|
|
|
37
37
|
description: 'No sync rules available'
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
const metrics = container.getImplementation(Metrics);
|
|
41
40
|
const controller = new AbortController();
|
|
42
41
|
const tracker = new RequestTracker();
|
|
43
42
|
try {
|
|
44
|
-
|
|
43
|
+
Metrics.getInstance().concurrent_connections.add(1);
|
|
45
44
|
const stream = Readable.from(sync.transformToBytesTracked(sync.ndjson(sync.streamResponse({
|
|
46
45
|
storage,
|
|
47
46
|
params,
|
|
@@ -73,7 +72,7 @@ export const syncStreamed = routeDefinition({
|
|
|
73
72
|
data: stream,
|
|
74
73
|
afterSend: async () => {
|
|
75
74
|
controller.abort();
|
|
76
|
-
|
|
75
|
+
Metrics.getInstance().concurrent_connections.add(-1);
|
|
77
76
|
logger.info(`Sync stream complete`, {
|
|
78
77
|
user_id: syncParams.user_id,
|
|
79
78
|
operations_synced: tracker.operationsSynced,
|
|
@@ -84,7 +83,7 @@ export const syncStreamed = routeDefinition({
|
|
|
84
83
|
}
|
|
85
84
|
catch (ex) {
|
|
86
85
|
controller.abort();
|
|
87
|
-
|
|
86
|
+
Metrics.getInstance().concurrent_connections.add(-1);
|
|
88
87
|
}
|
|
89
88
|
}
|
|
90
89
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-stream.js","sourceRoot":"","sources":["../../../src/routes/endpoints/sync-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sync-stream.js","sourceRoot":"","sources":["../../../src/routes/endpoints/sync-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-register.js","sourceRoot":"","sources":["../../src/routes/route-register.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"route-register.js","sourceRoot":"","sources":["../../src/routes/route-register.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { IReactiveStream, ReactiveSocketRouter } from '@powersync/service-rsocket-router';
|
|
1
2
|
import * as t from 'ts-codec';
|
|
2
|
-
import { ReactiveSocketRouter, IReactiveStream } from '@powersync/service-rsocket-router';
|
|
3
3
|
import { Context } from './router.js';
|
|
4
|
-
export declare const RSocketContextMeta: t.ObjectCodec<{
|
|
5
|
-
token: t.IdentityCodec<t.CodecType.String>;
|
|
6
|
-
}>;
|
|
7
4
|
/**
|
|
8
5
|
* Creates a socket route handler given a router instance
|
|
9
6
|
*/
|
|
10
7
|
export type SocketRouteGenerator = (router: ReactiveSocketRouter<Context>) => IReactiveStream;
|
|
8
|
+
export declare const RSocketContextMeta: t.ObjectCodec<{
|
|
9
|
+
token: t.IdentityCodec<t.CodecType.String>;
|
|
10
|
+
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-socket.js","sourceRoot":"","sources":["../../src/routes/router-socket.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"router-socket.js","sourceRoot":"","sources":["../../src/routes/router-socket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAS9B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM;CAChB,CAAC,CAAC"}
|
package/dist/routes/router.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export type RequestEndpoint<I, O, C = Context, Payload = RequestEndpointHandlerP
|
|
|
20
20
|
export type RequestEndpointHandlerPayload<I = any, C = Context, Request = BasicRouterRequest> = router.EndpointHandlerPayload<I, C> & {
|
|
21
21
|
request: Request;
|
|
22
22
|
};
|
|
23
|
+
export type RouteDefinition<I = any, O = any> = RequestEndpoint<I, O>;
|
|
23
24
|
/**
|
|
24
25
|
* Helper function for making generics work well when defining routes
|
|
25
26
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/routes/router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/routes/router.ts"],"names":[],"mappings":"AAwCA;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA4C;IAE5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes-index.js","sourceRoot":"","sources":["../../src/routes/routes-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,sCAAsC,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"routes-index.js","sourceRoot":"","sources":["../../src/routes/routes-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,SAAS,MAAM,sCAAsC,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
|
|
@@ -175,7 +175,7 @@ export interface SyncRulesBucketStorage {
|
|
|
175
175
|
* @param dataBuckets current bucket states
|
|
176
176
|
* @param options batch size options
|
|
177
177
|
*/
|
|
178
|
-
getBucketDataBatch(checkpoint: util.OpId, dataBuckets: Map<string, string>, options?: BucketDataBatchOptions): AsyncIterable<
|
|
178
|
+
getBucketDataBatch(checkpoint: util.OpId, dataBuckets: Map<string, string>, options?: BucketDataBatchOptions): AsyncIterable<SyncBucketDataBatch>;
|
|
179
179
|
/**
|
|
180
180
|
* Compute checksums for a given list of buckets.
|
|
181
181
|
*
|
|
@@ -206,6 +206,7 @@ export interface SyncRulesBucketStorage {
|
|
|
206
206
|
* Errors are cleared on commit.
|
|
207
207
|
*/
|
|
208
208
|
reportError(e: any): Promise<void>;
|
|
209
|
+
compact(options?: CompactOptions): Promise<void>;
|
|
209
210
|
}
|
|
210
211
|
export interface SyncRuleStatus {
|
|
211
212
|
checkpoint_lsn: string | null;
|
|
@@ -307,4 +308,33 @@ export interface SaveDelete {
|
|
|
307
308
|
before: SqliteRow;
|
|
308
309
|
after?: undefined;
|
|
309
310
|
}
|
|
311
|
+
export interface SyncBucketDataBatch {
|
|
312
|
+
batch: util.SyncBucketData;
|
|
313
|
+
targetOp: bigint | null;
|
|
314
|
+
}
|
|
310
315
|
export declare function mergeToast(record: ToastableSqliteRow, persisted: ToastableSqliteRow): ToastableSqliteRow;
|
|
316
|
+
export interface CompactOptions {
|
|
317
|
+
/**
|
|
318
|
+
* Heap memory limit for the compact process.
|
|
319
|
+
*
|
|
320
|
+
* Add around 64MB to this to determine the "--max-old-space-size" argument.
|
|
321
|
+
* Add another 80MB to get RSS usage / memory limits.
|
|
322
|
+
*/
|
|
323
|
+
memoryLimitMB?: number;
|
|
324
|
+
/**
|
|
325
|
+
* If specified, ignore any operations newer than this when compacting.
|
|
326
|
+
*
|
|
327
|
+
* This is primarily for tests, where we want to test compacting at a specific
|
|
328
|
+
* point.
|
|
329
|
+
*
|
|
330
|
+
* This can also be used to create a "safe buffer" of recent operations that should
|
|
331
|
+
* not be compacted, to avoid invalidating checkpoints in use.
|
|
332
|
+
*/
|
|
333
|
+
maxOpId?: bigint;
|
|
334
|
+
/**
|
|
335
|
+
* If specified, compact only the specific buckets.
|
|
336
|
+
*
|
|
337
|
+
* If not specified, compacts all buckets.
|
|
338
|
+
*/
|
|
339
|
+
compactBuckets?: string[];
|
|
340
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BucketStorage.js","sourceRoot":"","sources":["../../src/storage/BucketStorage.ts"],"names":[],"mappings":"AA+JA,MAAM,OAAO,yBAAyB;IAGpC,YAA4B,EAAU,EAAkB,UAAwB,EAAE,cAA6B;QAAnF,OAAE,GAAF,EAAE,CAAQ;QAAkB,eAAU,GAAV,UAAU,CAAc;QAC9E,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,aAAa,IAAI,CAAC,EAAE,EAAE,CAAC;IAChC,CAAC;CACF;AAYD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"BucketStorage.js","sourceRoot":"","sources":["../../src/storage/BucketStorage.ts"],"names":[],"mappings":"AA+JA,MAAM,OAAO,yBAAyB;IAGpC,YAA4B,EAAU,EAAkB,UAAwB,EAAE,cAA6B;QAAnF,OAAE,GAAF,EAAE,CAAQ;QAAkB,eAAU,GAAV,UAAU,CAAc;QAC9E,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,aAAa,IAAI,CAAC,EAAE,EAAE,CAAC;IAChC,CAAC;CACF;AAYD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAuNlE,MAAM,UAAU,UAAU,CAAC,MAA0B,EAAE,SAA6B;IAClF,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;QACtB,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE;YACrC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;SACjC;aAAM;YACL,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SAC9B;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { PowerSyncMongo } from './db.js';
|
|
2
|
+
import { CompactOptions } from '../BucketStorage.js';
|
|
3
|
+
/**
|
|
4
|
+
* Additional options, primarily for testing.
|
|
5
|
+
*/
|
|
6
|
+
export interface MongoCompactOptions extends CompactOptions {
|
|
7
|
+
/** Minimum of 2 */
|
|
8
|
+
clearBatchLimit?: number;
|
|
9
|
+
/** Minimum of 1 */
|
|
10
|
+
moveBatchLimit?: number;
|
|
11
|
+
/** Minimum of 1 */
|
|
12
|
+
moveBatchQueryLimit?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class MongoCompactor {
|
|
15
|
+
private db;
|
|
16
|
+
private group_id;
|
|
17
|
+
private updates;
|
|
18
|
+
private idLimitBytes;
|
|
19
|
+
private moveBatchLimit;
|
|
20
|
+
private moveBatchQueryLimit;
|
|
21
|
+
private clearBatchLimit;
|
|
22
|
+
private maxOpId;
|
|
23
|
+
private buckets;
|
|
24
|
+
constructor(db: PowerSyncMongo, group_id: number, options?: MongoCompactOptions);
|
|
25
|
+
/**
|
|
26
|
+
* Compact buckets by converting operations into MOVE and/or CLEAR operations.
|
|
27
|
+
*
|
|
28
|
+
* See /docs/compacting-operations.md for details.
|
|
29
|
+
*/
|
|
30
|
+
compact(): Promise<void>;
|
|
31
|
+
compactInternal(bucket: string | undefined): Promise<void>;
|
|
32
|
+
private flush;
|
|
33
|
+
/**
|
|
34
|
+
* Perform a CLEAR compact for a bucket.
|
|
35
|
+
*
|
|
36
|
+
* @param bucket bucket name
|
|
37
|
+
* @param op op_id of the last non-PUT operation, which will be converted to CLEAR.
|
|
38
|
+
*/
|
|
39
|
+
private clearBucket;
|
|
40
|
+
}
|