cojson 0.15.13 → 0.15.15
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +8 -0
- package/dist/PeerState.d.ts +1 -0
- package/dist/PeerState.d.ts.map +1 -1
- package/dist/PeerState.js +3 -0
- package/dist/PeerState.js.map +1 -1
- package/dist/coValueCore/coValueCore.d.ts.map +1 -1
- package/dist/coValueCore/coValueCore.js +19 -17
- package/dist/coValueCore/coValueCore.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/streamUtils.d.ts +2 -1
- package/dist/streamUtils.d.ts.map +1 -1
- package/dist/streamUtils.js +3 -1
- package/dist/streamUtils.js.map +1 -1
- package/dist/sync.d.ts +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +5 -5
- package/dist/sync.js.map +1 -1
- package/dist/tests/SyncStateManager.test.js +31 -2
- package/dist/tests/SyncStateManager.test.js.map +1 -1
- package/dist/tests/sync.load.test.js +100 -14
- package/dist/tests/sync.load.test.js.map +1 -1
- package/dist/tests/sync.mesh.test.js +2 -0
- package/dist/tests/sync.mesh.test.js.map +1 -1
- package/dist/tests/sync.test.js +8 -5
- package/dist/tests/sync.test.js.map +1 -1
- package/dist/tests/testUtils.d.ts +3 -0
- package/dist/tests/testUtils.d.ts.map +1 -1
- package/dist/tests/testUtils.js +9 -0
- package/dist/tests/testUtils.js.map +1 -1
- package/package.json +1 -1
- package/src/PeerState.ts +4 -0
- package/src/coValueCore/coValueCore.ts +20 -22
- package/src/config.ts +8 -0
- package/src/streamUtils.ts +4 -0
- package/src/sync.ts +6 -7
- package/src/tests/SyncStateManager.test.ts +40 -2
- package/src/tests/sync.load.test.ts +141 -16
- package/src/tests/sync.mesh.test.ts +2 -0
- package/src/tests/sync.test.ts +8 -6
- package/src/tests/testUtils.ts +14 -0
package/dist/tests/testUtils.js
CHANGED
|
@@ -296,6 +296,7 @@ export function getSyncServerConnectedPeer(opts) {
|
|
|
296
296
|
role: "client",
|
|
297
297
|
name: opts.ourName,
|
|
298
298
|
},
|
|
299
|
+
persistent: opts?.persistent,
|
|
299
300
|
});
|
|
300
301
|
currentSyncServer.syncManager.addPeer(peer2);
|
|
301
302
|
return {
|
|
@@ -319,6 +320,7 @@ export function setupTestNode(opts = {}) {
|
|
|
319
320
|
syncServerName: opts?.syncServerName,
|
|
320
321
|
ourName: opts?.ourName,
|
|
321
322
|
syncServer: opts?.syncServer,
|
|
323
|
+
persistent: opts?.persistent,
|
|
322
324
|
});
|
|
323
325
|
node.syncManager.addPeer(peer);
|
|
324
326
|
return {
|
|
@@ -431,7 +433,14 @@ export function connectedPeersWithMessagesTracking(opts) {
|
|
|
431
433
|
const [peer1, peer2] = connectedPeers(opts.peer1.id, opts.peer2.id, {
|
|
432
434
|
peer1role: opts.peer1.role,
|
|
433
435
|
peer2role: opts.peer2.role,
|
|
436
|
+
persistent: opts.persistent,
|
|
434
437
|
});
|
|
438
|
+
// If the persistent option is not provided, we default to true for the server and false for the client
|
|
439
|
+
// Trying to mimic the real world behavior of the sync server
|
|
440
|
+
if (opts.persistent === undefined) {
|
|
441
|
+
peer1.persistent = opts.peer1.role === "server";
|
|
442
|
+
peer2.persistent = opts.peer2.role === "server";
|
|
443
|
+
}
|
|
435
444
|
const peer1Push = peer1.outgoing.push;
|
|
436
445
|
peer1.outgoing.push = (msg) => {
|
|
437
446
|
if (typeof msg !== "string") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/PeerState.ts
CHANGED
|
@@ -1056,37 +1056,33 @@ export class CoValueCore {
|
|
|
1056
1056
|
return;
|
|
1057
1057
|
}
|
|
1058
1058
|
|
|
1059
|
-
const peersToActuallyLoadFrom = [] as PeerState[];
|
|
1060
|
-
|
|
1061
1059
|
for (const peer of peers) {
|
|
1062
|
-
const currentState = this.peers.get(peer.id)?.type;
|
|
1063
|
-
|
|
1064
|
-
if (
|
|
1065
|
-
!currentState ||
|
|
1066
|
-
currentState === "unknown" ||
|
|
1067
|
-
currentState === "unavailable"
|
|
1068
|
-
) {
|
|
1069
|
-
peersToActuallyLoadFrom.push(peer);
|
|
1060
|
+
const currentState = this.peers.get(peer.id)?.type ?? "unknown";
|
|
1061
|
+
|
|
1062
|
+
if (currentState === "unknown" || currentState === "unavailable") {
|
|
1070
1063
|
this.markPending(peer.id);
|
|
1064
|
+
this.internalLoadFromPeer(peer);
|
|
1071
1065
|
}
|
|
1072
1066
|
}
|
|
1073
|
-
|
|
1074
|
-
for (const peer of peersToActuallyLoadFrom) {
|
|
1075
|
-
this.internalLoadFromPeer(peer);
|
|
1076
|
-
}
|
|
1077
1067
|
}
|
|
1078
1068
|
|
|
1079
1069
|
internalLoadFromPeer(peer: PeerState) {
|
|
1080
|
-
if (peer.closed) {
|
|
1070
|
+
if (peer.closed && !peer.persistent) {
|
|
1081
1071
|
this.markNotFoundInPeer(peer.id);
|
|
1082
1072
|
return;
|
|
1083
1073
|
}
|
|
1084
1074
|
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
peer.
|
|
1075
|
+
/**
|
|
1076
|
+
* On reconnection persistent peers will automatically fire the load request
|
|
1077
|
+
* as part of the reconnection process.
|
|
1078
|
+
*/
|
|
1079
|
+
if (!peer.closed) {
|
|
1080
|
+
peer.pushOutgoingMessage({
|
|
1081
|
+
action: "load",
|
|
1082
|
+
...this.knownState(),
|
|
1083
|
+
});
|
|
1084
|
+
peer.trackLoadRequestSent(this.id);
|
|
1085
|
+
}
|
|
1090
1086
|
|
|
1091
1087
|
return new Promise<void>((resolve) => {
|
|
1092
1088
|
const markNotFound = () => {
|
|
@@ -1100,7 +1096,9 @@ export class CoValueCore {
|
|
|
1100
1096
|
};
|
|
1101
1097
|
|
|
1102
1098
|
const timeout = setTimeout(markNotFound, CO_VALUE_LOADING_CONFIG.TIMEOUT);
|
|
1103
|
-
const removeCloseListener = peer.
|
|
1099
|
+
const removeCloseListener = peer.persistent
|
|
1100
|
+
? undefined
|
|
1101
|
+
: peer.addCloseListener(markNotFound);
|
|
1104
1102
|
|
|
1105
1103
|
const listener = (state: CoValueCore) => {
|
|
1106
1104
|
const peerState = state.peers.get(peer.id);
|
|
@@ -1111,7 +1109,7 @@ export class CoValueCore {
|
|
|
1111
1109
|
peerState?.type === "unavailable"
|
|
1112
1110
|
) {
|
|
1113
1111
|
this.listeners.delete(listener);
|
|
1114
|
-
removeCloseListener();
|
|
1112
|
+
removeCloseListener?.();
|
|
1115
1113
|
clearTimeout(timeout);
|
|
1116
1114
|
resolve();
|
|
1117
1115
|
}
|
package/src/config.ts
CHANGED
|
@@ -13,6 +13,14 @@ export const CO_VALUE_LOADING_CONFIG = {
|
|
|
13
13
|
RETRY_DELAY: 3000,
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
+
export function setCoValueLoadingMaxRetries(maxRetries: number) {
|
|
17
|
+
CO_VALUE_LOADING_CONFIG.MAX_RETRIES = maxRetries;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function setCoValueLoadingTimeout(timeout: number) {
|
|
21
|
+
CO_VALUE_LOADING_CONFIG.TIMEOUT = timeout;
|
|
22
|
+
}
|
|
23
|
+
|
|
16
24
|
export function setCoValueLoadingRetryDelay(delay: number) {
|
|
17
25
|
CO_VALUE_LOADING_CONFIG.RETRY_DELAY = delay;
|
|
18
26
|
}
|
package/src/streamUtils.ts
CHANGED
|
@@ -13,9 +13,11 @@ export function connectedPeers(
|
|
|
13
13
|
{
|
|
14
14
|
peer1role = "client",
|
|
15
15
|
peer2role = "client",
|
|
16
|
+
persistent = false,
|
|
16
17
|
}: {
|
|
17
18
|
peer1role?: Peer["role"];
|
|
18
19
|
peer2role?: Peer["role"];
|
|
20
|
+
persistent?: boolean;
|
|
19
21
|
} = {},
|
|
20
22
|
): [Peer, Peer] {
|
|
21
23
|
const from1to2 = new ConnectedPeerChannel();
|
|
@@ -26,6 +28,7 @@ export function connectedPeers(
|
|
|
26
28
|
incoming: from2to1,
|
|
27
29
|
outgoing: from1to2,
|
|
28
30
|
role: peer2role,
|
|
31
|
+
persistent,
|
|
29
32
|
};
|
|
30
33
|
|
|
31
34
|
const peer1AsPeer: Peer = {
|
|
@@ -33,6 +36,7 @@ export function connectedPeers(
|
|
|
33
36
|
incoming: from1to2,
|
|
34
37
|
outgoing: from2to1,
|
|
35
38
|
role: peer1role,
|
|
39
|
+
persistent,
|
|
36
40
|
};
|
|
37
41
|
|
|
38
42
|
return [peer1AsPeer, peer2AsPeer];
|
package/src/sync.ts
CHANGED
|
@@ -88,7 +88,7 @@ export interface Peer {
|
|
|
88
88
|
outgoing: OutgoingPeerChannel;
|
|
89
89
|
role: "server" | "client";
|
|
90
90
|
priority?: number;
|
|
91
|
-
|
|
91
|
+
persistent?: boolean;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
export function combinedKnownStates(
|
|
@@ -157,8 +157,7 @@ export class SyncManager {
|
|
|
157
157
|
|
|
158
158
|
getServerPeers(excludePeerId?: PeerID): PeerState[] {
|
|
159
159
|
return this.getPeers().filter(
|
|
160
|
-
(peer) =>
|
|
161
|
-
peer.role === "server" && peer.id !== excludePeerId && !peer.closed,
|
|
160
|
+
(peer) => peer.role === "server" && peer.id !== excludePeerId,
|
|
162
161
|
);
|
|
163
162
|
}
|
|
164
163
|
|
|
@@ -353,7 +352,7 @@ export class SyncManager {
|
|
|
353
352
|
unsubscribeFromKnownStatesUpdates();
|
|
354
353
|
this.peersCounter.add(-1, { role: peer.role });
|
|
355
354
|
|
|
356
|
-
if (peer.
|
|
355
|
+
if (!peer.persistent && this.peers[peer.id] === peerState) {
|
|
357
356
|
delete this.peers[peer.id];
|
|
358
357
|
}
|
|
359
358
|
});
|
|
@@ -794,8 +793,8 @@ export class SyncManager {
|
|
|
794
793
|
|
|
795
794
|
const peerState = this.peers[peerId];
|
|
796
795
|
|
|
797
|
-
// The peer has been closed, so it isn't possible to sync
|
|
798
|
-
if (!peerState
|
|
796
|
+
// The peer has been closed and is not persistent, so it isn't possible to sync
|
|
797
|
+
if (!peerState) {
|
|
799
798
|
return;
|
|
800
799
|
}
|
|
801
800
|
|
|
@@ -830,7 +829,7 @@ export class SyncManager {
|
|
|
830
829
|
return this.local.storage?.waitForSync(id, this.local.getCoValue(id));
|
|
831
830
|
}
|
|
832
831
|
|
|
833
|
-
waitForSync(id: RawCoID, timeout =
|
|
832
|
+
waitForSync(id: RawCoID, timeout = 60_000) {
|
|
834
833
|
const peers = this.getPeers();
|
|
835
834
|
|
|
836
835
|
return Promise.all(
|
|
@@ -251,9 +251,11 @@ describe("SyncStateManager", () => {
|
|
|
251
251
|
).toEqual({ uploaded: true });
|
|
252
252
|
});
|
|
253
253
|
|
|
254
|
-
test("should skip closed peers", async () => {
|
|
254
|
+
test("should skip non-persistent closed peers", async () => {
|
|
255
255
|
const client = setupTestNode();
|
|
256
|
-
const { peerState } = client.connectToSyncServer(
|
|
256
|
+
const { peerState } = client.connectToSyncServer({
|
|
257
|
+
persistent: false,
|
|
258
|
+
});
|
|
257
259
|
|
|
258
260
|
peerState.gracefulShutdown();
|
|
259
261
|
|
|
@@ -263,6 +265,42 @@ describe("SyncStateManager", () => {
|
|
|
263
265
|
await map.core.waitForSync();
|
|
264
266
|
});
|
|
265
267
|
|
|
268
|
+
test("should wait for persistent closed peers to reconnect", async () => {
|
|
269
|
+
const client = setupTestNode();
|
|
270
|
+
const { peerState } = client.connectToSyncServer({
|
|
271
|
+
persistent: true,
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
peerState.gracefulShutdown();
|
|
275
|
+
|
|
276
|
+
const group = client.node.createGroup();
|
|
277
|
+
const map = group.createMap();
|
|
278
|
+
|
|
279
|
+
const promise = map.core.waitForSync().then(() => "waitForSync");
|
|
280
|
+
|
|
281
|
+
const result = await Promise.race([
|
|
282
|
+
promise,
|
|
283
|
+
new Promise((resolve) => {
|
|
284
|
+
setTimeout(() => resolve("timeout"), 10);
|
|
285
|
+
}),
|
|
286
|
+
]);
|
|
287
|
+
|
|
288
|
+
expect(result).toBe("timeout");
|
|
289
|
+
|
|
290
|
+
client.connectToSyncServer({
|
|
291
|
+
persistent: true,
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
const result2 = await Promise.race([
|
|
295
|
+
promise,
|
|
296
|
+
new Promise((resolve) => {
|
|
297
|
+
setTimeout(() => resolve("timeout"), 10);
|
|
298
|
+
}),
|
|
299
|
+
]);
|
|
300
|
+
|
|
301
|
+
expect(result2).toBe("waitForSync");
|
|
302
|
+
});
|
|
303
|
+
|
|
266
304
|
test("should skip client peers that are not subscribed to the coValue", async () => {
|
|
267
305
|
const server = setupTestNode({ isSyncServer: true });
|
|
268
306
|
const client = setupTestNode();
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { beforeEach, describe, expect, test, vi } from "vitest";
|
|
2
2
|
import { expectMap } from "../coValue";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
CO_VALUE_LOADING_CONFIG,
|
|
5
|
+
setCoValueLoadingRetryDelay,
|
|
6
|
+
} from "../config";
|
|
4
7
|
import { RawCoMap } from "../exports";
|
|
5
8
|
import {
|
|
6
9
|
SyncMessagesLog,
|
|
@@ -59,31 +62,36 @@ describe("loading coValues from server", () => {
|
|
|
59
62
|
connected: true,
|
|
60
63
|
});
|
|
61
64
|
|
|
62
|
-
expect(async () => await node.load("test" as any)).rejects.toThrow(
|
|
65
|
+
await expect(async () => await node.load("test" as any)).rejects.toThrow(
|
|
63
66
|
"Trying to load CoValue with invalid id test",
|
|
64
67
|
);
|
|
65
|
-
expect(async () => await node.load(null as any)).rejects.toThrow(
|
|
68
|
+
await expect(async () => await node.load(null as any)).rejects.toThrow(
|
|
66
69
|
"Trying to load CoValue with invalid id null",
|
|
67
70
|
);
|
|
68
|
-
expect(async () => await node.load(undefined as any)).rejects.toThrow(
|
|
71
|
+
await expect(async () => await node.load(undefined as any)).rejects.toThrow(
|
|
69
72
|
"Trying to load CoValue with invalid id undefined",
|
|
70
73
|
);
|
|
71
|
-
expect(async () => await node.load(1 as any)).rejects.toThrow(
|
|
74
|
+
await expect(async () => await node.load(1 as any)).rejects.toThrow(
|
|
72
75
|
"Trying to load CoValue with invalid id 1",
|
|
73
76
|
);
|
|
74
|
-
expect(async () => await node.load({} as any)).rejects.toThrow(
|
|
77
|
+
await expect(async () => await node.load({} as any)).rejects.toThrow(
|
|
75
78
|
"Trying to load CoValue with invalid id [object Object]",
|
|
76
79
|
);
|
|
77
|
-
expect(async () => await node.load([] as any)).rejects.toThrow(
|
|
80
|
+
await expect(async () => await node.load([] as any)).rejects.toThrow(
|
|
78
81
|
"Trying to load CoValue with invalid id []",
|
|
79
82
|
);
|
|
80
|
-
expect(async () => await node.load(["test"] as any)).rejects.toThrow(
|
|
83
|
+
await expect(async () => await node.load(["test"] as any)).rejects.toThrow(
|
|
81
84
|
'Trying to load CoValue with invalid id ["test"]',
|
|
82
85
|
);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
)
|
|
86
|
-
|
|
86
|
+
await expect(
|
|
87
|
+
async () => await node.load((() => {}) as any),
|
|
88
|
+
).rejects.toMatchInlineSnapshot(`
|
|
89
|
+
[TypeError: Trying to load CoValue with invalid id () => {
|
|
90
|
+
}]
|
|
91
|
+
`);
|
|
92
|
+
await expect(
|
|
93
|
+
async () => await node.load(new Date() as any),
|
|
94
|
+
).rejects.toThrow();
|
|
87
95
|
});
|
|
88
96
|
|
|
89
97
|
test("unavailable coValue retry with skipRetry set to true", async () => {
|
|
@@ -502,9 +510,12 @@ describe("loading coValues from server", () => {
|
|
|
502
510
|
`);
|
|
503
511
|
});
|
|
504
512
|
|
|
505
|
-
test("should
|
|
513
|
+
test("should wait for a persistent peer to reconnect before marking the coValue as unavailable", async () => {
|
|
506
514
|
const client = setupTestNode();
|
|
507
|
-
const
|
|
515
|
+
const connection1 = client.connectToSyncServer({
|
|
516
|
+
persistent: true,
|
|
517
|
+
});
|
|
518
|
+
connection1.peerState.gracefulShutdown();
|
|
508
519
|
|
|
509
520
|
const group = jazzCloud.node.createGroup();
|
|
510
521
|
group.addMember("everyone", "writer");
|
|
@@ -512,13 +523,62 @@ describe("loading coValues from server", () => {
|
|
|
512
523
|
const map = group.createMap({
|
|
513
524
|
test: "value",
|
|
514
525
|
});
|
|
526
|
+
const promise = client.node.load(map.id);
|
|
527
|
+
|
|
528
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
529
|
+
|
|
530
|
+
client.connectToSyncServer();
|
|
531
|
+
|
|
532
|
+
const coValue = await promise;
|
|
533
|
+
|
|
534
|
+
expect(coValue).not.toBe("unavailable");
|
|
535
|
+
|
|
536
|
+
expect(
|
|
537
|
+
SyncMessagesLog.getMessages({
|
|
538
|
+
Group: group.core,
|
|
539
|
+
Map: map.core,
|
|
540
|
+
}),
|
|
541
|
+
).toMatchInlineSnapshot(`
|
|
542
|
+
[
|
|
543
|
+
"client -> server | LOAD Map sessions: empty",
|
|
544
|
+
"server -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
545
|
+
"server -> client | CONTENT Map header: true new: After: 0 New: 1",
|
|
546
|
+
"client -> server | KNOWN Group sessions: header/5",
|
|
547
|
+
"client -> server | KNOWN Map sessions: header/1",
|
|
548
|
+
]
|
|
549
|
+
`);
|
|
550
|
+
});
|
|
551
|
+
|
|
552
|
+
test("should handle reconnections in the middle of a load with a persistent peer", async () => {
|
|
553
|
+
const client = setupTestNode();
|
|
554
|
+
const connection1 = client.connectToSyncServer({
|
|
555
|
+
persistent: true,
|
|
556
|
+
});
|
|
557
|
+
|
|
558
|
+
const group = jazzCloud.node.createGroup();
|
|
559
|
+
group.addMember("everyone", "writer");
|
|
560
|
+
|
|
561
|
+
const map = group.createMap({
|
|
562
|
+
test: "value",
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
blockMessageTypeOnOutgoingPeer(connection1.peerOnServer, "content", {
|
|
566
|
+
id: map.id,
|
|
567
|
+
once: true,
|
|
568
|
+
});
|
|
515
569
|
|
|
516
570
|
const promise = client.node.load(map.id);
|
|
517
571
|
|
|
572
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
573
|
+
|
|
518
574
|
// Close the peer connection
|
|
519
|
-
peerState.gracefulShutdown();
|
|
575
|
+
connection1.peerState.gracefulShutdown();
|
|
576
|
+
|
|
577
|
+
client.connectToSyncServer();
|
|
578
|
+
|
|
579
|
+
const coValue = await promise;
|
|
520
580
|
|
|
521
|
-
expect(
|
|
581
|
+
expect(coValue).not.toBe("unavailable");
|
|
522
582
|
|
|
523
583
|
expect(
|
|
524
584
|
SyncMessagesLog.getMessages({
|
|
@@ -528,6 +588,13 @@ describe("loading coValues from server", () => {
|
|
|
528
588
|
).toMatchInlineSnapshot(`
|
|
529
589
|
[
|
|
530
590
|
"client -> server | LOAD Map sessions: empty",
|
|
591
|
+
"server -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
592
|
+
"client -> server | KNOWN Group sessions: header/5",
|
|
593
|
+
"client -> server | LOAD Map sessions: empty",
|
|
594
|
+
"client -> server | LOAD Group sessions: header/5",
|
|
595
|
+
"server -> client | KNOWN Group sessions: header/5",
|
|
596
|
+
"server -> client | CONTENT Map header: true new: After: 0 New: 1",
|
|
597
|
+
"client -> server | KNOWN Map sessions: header/1",
|
|
531
598
|
]
|
|
532
599
|
`);
|
|
533
600
|
});
|
|
@@ -904,4 +971,62 @@ describe("loading coValues from server", () => {
|
|
|
904
971
|
]
|
|
905
972
|
`);
|
|
906
973
|
});
|
|
974
|
+
|
|
975
|
+
test("should retry loading from a closed persistent peer after a timeout", async () => {
|
|
976
|
+
vi.useFakeTimers();
|
|
977
|
+
|
|
978
|
+
const client = setupTestNode();
|
|
979
|
+
|
|
980
|
+
const connection1 = client.connectToSyncServer({
|
|
981
|
+
persistent: true,
|
|
982
|
+
});
|
|
983
|
+
|
|
984
|
+
// Close the peer connection
|
|
985
|
+
connection1.peerState.gracefulShutdown();
|
|
986
|
+
|
|
987
|
+
const group = jazzCloud.node.createGroup();
|
|
988
|
+
group.addMember("everyone", "reader");
|
|
989
|
+
|
|
990
|
+
const map = group.createMap();
|
|
991
|
+
map.set("hello", "world");
|
|
992
|
+
|
|
993
|
+
const promise = loadCoValueOrFail(client.node, map.id);
|
|
994
|
+
|
|
995
|
+
await vi.advanceTimersByTimeAsync(
|
|
996
|
+
CO_VALUE_LOADING_CONFIG.TIMEOUT +
|
|
997
|
+
CO_VALUE_LOADING_CONFIG.RETRY_DELAY +
|
|
998
|
+
10,
|
|
999
|
+
);
|
|
1000
|
+
|
|
1001
|
+
client.connectToSyncServer({
|
|
1002
|
+
persistent: true,
|
|
1003
|
+
});
|
|
1004
|
+
|
|
1005
|
+
await vi.advanceTimersByTimeAsync(
|
|
1006
|
+
CO_VALUE_LOADING_CONFIG.TIMEOUT +
|
|
1007
|
+
CO_VALUE_LOADING_CONFIG.RETRY_DELAY +
|
|
1008
|
+
10,
|
|
1009
|
+
);
|
|
1010
|
+
|
|
1011
|
+
const coValue = await promise;
|
|
1012
|
+
|
|
1013
|
+
expect(coValue).not.toBe("unavailable");
|
|
1014
|
+
|
|
1015
|
+
expect(
|
|
1016
|
+
SyncMessagesLog.getMessages({
|
|
1017
|
+
Group: group.core,
|
|
1018
|
+
Map: map.core,
|
|
1019
|
+
}),
|
|
1020
|
+
).toMatchInlineSnapshot(`
|
|
1021
|
+
[
|
|
1022
|
+
"client -> server | LOAD Map sessions: empty",
|
|
1023
|
+
"server -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
1024
|
+
"server -> client | CONTENT Map header: true new: After: 0 New: 1",
|
|
1025
|
+
"client -> server | KNOWN Group sessions: header/5",
|
|
1026
|
+
"client -> server | KNOWN Map sessions: header/1",
|
|
1027
|
+
]
|
|
1028
|
+
`);
|
|
1029
|
+
|
|
1030
|
+
vi.useRealTimers();
|
|
1031
|
+
});
|
|
907
1032
|
});
|
|
@@ -26,6 +26,7 @@ function setupMesh() {
|
|
|
26
26
|
ourName: "edge-italy",
|
|
27
27
|
syncServerName: "core",
|
|
28
28
|
syncServer: coreServer.node,
|
|
29
|
+
persistent: true,
|
|
29
30
|
});
|
|
30
31
|
edgeItaly.addStorage({
|
|
31
32
|
ourName: "edge-italy",
|
|
@@ -36,6 +37,7 @@ function setupMesh() {
|
|
|
36
37
|
ourName: "edge-france",
|
|
37
38
|
syncServerName: "core",
|
|
38
39
|
syncServer: coreServer.node,
|
|
40
|
+
persistent: true,
|
|
39
41
|
});
|
|
40
42
|
edgeFrance.addStorage({
|
|
41
43
|
ourName: "edge-france",
|
package/src/tests/sync.test.ts
CHANGED
|
@@ -111,10 +111,12 @@ test("Can sync a coValue with private transactions through a server to another c
|
|
|
111
111
|
expect(mapOnClient2.get("hello")).toEqual("world");
|
|
112
112
|
});
|
|
113
113
|
|
|
114
|
-
test("should keep the peer state when the peer closes", async () => {
|
|
114
|
+
test("should keep the peer state when the peer closes if persistent is true", async () => {
|
|
115
115
|
const client = setupTestNode();
|
|
116
116
|
|
|
117
|
-
const { peer, peerState, peerOnServer } = client.connectToSyncServer(
|
|
117
|
+
const { peer, peerState, peerOnServer } = client.connectToSyncServer({
|
|
118
|
+
persistent: true,
|
|
119
|
+
});
|
|
118
120
|
|
|
119
121
|
const group = jazzCloud.node.createGroup();
|
|
120
122
|
const map = group.createMap();
|
|
@@ -133,12 +135,12 @@ test("should keep the peer state when the peer closes", async () => {
|
|
|
133
135
|
expect(syncManager.peers[peer.id]).not.toBeUndefined();
|
|
134
136
|
});
|
|
135
137
|
|
|
136
|
-
test("should delete the peer state when the peer closes if
|
|
138
|
+
test("should delete the peer state when the peer closes if persistent is false", async () => {
|
|
137
139
|
const client = setupTestNode();
|
|
138
140
|
|
|
139
|
-
const { peer, peerState, peerOnServer } = client.connectToSyncServer(
|
|
140
|
-
|
|
141
|
-
|
|
141
|
+
const { peer, peerState, peerOnServer } = client.connectToSyncServer({
|
|
142
|
+
persistent: false,
|
|
143
|
+
});
|
|
142
144
|
|
|
143
145
|
const group = jazzCloud.node.createGroup();
|
|
144
146
|
const map = group.createMap();
|
package/src/tests/testUtils.ts
CHANGED
|
@@ -429,6 +429,7 @@ export function getSyncServerConnectedPeer(opts: {
|
|
|
429
429
|
ourName?: string;
|
|
430
430
|
syncServer?: LocalNode;
|
|
431
431
|
peerId: string;
|
|
432
|
+
persistent?: boolean;
|
|
432
433
|
}) {
|
|
433
434
|
const currentSyncServer = opts?.syncServer ?? syncServer.current;
|
|
434
435
|
|
|
@@ -451,6 +452,7 @@ export function getSyncServerConnectedPeer(opts: {
|
|
|
451
452
|
role: "client",
|
|
452
453
|
name: opts.ourName,
|
|
453
454
|
},
|
|
455
|
+
persistent: opts?.persistent,
|
|
454
456
|
});
|
|
455
457
|
|
|
456
458
|
currentSyncServer.syncManager.addPeer(peer2);
|
|
@@ -483,6 +485,7 @@ export function setupTestNode(
|
|
|
483
485
|
syncServerName?: string;
|
|
484
486
|
ourName?: string;
|
|
485
487
|
syncServer?: LocalNode;
|
|
488
|
+
persistent?: boolean;
|
|
486
489
|
}) {
|
|
487
490
|
const { peer, peerStateOnServer, peerOnServer } =
|
|
488
491
|
getSyncServerConnectedPeer({
|
|
@@ -490,6 +493,7 @@ export function setupTestNode(
|
|
|
490
493
|
syncServerName: opts?.syncServerName,
|
|
491
494
|
ourName: opts?.ourName,
|
|
492
495
|
syncServer: opts?.syncServer,
|
|
496
|
+
persistent: opts?.persistent,
|
|
493
497
|
});
|
|
494
498
|
|
|
495
499
|
node.syncManager.addPeer(peer);
|
|
@@ -646,12 +650,22 @@ export type SyncTestMessage = {
|
|
|
646
650
|
export function connectedPeersWithMessagesTracking(opts: {
|
|
647
651
|
peer1: { id: string; role: Peer["role"]; name?: string };
|
|
648
652
|
peer2: { id: string; role: Peer["role"]; name?: string };
|
|
653
|
+
persistent?: boolean;
|
|
649
654
|
}) {
|
|
650
655
|
const [peer1, peer2] = connectedPeers(opts.peer1.id, opts.peer2.id, {
|
|
651
656
|
peer1role: opts.peer1.role,
|
|
652
657
|
peer2role: opts.peer2.role,
|
|
658
|
+
persistent: opts.persistent,
|
|
653
659
|
});
|
|
654
660
|
|
|
661
|
+
// If the persistent option is not provided, we default to true for the server and false for the client
|
|
662
|
+
// Trying to mimic the real world behavior of the sync server
|
|
663
|
+
if (opts.persistent === undefined) {
|
|
664
|
+
peer1.persistent = opts.peer1.role === "server";
|
|
665
|
+
|
|
666
|
+
peer2.persistent = opts.peer2.role === "server";
|
|
667
|
+
}
|
|
668
|
+
|
|
655
669
|
const peer1Push = peer1.outgoing.push;
|
|
656
670
|
peer1.outgoing.push = (msg) => {
|
|
657
671
|
if (typeof msg !== "string") {
|