cojson 0.20.10 → 0.20.12
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 +18 -0
- package/dist/OngoingStorageReconciliationTracker.d.ts +16 -0
- package/dist/OngoingStorageReconciliationTracker.d.ts.map +1 -0
- package/dist/OngoingStorageReconciliationTracker.js +75 -0
- package/dist/OngoingStorageReconciliationTracker.js.map +1 -0
- package/dist/StorageReconciliationAckTracker.d.ts +2 -2
- package/dist/StorageReconciliationAckTracker.d.ts.map +1 -1
- package/dist/StorageReconciliationAckTracker.js +2 -2
- package/dist/StorageReconciliationAckTracker.js.map +1 -1
- package/dist/sync.d.ts +11 -2
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +42 -10
- package/dist/sync.js.map +1 -1
- package/dist/tests/OngoingStorageReconciliationTracker.test.d.ts +2 -0
- package/dist/tests/OngoingStorageReconciliationTracker.test.d.ts.map +1 -0
- package/dist/tests/OngoingStorageReconciliationTracker.test.js +60 -0
- package/dist/tests/OngoingStorageReconciliationTracker.test.js.map +1 -0
- package/dist/tests/StorageReconciliationAckTracker.test.js +7 -7
- package/dist/tests/StorageReconciliationAckTracker.test.js.map +1 -1
- package/dist/tests/sync.storageReconciliation.test.js +7 -6
- package/dist/tests/sync.storageReconciliation.test.js.map +1 -1
- package/package.json +4 -4
- package/src/OngoingStorageReconciliationTracker.ts +97 -0
- package/src/StorageReconciliationAckTracker.ts +2 -2
- package/src/sync.ts +61 -13
- package/src/tests/OngoingStorageReconciliationTracker.test.ts +85 -0
- package/src/tests/StorageReconciliationAckTracker.test.ts +7 -7
- package/src/tests/sync.storageReconciliation.test.ts +8 -9
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, test, vi } from "vitest";
|
|
2
2
|
import { PeerState } from "../PeerState.js";
|
|
3
|
-
import {
|
|
3
|
+
import { StorageReconciliationServerAckTracker } from "../StorageReconciliationAckTracker.js";
|
|
4
4
|
import { ConnectedPeerChannel } from "../streamUtils.js";
|
|
5
5
|
function createPeerState(id = "peer-1") {
|
|
6
6
|
const peer = {
|
|
@@ -14,7 +14,7 @@ function createPeerState(id = "peer-1") {
|
|
|
14
14
|
}
|
|
15
15
|
describe("StorageReconciliationAckTracker", () => {
|
|
16
16
|
test("tracks pending acks and returns next offset on ack", () => {
|
|
17
|
-
const tracker = new
|
|
17
|
+
const tracker = new StorageReconciliationServerAckTracker();
|
|
18
18
|
tracker.trackBatch("batch-1", "peer-1", 100);
|
|
19
19
|
expect(tracker.pendingReconciliationAck.get("batch-1#peer-1")).toBe(100);
|
|
20
20
|
const nextOffset = tracker.handleAck("batch-1", "peer-1");
|
|
@@ -22,7 +22,7 @@ describe("StorageReconciliationAckTracker", () => {
|
|
|
22
22
|
expect(tracker.pendingReconciliationAck.has("batch-1#peer-1")).toBe(false);
|
|
23
23
|
});
|
|
24
24
|
test("invokes registered callback when ack is received", () => {
|
|
25
|
-
const tracker = new
|
|
25
|
+
const tracker = new StorageReconciliationServerAckTracker();
|
|
26
26
|
const peer = createPeerState("peer-1");
|
|
27
27
|
const onAck = vi.fn();
|
|
28
28
|
tracker.trackBatch("batch-1", peer.id, 50);
|
|
@@ -32,7 +32,7 @@ describe("StorageReconciliationAckTracker", () => {
|
|
|
32
32
|
expect(onAck).toHaveBeenCalledTimes(1);
|
|
33
33
|
});
|
|
34
34
|
test("invokes callback only once even if peer closes after ack", () => {
|
|
35
|
-
const tracker = new
|
|
35
|
+
const tracker = new StorageReconciliationServerAckTracker();
|
|
36
36
|
const peer = createPeerState("peer-1");
|
|
37
37
|
const onAck = vi.fn();
|
|
38
38
|
tracker.trackBatch("batch-1", peer.id, 50);
|
|
@@ -42,7 +42,7 @@ describe("StorageReconciliationAckTracker", () => {
|
|
|
42
42
|
expect(onAck).toHaveBeenCalledTimes(1);
|
|
43
43
|
});
|
|
44
44
|
test("invokes all listeners registered for a batch", () => {
|
|
45
|
-
const tracker = new
|
|
45
|
+
const tracker = new StorageReconciliationServerAckTracker();
|
|
46
46
|
const peer = createPeerState("peer-1");
|
|
47
47
|
const first = vi.fn();
|
|
48
48
|
const second = vi.fn();
|
|
@@ -54,14 +54,14 @@ describe("StorageReconciliationAckTracker", () => {
|
|
|
54
54
|
expect(second).toHaveBeenCalledTimes(1);
|
|
55
55
|
});
|
|
56
56
|
test("calls callback immediately when batch is not pending", () => {
|
|
57
|
-
const tracker = new
|
|
57
|
+
const tracker = new StorageReconciliationServerAckTracker();
|
|
58
58
|
const peer = createPeerState("peer-1");
|
|
59
59
|
const onAck = vi.fn();
|
|
60
60
|
tracker.waitForAck("missing-batch", peer, onAck);
|
|
61
61
|
expect(onAck).toHaveBeenCalledTimes(1);
|
|
62
62
|
});
|
|
63
63
|
test("aborts wait on peer close and clears pending ack", () => {
|
|
64
|
-
const tracker = new
|
|
64
|
+
const tracker = new StorageReconciliationServerAckTracker();
|
|
65
65
|
const peer = createPeerState("peer-1");
|
|
66
66
|
const onAck = vi.fn();
|
|
67
67
|
tracker.trackBatch("batch-1", peer.id, 50);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageReconciliationAckTracker.test.js","sourceRoot":"","sources":["../../src/tests/StorageReconciliationAckTracker.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"StorageReconciliationAckTracker.test.js","sourceRoot":"","sources":["../../src/tests/StorageReconciliationAckTracker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ beforeEach(async () => {
|
|
|
16
16
|
setStorageReconciliationInterval(originalInterval);
|
|
17
17
|
});
|
|
18
18
|
describe("full storage reconciliation", () => {
|
|
19
|
-
test("startStorageReconciliation sends 'reconcile' message, server responds with '
|
|
19
|
+
test("startStorageReconciliation sends 'reconcile' message, server responds with 'load' messages for missing CoValues", async () => {
|
|
20
20
|
const client = setupTestNode();
|
|
21
21
|
const { storage } = client.addStorage();
|
|
22
22
|
const group = client.node.createGroup();
|
|
@@ -46,7 +46,6 @@ describe("full storage reconciliation", () => {
|
|
|
46
46
|
"client -> server | RECONCILE",
|
|
47
47
|
"server -> client | LOAD Group sessions: empty",
|
|
48
48
|
"server -> client | LOAD Map sessions: empty",
|
|
49
|
-
"server -> client | RECONCILE_ACK",
|
|
50
49
|
"client -> storage | LOAD Group sessions: empty",
|
|
51
50
|
"storage -> client | CONTENT Group header: true new: After: 0 New: 4",
|
|
52
51
|
"client -> server | CONTENT Group header: true new: After: 0 New: 4",
|
|
@@ -57,10 +56,11 @@ describe("full storage reconciliation", () => {
|
|
|
57
56
|
"client -> server | KNOWN Map sessions: header/1",
|
|
58
57
|
"server -> client | KNOWN Group sessions: header/4",
|
|
59
58
|
"server -> client | KNOWN Map sessions: header/1",
|
|
59
|
+
"server -> client | RECONCILE_ACK",
|
|
60
60
|
]
|
|
61
61
|
`);
|
|
62
62
|
});
|
|
63
|
-
test("startStorageReconciliation sends 'reconcile' message, server responds with '
|
|
63
|
+
test("startStorageReconciliation sends 'reconcile' message, server responds with 'load' messages for outdated CoValues", async () => {
|
|
64
64
|
const client = setupTestNode();
|
|
65
65
|
const { storage } = client.addStorage();
|
|
66
66
|
client.connectToSyncServer({ persistent: true });
|
|
@@ -81,6 +81,7 @@ describe("full storage reconciliation", () => {
|
|
|
81
81
|
Group: group.core,
|
|
82
82
|
Map: map.core,
|
|
83
83
|
});
|
|
84
|
+
// Note: reconcile-ack is sent after all the unsynced coValues in the batch are synced
|
|
84
85
|
expect(messages).toMatchInlineSnapshot(`
|
|
85
86
|
[
|
|
86
87
|
"client -> storage | GET_KNOWN_STATE Group",
|
|
@@ -89,7 +90,6 @@ describe("full storage reconciliation", () => {
|
|
|
89
90
|
"storage -> client | GET_KNOWN_STATE_RESULT Map sessions: header/2",
|
|
90
91
|
"client -> server | RECONCILE",
|
|
91
92
|
"server -> client | LOAD Map sessions: header/1",
|
|
92
|
-
"server -> client | RECONCILE_ACK",
|
|
93
93
|
"client -> storage | GET_KNOWN_STATE Map",
|
|
94
94
|
"storage -> client | GET_KNOWN_STATE_RESULT Map sessions: header/2",
|
|
95
95
|
"client -> storage | LOAD Map sessions: empty",
|
|
@@ -100,6 +100,7 @@ describe("full storage reconciliation", () => {
|
|
|
100
100
|
"client -> server | KNOWN Map sessions: header/2",
|
|
101
101
|
"server -> client | KNOWN Group sessions: header/4",
|
|
102
102
|
"server -> client | KNOWN Map sessions: header/2",
|
|
103
|
+
"server -> client | RECONCILE_ACK",
|
|
103
104
|
]
|
|
104
105
|
`);
|
|
105
106
|
});
|
|
@@ -156,7 +157,6 @@ describe("full storage reconciliation", () => {
|
|
|
156
157
|
"client -> server | RECONCILE",
|
|
157
158
|
"server -> client | LOAD Group sessions: empty",
|
|
158
159
|
"server -> client | LOAD Map sessions: empty",
|
|
159
|
-
"server -> client | RECONCILE_ACK",
|
|
160
160
|
"client -> storage | LOAD Group sessions: empty",
|
|
161
161
|
"storage -> client | CONTENT Group header: true new: After: 0 New: 4",
|
|
162
162
|
"client -> server | CONTENT Group header: true new: After: 0 New: 4",
|
|
@@ -167,6 +167,7 @@ describe("full storage reconciliation", () => {
|
|
|
167
167
|
"client -> server | KNOWN Map sessions: header/1",
|
|
168
168
|
"server -> client | KNOWN Group sessions: header/4",
|
|
169
169
|
"server -> client | KNOWN Map sessions: header/1",
|
|
170
|
+
"server -> client | RECONCILE_ACK",
|
|
170
171
|
]
|
|
171
172
|
`);
|
|
172
173
|
});
|
|
@@ -317,7 +318,6 @@ describe("full storage reconciliation", () => {
|
|
|
317
318
|
"client -> server | RECONCILE",
|
|
318
319
|
"server -> client | LOAD Group sessions: empty",
|
|
319
320
|
"server -> client | LOAD Map sessions: empty",
|
|
320
|
-
"server -> client | RECONCILE_ACK",
|
|
321
321
|
"client -> storage | LOAD Group sessions: empty",
|
|
322
322
|
"storage -> client | CONTENT Group header: true new: After: 0 New: 4",
|
|
323
323
|
"client -> server | CONTENT Group header: true new: After: 0 New: 4",
|
|
@@ -328,6 +328,7 @@ describe("full storage reconciliation", () => {
|
|
|
328
328
|
"client -> server | KNOWN Map sessions: header/1",
|
|
329
329
|
"server -> client | KNOWN Group sessions: header/4",
|
|
330
330
|
"server -> client | KNOWN Map sessions: header/1",
|
|
331
|
+
"server -> client | RECONCILE_ACK",
|
|
331
332
|
]
|
|
332
333
|
`);
|
|
333
334
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.storageReconciliation.test.js","sourceRoot":"","sources":["../../src/tests/sync.storageReconciliation.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.storageReconciliation.test.js","sourceRoot":"","sources":["../../src/tests/sync.storageReconciliation.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"type": "module",
|
|
31
31
|
"license": "MIT",
|
|
32
|
-
"version": "0.20.
|
|
32
|
+
"version": "0.20.12",
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@opentelemetry/sdk-metrics": "^2.0.0",
|
|
35
35
|
"libsql": "^0.5.13",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"@opentelemetry/api": "^1.9.0",
|
|
43
43
|
"@scure/base": "1.2.1",
|
|
44
44
|
"unicode-segmenter": "^0.12.0",
|
|
45
|
-
"cojson-core-wasm": "0.20.
|
|
46
|
-
"cojson-core-
|
|
47
|
-
"cojson-core-
|
|
45
|
+
"cojson-core-wasm": "0.20.12",
|
|
46
|
+
"cojson-core-napi": "0.20.12",
|
|
47
|
+
"cojson-core-rn": "0.20.12"
|
|
48
48
|
},
|
|
49
49
|
"gitHead": "33c27053293b4801b968c61d5c4c989f93a67d13",
|
|
50
50
|
"scripts": {
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { RawCoID } from "./ids.js";
|
|
2
|
+
import { PeerID, ReconcileBatchID } from "./sync.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Tracks ongoing storage reconciliation batches in a server.
|
|
6
|
+
*/
|
|
7
|
+
export class OngoingStorageReconciliationTracker {
|
|
8
|
+
private reconcileBatches: Map<PeerID, Map<ReconcileBatchID, Set<RawCoID>>> =
|
|
9
|
+
new Map();
|
|
10
|
+
private reconcileBatchesByCoValue: Map<
|
|
11
|
+
PeerID,
|
|
12
|
+
Map<RawCoID, Set<ReconcileBatchID>>
|
|
13
|
+
> = new Map();
|
|
14
|
+
|
|
15
|
+
trackBatch(
|
|
16
|
+
peerId: PeerID,
|
|
17
|
+
batchId: ReconcileBatchID,
|
|
18
|
+
pendingCoValues: Set<RawCoID>,
|
|
19
|
+
): void {
|
|
20
|
+
if (pendingCoValues.size === 0) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let batchesForPeer = this.reconcileBatches.get(peerId);
|
|
25
|
+
if (!batchesForPeer) {
|
|
26
|
+
batchesForPeer = new Map();
|
|
27
|
+
this.reconcileBatches.set(peerId, batchesForPeer);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
batchesForPeer.set(batchId, pendingCoValues);
|
|
31
|
+
|
|
32
|
+
let coValuesToBatches = this.reconcileBatchesByCoValue.get(peerId);
|
|
33
|
+
if (!coValuesToBatches) {
|
|
34
|
+
coValuesToBatches = new Map();
|
|
35
|
+
this.reconcileBatchesByCoValue.set(peerId, coValuesToBatches);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
for (const coValueId of pendingCoValues) {
|
|
39
|
+
let batchIds = coValuesToBatches.get(coValueId);
|
|
40
|
+
if (!batchIds) {
|
|
41
|
+
batchIds = new Set();
|
|
42
|
+
coValuesToBatches.set(coValueId, batchIds);
|
|
43
|
+
}
|
|
44
|
+
batchIds.add(batchId);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Marks a coValue as reconciled and returns the batch IDs that completed syncing.
|
|
50
|
+
*/
|
|
51
|
+
markItemComplete(peerId: PeerID, coValueId: RawCoID): ReconcileBatchID[] {
|
|
52
|
+
const coValuesToBatches = this.reconcileBatchesByCoValue.get(peerId);
|
|
53
|
+
const batchesForPeer = this.reconcileBatches.get(peerId);
|
|
54
|
+
|
|
55
|
+
if (!coValuesToBatches || !batchesForPeer) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const batchIdsForCoValue = coValuesToBatches.get(coValueId);
|
|
60
|
+
if (!batchIdsForCoValue || batchIdsForCoValue.size === 0) {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const completedBatchIds: ReconcileBatchID[] = [];
|
|
65
|
+
|
|
66
|
+
for (const batchId of batchIdsForCoValue) {
|
|
67
|
+
const batch = batchesForPeer.get(batchId);
|
|
68
|
+
if (!batch) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
batch.delete(coValueId);
|
|
72
|
+
if (batch.size === 0) {
|
|
73
|
+
completedBatchIds.push(batchId);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// This coValue was just completed, so it is no longer pending in any batch.
|
|
78
|
+
coValuesToBatches.delete(coValueId);
|
|
79
|
+
for (const batchId of completedBatchIds) {
|
|
80
|
+
batchesForPeer.delete(batchId);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (coValuesToBatches.size === 0) {
|
|
84
|
+
this.reconcileBatchesByCoValue.delete(peerId);
|
|
85
|
+
}
|
|
86
|
+
if (batchesForPeer.size === 0) {
|
|
87
|
+
this.reconcileBatches.delete(peerId);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return completedBatchIds;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
clearPeer(peerId: PeerID): void {
|
|
94
|
+
this.reconcileBatches.delete(peerId);
|
|
95
|
+
this.reconcileBatchesByCoValue.delete(peerId);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { PeerState } from "./PeerState.js";
|
|
2
2
|
|
|
3
|
-
export class
|
|
3
|
+
export class StorageReconciliationServerAckTracker {
|
|
4
4
|
/**
|
|
5
|
-
* Tracks pending reconcile acks: "batchId#peerId->offset".
|
|
5
|
+
* Tracks pending reconcile acks from the server: "batchId#peerId->offset".
|
|
6
6
|
* Cleared in handleAck.
|
|
7
7
|
*/
|
|
8
8
|
pendingReconciliationAck: Map<string, number> = new Map();
|
package/src/sync.ts
CHANGED
|
@@ -25,7 +25,8 @@ import { CoValuePriority } from "./priority.js";
|
|
|
25
25
|
import { IncomingMessagesQueue } from "./queue/IncomingMessagesQueue.js";
|
|
26
26
|
import { LocalTransactionsSyncQueue } from "./queue/LocalTransactionsSyncQueue.js";
|
|
27
27
|
import type { StorageStreamingQueue } from "./queue/StorageStreamingQueue.js";
|
|
28
|
-
import {
|
|
28
|
+
import { OngoingStorageReconciliationTracker } from "./OngoingStorageReconciliationTracker.js";
|
|
29
|
+
import { StorageReconciliationServerAckTracker } from "./StorageReconciliationAckTracker.js";
|
|
29
30
|
import {
|
|
30
31
|
CoValueKnownState,
|
|
31
32
|
knownStateFrom,
|
|
@@ -75,15 +76,17 @@ export type DoneMessage = {
|
|
|
75
76
|
id: RawCoID;
|
|
76
77
|
};
|
|
77
78
|
|
|
79
|
+
export type ReconcileBatchID = string;
|
|
80
|
+
|
|
78
81
|
export type ReconcileMessage = {
|
|
79
82
|
action: "reconcile";
|
|
80
|
-
id:
|
|
83
|
+
id: ReconcileBatchID;
|
|
81
84
|
values: [coValue: RawCoID, sessionsHash: string][];
|
|
82
85
|
};
|
|
83
86
|
|
|
84
87
|
export type ReconcileAckMessage = {
|
|
85
88
|
action: "reconcile-ack";
|
|
86
|
-
id:
|
|
89
|
+
id: ReconcileBatchID;
|
|
87
90
|
};
|
|
88
91
|
|
|
89
92
|
/**
|
|
@@ -138,7 +141,16 @@ export type ServerPeerSelector = (
|
|
|
138
141
|
export class SyncManager {
|
|
139
142
|
peers: { [key: PeerID]: PeerState } = {};
|
|
140
143
|
local: LocalNode;
|
|
141
|
-
|
|
144
|
+
/**
|
|
145
|
+
* Tracks pending reconcile acks from the server.
|
|
146
|
+
*/
|
|
147
|
+
private reconciliationAckTracker =
|
|
148
|
+
new StorageReconciliationServerAckTracker();
|
|
149
|
+
/**
|
|
150
|
+
* Tracks ongoing storage reconciliation batches in a server.
|
|
151
|
+
*/
|
|
152
|
+
private ongoingStorageReconciliationTracker =
|
|
153
|
+
new OngoingStorageReconciliationTracker();
|
|
142
154
|
|
|
143
155
|
get pendingReconciliationAck(): Map<string, number> {
|
|
144
156
|
return this.reconciliationAckTracker.pendingReconciliationAck;
|
|
@@ -766,6 +778,7 @@ export class SyncManager {
|
|
|
766
778
|
|
|
767
779
|
peerState.addCloseListener(() => {
|
|
768
780
|
unsubscribeFromKnownStatesUpdates();
|
|
781
|
+
this.ongoingStorageReconciliationTracker.clearPeer(peer.id);
|
|
769
782
|
this.peersCounter.add(-1, { role: peer.role });
|
|
770
783
|
|
|
771
784
|
if (!peer.persistent && this.peers[peer.id] === peerState) {
|
|
@@ -961,14 +974,34 @@ export class SyncManager {
|
|
|
961
974
|
}
|
|
962
975
|
|
|
963
976
|
peer.trackLoadRequestComplete(coValue, "known");
|
|
977
|
+
this.maybeMarkCoValueAsReconciled(peer, msg.id);
|
|
964
978
|
}
|
|
965
979
|
|
|
966
980
|
handleReconcile(msg: ReconcileMessage, peer: PeerState): void {
|
|
967
|
-
let
|
|
968
|
-
|
|
969
|
-
|
|
981
|
+
let remaining = msg.values.length;
|
|
982
|
+
if (remaining === 0) {
|
|
983
|
+
this.trySendToPeer(peer, { action: "reconcile-ack", id: msg.id });
|
|
984
|
+
return;
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
const pending = new Set<RawCoID>();
|
|
988
|
+
const processEntryDone = () => {
|
|
989
|
+
remaining -= 1;
|
|
990
|
+
|
|
991
|
+
if (remaining !== 0) {
|
|
992
|
+
return;
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
if (pending.size === 0) {
|
|
970
996
|
this.trySendToPeer(peer, { action: "reconcile-ack", id: msg.id });
|
|
997
|
+
return;
|
|
971
998
|
}
|
|
999
|
+
|
|
1000
|
+
this.ongoingStorageReconciliationTracker.trackBatch(
|
|
1001
|
+
peer.id,
|
|
1002
|
+
msg.id,
|
|
1003
|
+
pending,
|
|
1004
|
+
);
|
|
972
1005
|
};
|
|
973
1006
|
|
|
974
1007
|
for (const [coValueId, clientSessionsHash] of msg.values) {
|
|
@@ -977,7 +1010,7 @@ export class SyncManager {
|
|
|
977
1010
|
? this.local.getCoValue(coValueId)
|
|
978
1011
|
: undefined;
|
|
979
1012
|
if (inMemoryCoValue?.isErroredInPeer(peer.id)) {
|
|
980
|
-
|
|
1013
|
+
processEntryDone();
|
|
981
1014
|
continue;
|
|
982
1015
|
}
|
|
983
1016
|
|
|
@@ -985,6 +1018,7 @@ export class SyncManager {
|
|
|
985
1018
|
knownState: CoValueKnownState | undefined,
|
|
986
1019
|
) => {
|
|
987
1020
|
if (!knownState) {
|
|
1021
|
+
pending.add(coValueId);
|
|
988
1022
|
peer.trackToldKnownState(coValueId);
|
|
989
1023
|
this.trySendToPeer(peer, {
|
|
990
1024
|
action: "load",
|
|
@@ -997,11 +1031,12 @@ export class SyncManager {
|
|
|
997
1031
|
knownState.sessions,
|
|
998
1032
|
);
|
|
999
1033
|
if (serverSessionsHash !== clientSessionsHash) {
|
|
1034
|
+
pending.add(coValueId);
|
|
1000
1035
|
peer.trackToldKnownState(coValueId);
|
|
1001
1036
|
this.trySendToPeer(peer, { action: "load", ...knownState });
|
|
1002
1037
|
}
|
|
1003
1038
|
}
|
|
1004
|
-
|
|
1039
|
+
processEntryDone();
|
|
1005
1040
|
};
|
|
1006
1041
|
|
|
1007
1042
|
if (
|
|
@@ -1015,10 +1050,6 @@ export class SyncManager {
|
|
|
1015
1050
|
: maybeSendLoadRequest(undefined);
|
|
1016
1051
|
}
|
|
1017
1052
|
}
|
|
1018
|
-
|
|
1019
|
-
if (msg.values.length === 0) {
|
|
1020
|
-
this.trySendToPeer(peer, { action: "reconcile-ack", id: msg.id });
|
|
1021
|
-
}
|
|
1022
1053
|
}
|
|
1023
1054
|
|
|
1024
1055
|
handleReconcileAck(msg: ReconcileAckMessage, peer: PeerState): void {
|
|
@@ -1338,6 +1369,9 @@ export class SyncManager {
|
|
|
1338
1369
|
}
|
|
1339
1370
|
|
|
1340
1371
|
peer?.trackLoadRequestComplete(coValue, "content");
|
|
1372
|
+
if (peer && !coValue.isStreaming()) {
|
|
1373
|
+
this.maybeMarkCoValueAsReconciled(peer, msg.id);
|
|
1374
|
+
}
|
|
1341
1375
|
|
|
1342
1376
|
for (const peer of this.getPeers(coValue.id)) {
|
|
1343
1377
|
/**
|
|
@@ -1364,6 +1398,20 @@ export class SyncManager {
|
|
|
1364
1398
|
return this.sendNewContent(msg.id, peer);
|
|
1365
1399
|
}
|
|
1366
1400
|
|
|
1401
|
+
private maybeMarkCoValueAsReconciled(peer: PeerState, coValueId: RawCoID) {
|
|
1402
|
+
const completedBatchIds =
|
|
1403
|
+
this.ongoingStorageReconciliationTracker.markItemComplete(
|
|
1404
|
+
peer.id,
|
|
1405
|
+
coValueId,
|
|
1406
|
+
);
|
|
1407
|
+
for (const batchId of completedBatchIds) {
|
|
1408
|
+
this.trySendToPeer(peer, {
|
|
1409
|
+
action: "reconcile-ack",
|
|
1410
|
+
id: batchId,
|
|
1411
|
+
});
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1367
1415
|
private syncQueue = new LocalTransactionsSyncQueue((content) =>
|
|
1368
1416
|
this.syncContent(content),
|
|
1369
1417
|
);
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import { OngoingStorageReconciliationTracker } from "../OngoingStorageReconciliationTracker.js";
|
|
3
|
+
import { RawCoID } from "../ids.js";
|
|
4
|
+
|
|
5
|
+
function coID(value: string): RawCoID {
|
|
6
|
+
return value as RawCoID;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
describe("OngoingStorageReconciliationTracker", () => {
|
|
10
|
+
test("does not track empty batches", () => {
|
|
11
|
+
const tracker = new OngoingStorageReconciliationTracker();
|
|
12
|
+
|
|
13
|
+
tracker.trackBatch("peer-1", "batch-1", new Set());
|
|
14
|
+
|
|
15
|
+
// @ts-expect-error - reconcileBatches is private
|
|
16
|
+
expect(tracker.reconcileBatches.size).toEqual(0);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test("completes a batch only when all its covalues are completed", () => {
|
|
20
|
+
const tracker = new OngoingStorageReconciliationTracker();
|
|
21
|
+
|
|
22
|
+
tracker.trackBatch(
|
|
23
|
+
"peer-1",
|
|
24
|
+
"batch-1",
|
|
25
|
+
new Set([coID("co_A"), coID("co_B")]),
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
expect(tracker.markItemComplete("peer-1", coID("co_A"))).toEqual([]);
|
|
29
|
+
expect(tracker.markItemComplete("peer-1", coID("co_B"))).toEqual([
|
|
30
|
+
"batch-1",
|
|
31
|
+
]);
|
|
32
|
+
// @ts-expect-error - reconcileBatches is private
|
|
33
|
+
expect(tracker.reconcileBatches.size).toEqual(0);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("returns all completed batch ids for a covalue that is in multiple batches", () => {
|
|
37
|
+
const tracker = new OngoingStorageReconciliationTracker();
|
|
38
|
+
|
|
39
|
+
tracker.trackBatch("peer-1", "batch-1", new Set([coID("co_A")]));
|
|
40
|
+
tracker.trackBatch(
|
|
41
|
+
"peer-1",
|
|
42
|
+
"batch-2",
|
|
43
|
+
new Set([coID("co_A"), coID("co_B")]),
|
|
44
|
+
);
|
|
45
|
+
tracker.trackBatch("peer-1", "batch-3", new Set([coID("co_B")]));
|
|
46
|
+
|
|
47
|
+
expect(tracker.markItemComplete("peer-1", coID("co_A"))).toEqual([
|
|
48
|
+
"batch-1",
|
|
49
|
+
]);
|
|
50
|
+
expect(tracker.markItemComplete("peer-1", coID("co_B"))).toEqual([
|
|
51
|
+
"batch-2",
|
|
52
|
+
"batch-3",
|
|
53
|
+
]);
|
|
54
|
+
// @ts-expect-error - reconcileBatches is private
|
|
55
|
+
expect(tracker.reconcileBatches.size).toEqual(0);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test("isolates state by peer", () => {
|
|
59
|
+
const tracker = new OngoingStorageReconciliationTracker();
|
|
60
|
+
|
|
61
|
+
tracker.trackBatch("peer-1", "batch-A", new Set([coID("co_A")]));
|
|
62
|
+
tracker.trackBatch("peer-2", "batch-B", new Set([coID("co_A")]));
|
|
63
|
+
|
|
64
|
+
expect(tracker.markItemComplete("peer-1", coID("co_A"))).toEqual([
|
|
65
|
+
"batch-A",
|
|
66
|
+
]);
|
|
67
|
+
expect(tracker.markItemComplete("peer-2", coID("co_A"))).toEqual([
|
|
68
|
+
"batch-B",
|
|
69
|
+
]);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test("clearPeer removes only that peer state", () => {
|
|
73
|
+
const tracker = new OngoingStorageReconciliationTracker();
|
|
74
|
+
|
|
75
|
+
tracker.trackBatch("peer-1", "batch-A", new Set([coID("co_A")]));
|
|
76
|
+
tracker.trackBatch("peer-2", "batch-B", new Set([coID("co_B")]));
|
|
77
|
+
|
|
78
|
+
tracker.clearPeer("peer-1");
|
|
79
|
+
|
|
80
|
+
expect(tracker.markItemComplete("peer-1", coID("co_A"))).toEqual([]);
|
|
81
|
+
expect(tracker.markItemComplete("peer-2", coID("co_B"))).toEqual([
|
|
82
|
+
"batch-B",
|
|
83
|
+
]);
|
|
84
|
+
});
|
|
85
|
+
});
|