@fluidframework/map 2.0.0-internal.7.2.2 → 2.0.0-internal.7.4.0
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 +8 -0
- package/api-extractor-lint.json +13 -0
- package/api-extractor.json +9 -1
- package/api-report/map.api.md +42 -44
- package/dist/{directory.js → directory.cjs} +228 -41
- package/dist/directory.cjs.map +1 -0
- package/dist/directory.d.ts +499 -38
- package/dist/directory.d.ts.map +1 -1
- package/dist/{index.js → index.cjs} +4 -4
- package/dist/index.cjs.map +1 -0
- package/dist/{interfaces.js → interfaces.cjs} +1 -1
- package/dist/interfaces.cjs.map +1 -0
- package/dist/interfaces.d.ts +10 -20
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/{internalInterfaces.js → internalInterfaces.cjs} +1 -1
- package/dist/internalInterfaces.cjs.map +1 -0
- package/dist/{localValues.js → localValues.cjs} +2 -3
- package/dist/localValues.cjs.map +1 -0
- package/dist/localValues.d.ts +2 -4
- package/dist/localValues.d.ts.map +1 -1
- package/dist/map-alpha.d.ts +979 -0
- package/dist/map-beta.d.ts +119 -0
- package/dist/map-public.d.ts +119 -0
- package/dist/map-untrimmed.d.ts +993 -0
- package/dist/{map.js → map.cjs} +5 -13
- package/dist/map.cjs.map +1 -0
- package/dist/map.d.ts +2 -10
- package/dist/map.d.ts.map +1 -1
- package/dist/{mapKernel.js → mapKernel.cjs} +2 -2
- package/dist/mapKernel.cjs.map +1 -0
- package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
- package/dist/packageVersion.cjs.map +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/directory.d.ts +499 -38
- package/lib/directory.d.ts.map +1 -1
- package/lib/{directory.js → directory.mjs} +228 -41
- package/lib/directory.mjs.map +1 -0
- package/lib/index.d.ts +4 -15
- package/lib/index.d.ts.map +1 -1
- package/lib/index.mjs +8 -0
- package/lib/index.mjs.map +1 -0
- package/lib/interfaces.d.ts +10 -20
- package/lib/interfaces.d.ts.map +1 -1
- package/lib/{interfaces.js → interfaces.mjs} +1 -1
- package/lib/interfaces.mjs.map +1 -0
- package/lib/internalInterfaces.d.ts +2 -2
- package/lib/internalInterfaces.d.ts.map +1 -1
- package/lib/{internalInterfaces.js → internalInterfaces.mjs} +1 -1
- package/{dist/internalInterfaces.js.map → lib/internalInterfaces.mjs.map} +1 -1
- package/lib/localValues.d.ts +3 -5
- package/lib/localValues.d.ts.map +1 -1
- package/lib/{localValues.js → localValues.mjs} +2 -3
- package/lib/localValues.mjs.map +1 -0
- package/lib/map-alpha.d.ts +979 -0
- package/lib/map-beta.d.ts +119 -0
- package/lib/map-public.d.ts +119 -0
- package/lib/map-untrimmed.d.ts +993 -0
- package/lib/map.d.ts +3 -11
- package/lib/map.d.ts.map +1 -1
- package/lib/{map.js → map.mjs} +5 -13
- package/lib/map.mjs.map +1 -0
- package/lib/mapKernel.d.ts +2 -2
- package/lib/mapKernel.d.ts.map +1 -1
- package/lib/{mapKernel.js → mapKernel.mjs} +2 -2
- package/lib/mapKernel.mjs.map +1 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
- package/lib/packageVersion.mjs.map +1 -0
- package/map.test-files.tar +0 -0
- package/package.json +54 -33
- package/src/directory.ts +280 -62
- package/src/interfaces.ts +10 -20
- package/src/localValues.ts +2 -4
- package/src/map.ts +2 -10
- package/src/packageVersion.ts +1 -1
- package/tsc-multi.test.json +4 -0
- package/tsconfig.json +6 -5
- package/dist/directory.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/interfaces.js.map +0 -1
- package/dist/localValues.js.map +0 -1
- package/dist/map.js.map +0 -1
- package/dist/mapKernel.js.map +0 -1
- package/dist/packageVersion.js.map +0 -1
- package/lib/directory.js.map +0 -1
- package/lib/index.js +0 -19
- package/lib/index.js.map +0 -1
- package/lib/interfaces.js.map +0 -1
- package/lib/internalInterfaces.js.map +0 -1
- package/lib/localValues.js.map +0 -1
- package/lib/map.js.map +0 -1
- package/lib/mapKernel.js.map +0 -1
- package/lib/packageVersion.js.map +0 -1
- package/tsconfig.esnext.json +0 -7
package/lib/directory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,9 @@ import { MessageType } from "@fluidframework/protocol-definitions";
|
|
|
11
11
|
import { SharedObject, ValueType } from "@fluidframework/shared-object-base";
|
|
12
12
|
import { SummaryTreeBuilder } from "@fluidframework/runtime-utils";
|
|
13
13
|
import * as path from "path-browserify";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
14
|
+
import { RedBlackTree } from "@fluidframework/merge-tree";
|
|
15
|
+
import { LocalValueMaker, makeSerializable } from "./localValues.mjs";
|
|
16
|
+
import { pkgVersion } from "./packageVersion.mjs";
|
|
16
17
|
// We use path-browserify since this code can run safely on the server or the browser.
|
|
17
18
|
// We standardize on using posix slashes everywhere.
|
|
18
19
|
const posix = path.posix;
|
|
@@ -21,7 +22,7 @@ const snapshotFileName = "header";
|
|
|
21
22
|
* {@link @fluidframework/datastore-definitions#IChannelFactory} for {@link SharedDirectory}.
|
|
22
23
|
*
|
|
23
24
|
* @sealed
|
|
24
|
-
* @
|
|
25
|
+
* @alpha
|
|
25
26
|
*/
|
|
26
27
|
export class DirectoryFactory {
|
|
27
28
|
/**
|
|
@@ -65,6 +66,100 @@ DirectoryFactory.Attributes = {
|
|
|
65
66
|
snapshotFormatVersion: "0.1",
|
|
66
67
|
packageVersion: pkgVersion,
|
|
67
68
|
};
|
|
69
|
+
/**
|
|
70
|
+
* The comparator essentially performs the following procedure to determine the order of subdirectory creation:
|
|
71
|
+
* 1. If subdirectory A has a non-negative 'seq' and subdirectory B has a negative 'seq', subdirectory A is always placed first due to
|
|
72
|
+
* the policy that acknowledged subdirectories precede locally created ones that have not been committed yet.
|
|
73
|
+
*
|
|
74
|
+
* 2. When both subdirectories A and B have a non-negative 'seq', they are compared as follows:
|
|
75
|
+
* - If A and B have different 'seq', they are ordered based on 'seq', and the one with the lower 'seq' will be positioned ahead. Notably this rule
|
|
76
|
+
* should not be applied in the directory ordering, since the lowest 'seq' is -1, when the directory is created locally but not acknowledged yet.
|
|
77
|
+
* - In the case where A and B have equal 'seq', the one with the lower 'clientSeq' will be positioned ahead. This scenario occurs when grouped
|
|
78
|
+
* batching is enabled, and a lower 'clientSeq' indicates that it was processed earlier after the batch was ungrouped.
|
|
79
|
+
*
|
|
80
|
+
* 3. When both subdirectories A and B have a negative 'seq', they are compared as follows:
|
|
81
|
+
* - If A and B have different 'seq', the one with lower 'seq' will be positioned ahead, which indicates the corresponding creation message was
|
|
82
|
+
* acknowledged by the server earlier.
|
|
83
|
+
* - If A and B have equal 'seq', the one with lower 'clientSeq' will be placed at the front. This scenario suggests that both subdirectories A
|
|
84
|
+
* and B were created locally and not acknowledged yet, with the one possessing the lower 'clientSeq' being created earlier.
|
|
85
|
+
*
|
|
86
|
+
* 4. A 'seq' value of zero indicates that the subdirectory was created in detached state, and it is considered acknowledged for the
|
|
87
|
+
* purpose of ordering.
|
|
88
|
+
*/
|
|
89
|
+
const seqDataComparator = (a, b) => {
|
|
90
|
+
if (isAcknowledgedOrDetached(a)) {
|
|
91
|
+
if (isAcknowledgedOrDetached(b)) {
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
93
|
+
return a.seq !== b.seq ? a.seq - b.seq : a.clientSeq - b.clientSeq;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
return -1;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
if (!isAcknowledgedOrDetached(b)) {
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
102
|
+
return a.seq !== b.seq ? a.seq - b.seq : a.clientSeq - b.clientSeq;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
return 1;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
function isAcknowledgedOrDetached(seqData) {
|
|
110
|
+
return seqData.seq >= 0;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A utility class for tracking associations between keys and their creation indices.
|
|
114
|
+
* This is relevant to support map iteration in insertion order, see
|
|
115
|
+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator/%40%40iterator
|
|
116
|
+
*
|
|
117
|
+
* TODO: It can be combined with the creation tracker utilized in SharedMap
|
|
118
|
+
*/
|
|
119
|
+
class DirectoryCreationTracker {
|
|
120
|
+
constructor() {
|
|
121
|
+
this.indexToKey = new RedBlackTree(seqDataComparator);
|
|
122
|
+
this.keyToIndex = new Map();
|
|
123
|
+
}
|
|
124
|
+
set(key, seqData) {
|
|
125
|
+
this.indexToKey.put(seqData, key);
|
|
126
|
+
this.keyToIndex.set(key, seqData);
|
|
127
|
+
}
|
|
128
|
+
has(keyOrSeqData) {
|
|
129
|
+
return typeof keyOrSeqData === "string"
|
|
130
|
+
? this.keyToIndex.has(keyOrSeqData)
|
|
131
|
+
: this.indexToKey.get(keyOrSeqData) !== undefined;
|
|
132
|
+
}
|
|
133
|
+
delete(keyOrSeqData) {
|
|
134
|
+
if (this.has(keyOrSeqData)) {
|
|
135
|
+
if (typeof keyOrSeqData === "string") {
|
|
136
|
+
const seqData = this.keyToIndex.get(keyOrSeqData);
|
|
137
|
+
this.keyToIndex.delete(keyOrSeqData);
|
|
138
|
+
this.indexToKey.remove(seqData);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
const key = this.indexToKey.get(keyOrSeqData)?.data;
|
|
142
|
+
this.indexToKey.remove(keyOrSeqData);
|
|
143
|
+
this.keyToIndex.delete(key);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Retrieves all subdirectories with creation order that satisfy an optional constraint function.
|
|
149
|
+
* @param constraint - An optional constraint function that filters keys.
|
|
150
|
+
* @returns An array of keys that satisfy the constraint (or all keys if no constraint is provided).
|
|
151
|
+
*/
|
|
152
|
+
keys(constraint) {
|
|
153
|
+
const keys = [];
|
|
154
|
+
this.indexToKey.mapRange((node) => {
|
|
155
|
+
if (!constraint || constraint(node.data)) {
|
|
156
|
+
keys.push(node.data);
|
|
157
|
+
}
|
|
158
|
+
return true;
|
|
159
|
+
}, keys);
|
|
160
|
+
return keys;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
68
163
|
/**
|
|
69
164
|
* {@inheritDoc ISharedDirectory}
|
|
70
165
|
*
|
|
@@ -77,7 +172,7 @@ DirectoryFactory.Attributes = {
|
|
|
77
172
|
* ```
|
|
78
173
|
*
|
|
79
174
|
* @sealed
|
|
80
|
-
* @
|
|
175
|
+
* @alpha
|
|
81
176
|
*/
|
|
82
177
|
export class SharedDirectory extends SharedObject {
|
|
83
178
|
/**
|
|
@@ -120,7 +215,7 @@ export class SharedDirectory extends SharedObject {
|
|
|
120
215
|
/**
|
|
121
216
|
* Root of the SharedDirectory, most operations on the SharedDirectory itself act on the root.
|
|
122
217
|
*/
|
|
123
|
-
this.root = new SubDirectory(0, new Set(), this, this.runtime, this.serializer, posix.sep);
|
|
218
|
+
this.root = new SubDirectory({ seq: 0, clientSeq: 0 }, new Set(), this, this.runtime, this.serializer, posix.sep);
|
|
124
219
|
/**
|
|
125
220
|
* Mapping of op types to message handlers.
|
|
126
221
|
*/
|
|
@@ -287,7 +382,6 @@ export class SharedDirectory extends SharedObject {
|
|
|
287
382
|
}
|
|
288
383
|
/**
|
|
289
384
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.summarizeCore}
|
|
290
|
-
* @internal
|
|
291
385
|
*/
|
|
292
386
|
summarizeCore(serializer, telemetryContext) {
|
|
293
387
|
return this.serializeDirectory(this.root, serializer);
|
|
@@ -297,19 +391,16 @@ export class SharedDirectory extends SharedObject {
|
|
|
297
391
|
* @param op - Op to submit
|
|
298
392
|
* @param localOpMetadata - The local metadata associated with the op. We send a unique id that is used to track
|
|
299
393
|
* this op while it has not been ack'd. This will be sent when we receive this op back from the server.
|
|
300
|
-
* @internal
|
|
301
394
|
*/
|
|
302
395
|
submitDirectoryMessage(op, localOpMetadata) {
|
|
303
396
|
this.submitLocalMessage(op, localOpMetadata);
|
|
304
397
|
}
|
|
305
398
|
/**
|
|
306
399
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.onDisconnect}
|
|
307
|
-
* @internal
|
|
308
400
|
*/
|
|
309
401
|
onDisconnect() { }
|
|
310
402
|
/**
|
|
311
403
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.reSubmitCore}
|
|
312
|
-
* @internal
|
|
313
404
|
*/
|
|
314
405
|
reSubmitCore(content, localOpMetadata) {
|
|
315
406
|
const message = content;
|
|
@@ -319,7 +410,6 @@ export class SharedDirectory extends SharedObject {
|
|
|
319
410
|
}
|
|
320
411
|
/**
|
|
321
412
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}
|
|
322
|
-
* @internal
|
|
323
413
|
*/
|
|
324
414
|
async loadCore(storage) {
|
|
325
415
|
const data = await readAndParse(storage, snapshotFileName);
|
|
@@ -340,7 +430,6 @@ export class SharedDirectory extends SharedObject {
|
|
|
340
430
|
/**
|
|
341
431
|
* Populate the directory with the given directory data.
|
|
342
432
|
* @param data - A JSON string containing serialized directory data
|
|
343
|
-
* @internal
|
|
344
433
|
*/
|
|
345
434
|
populate(data) {
|
|
346
435
|
const stack = [];
|
|
@@ -349,18 +438,42 @@ export class SharedDirectory extends SharedObject {
|
|
|
349
438
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
350
439
|
const [currentSubDir, currentSubDirObject] = stack.pop();
|
|
351
440
|
if (currentSubDirObject.subdirectories) {
|
|
441
|
+
// Utilize a map to store the seq -> clientSeq for the newly created subdirectory
|
|
442
|
+
const tempSeqNums = new Map();
|
|
352
443
|
for (const [subdirName, subdirObject] of Object.entries(currentSubDirObject.subdirectories)) {
|
|
353
444
|
let newSubDir = currentSubDir.getSubDirectory(subdirName);
|
|
445
|
+
let seqData;
|
|
354
446
|
if (!newSubDir) {
|
|
355
447
|
const createInfo = subdirObject.ci;
|
|
356
|
-
|
|
357
|
-
//
|
|
358
|
-
//
|
|
359
|
-
//
|
|
360
|
-
createInfo !== undefined && createInfo.csn > -1
|
|
448
|
+
// We do not store the client sequence number in the storage because the order has already been
|
|
449
|
+
// guaranteed during the serialization process. As a result, it is only essential to utilize the
|
|
450
|
+
// "fake" client sequence number to signify the loading order, and there is no need to retain
|
|
451
|
+
// the actual client sequence number at this point.
|
|
452
|
+
if (createInfo !== undefined && createInfo.csn > -1) {
|
|
453
|
+
// If csn is -1, then initialize it with 0, otherwise we will never process ops for this
|
|
454
|
+
// sub directory. This could be done at serialization time too, but we need to maintain
|
|
455
|
+
// back compat too and also we will actually know the state when it was serialized.
|
|
456
|
+
if (!tempSeqNums.has(createInfo.csn)) {
|
|
457
|
+
tempSeqNums.set(createInfo.csn, 0);
|
|
458
|
+
}
|
|
459
|
+
let fakeClientSeq = tempSeqNums.get(createInfo.csn);
|
|
460
|
+
seqData = { seq: createInfo.csn, clientSeq: fakeClientSeq };
|
|
461
|
+
tempSeqNums.set(createInfo.csn, ++fakeClientSeq);
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
seqData = {
|
|
465
|
+
seq: 0,
|
|
466
|
+
clientSeq: ++currentSubDir.localCreationSeq,
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
newSubDir = new SubDirectory(seqData, createInfo !== undefined
|
|
361
470
|
? new Set(createInfo.ccIds)
|
|
362
471
|
: new Set(), this, this.runtime, this.serializer, posix.join(currentSubDir.absolutePath, subdirName));
|
|
363
472
|
currentSubDir.populateSubDirectory(subdirName, newSubDir);
|
|
473
|
+
// Record the newly inserted subdirectory to the creation tracker
|
|
474
|
+
currentSubDir.ackedCreationSeqTracker.set(subdirName, {
|
|
475
|
+
...seqData,
|
|
476
|
+
});
|
|
364
477
|
}
|
|
365
478
|
stack.push([newSubDir, subdirObject]);
|
|
366
479
|
}
|
|
@@ -375,7 +488,6 @@ export class SharedDirectory extends SharedObject {
|
|
|
375
488
|
}
|
|
376
489
|
/**
|
|
377
490
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.processCore}
|
|
378
|
-
* @internal
|
|
379
491
|
*/
|
|
380
492
|
processCore(message, local, localOpMetadata) {
|
|
381
493
|
if (message.type === MessageType.Operation) {
|
|
@@ -387,7 +499,6 @@ export class SharedDirectory extends SharedObject {
|
|
|
387
499
|
}
|
|
388
500
|
/**
|
|
389
501
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.rollback}
|
|
390
|
-
* @internal
|
|
391
502
|
*/
|
|
392
503
|
rollback(content, localOpMetadata) {
|
|
393
504
|
const op = content;
|
|
@@ -567,7 +678,6 @@ export class SharedDirectory extends SharedObject {
|
|
|
567
678
|
}
|
|
568
679
|
/**
|
|
569
680
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}
|
|
570
|
-
* @internal
|
|
571
681
|
*/
|
|
572
682
|
applyStashedOp(op) {
|
|
573
683
|
const handler = this.messageHandlers.get(op.type);
|
|
@@ -673,9 +783,9 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
673
783
|
* @param serializer - The serializer to serialize / parse handles
|
|
674
784
|
* @param absolutePath - The absolute path of this IDirectory
|
|
675
785
|
*/
|
|
676
|
-
constructor(
|
|
786
|
+
constructor(seqData, clientIds, directory, runtime, serializer, absolutePath) {
|
|
677
787
|
super();
|
|
678
|
-
this.
|
|
788
|
+
this.seqData = seqData;
|
|
679
789
|
this.clientIds = clientIds;
|
|
680
790
|
this.directory = directory;
|
|
681
791
|
this.runtime = runtime;
|
|
@@ -724,6 +834,13 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
724
834
|
* The pending ids of any clears that have been performed locally but not yet ack'd from the server
|
|
725
835
|
*/
|
|
726
836
|
this.pendingClearMessageIds = [];
|
|
837
|
+
/**
|
|
838
|
+
* Assigns a unique ID to each subdirectory created locally but pending for acknowledgement, facilitating the tracking
|
|
839
|
+
* of the creation order.
|
|
840
|
+
*/
|
|
841
|
+
this.localCreationSeq = 0;
|
|
842
|
+
this.localCreationSeqTracker = new DirectoryCreationTracker();
|
|
843
|
+
this.ackedCreationSeqTracker = new DirectoryCreationTracker();
|
|
727
844
|
}
|
|
728
845
|
dispose(error) {
|
|
729
846
|
this._deleted = true;
|
|
@@ -825,14 +942,18 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
825
942
|
return subDir;
|
|
826
943
|
}
|
|
827
944
|
/**
|
|
828
|
-
* @returns
|
|
945
|
+
* @returns The Sequence Data which should be used for local changes.
|
|
829
946
|
* @remarks While detached, 0 is used rather than -1 to represent a change which should be universally known (as opposed to known
|
|
830
947
|
* only by the local client). This ensures that if the directory is later attached, none of its data needs to be updated (the values
|
|
831
948
|
* last set while detached will now be known to any new client, until they are changed).
|
|
949
|
+
*
|
|
950
|
+
* The client sequence number is incremented by 1 for maintaining the internal order of locally created subdirectories
|
|
832
951
|
* TODO: Convert these conventions to named constants. The semantics used here match those for merge-tree.
|
|
833
952
|
*/
|
|
834
953
|
getLocalSeq() {
|
|
835
|
-
return this.directory.isAttached()
|
|
954
|
+
return this.directory.isAttached()
|
|
955
|
+
? { seq: -1, clientSeq: ++this.localCreationSeq }
|
|
956
|
+
: { seq: 0, clientSeq: ++this.localCreationSeq };
|
|
836
957
|
}
|
|
837
958
|
/**
|
|
838
959
|
* {@inheritDoc IDirectory.getSubDirectory}
|
|
@@ -875,7 +996,26 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
875
996
|
*/
|
|
876
997
|
subdirectories() {
|
|
877
998
|
this.throwIfDisposed();
|
|
878
|
-
|
|
999
|
+
const ackedSubdirsInOrder = this.ackedCreationSeqTracker.keys();
|
|
1000
|
+
const localSubdirsInOrder = this.localCreationSeqTracker.keys((key) => !this.ackedCreationSeqTracker.has(key));
|
|
1001
|
+
const subdirNames = [...ackedSubdirsInOrder, ...localSubdirsInOrder];
|
|
1002
|
+
assert(subdirNames.length === this._subdirectories.size, 0x85c /* The count of keys for iteration should be consistent with the size of actual data */);
|
|
1003
|
+
const entriesIterator = {
|
|
1004
|
+
index: 0,
|
|
1005
|
+
dirs: this._subdirectories,
|
|
1006
|
+
next() {
|
|
1007
|
+
if (this.index < subdirNames.length) {
|
|
1008
|
+
const subdirName = subdirNames[this.index++];
|
|
1009
|
+
const subdir = this.dirs.get(subdirName);
|
|
1010
|
+
return { value: [subdirName, subdir], done: false };
|
|
1011
|
+
}
|
|
1012
|
+
return { value: undefined, done: true };
|
|
1013
|
+
},
|
|
1014
|
+
[Symbol.iterator]() {
|
|
1015
|
+
return this;
|
|
1016
|
+
},
|
|
1017
|
+
};
|
|
1018
|
+
return entriesIterator;
|
|
879
1019
|
}
|
|
880
1020
|
/**
|
|
881
1021
|
* {@inheritDoc IDirectory.getWorkingDirectory}
|
|
@@ -1135,7 +1275,7 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1135
1275
|
return;
|
|
1136
1276
|
}
|
|
1137
1277
|
assertNonNullClientId(msg.clientId);
|
|
1138
|
-
this.createSubDirectoryCore(op.subdirName, local, msg.sequenceNumber, msg.clientId);
|
|
1278
|
+
this.createSubDirectoryCore(op.subdirName, local, { seq: msg.sequenceNumber, clientSeq: msg.clientSequenceNumber }, msg.clientId);
|
|
1139
1279
|
}
|
|
1140
1280
|
/**
|
|
1141
1281
|
* Apply createSubDirectory operation locally and generate metadata
|
|
@@ -1357,7 +1497,7 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1357
1497
|
getSerializableCreateInfo() {
|
|
1358
1498
|
this.throwIfDisposed();
|
|
1359
1499
|
const createInfo = {
|
|
1360
|
-
csn: this.
|
|
1500
|
+
csn: this.seqData.seq,
|
|
1361
1501
|
ccIds: Array.from(this.clientIds),
|
|
1362
1502
|
};
|
|
1363
1503
|
return createInfo;
|
|
@@ -1447,6 +1587,17 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1447
1587
|
this.undeleteSubDirectoryTree(localOpMetadata.subDirectory);
|
|
1448
1588
|
// don't need to register events because deleting never unregistered
|
|
1449
1589
|
this._subdirectories.set(op.subdirName, localOpMetadata.subDirectory);
|
|
1590
|
+
// Restore the record in creation tracker
|
|
1591
|
+
if (isAcknowledgedOrDetached(localOpMetadata.subDirectory.seqData)) {
|
|
1592
|
+
this.ackedCreationSeqTracker.set(op.subdirName, {
|
|
1593
|
+
...localOpMetadata.subDirectory.seqData,
|
|
1594
|
+
});
|
|
1595
|
+
}
|
|
1596
|
+
else {
|
|
1597
|
+
this.localCreationSeqTracker.set(op.subdirName, {
|
|
1598
|
+
...localOpMetadata.subDirectory.seqData,
|
|
1599
|
+
});
|
|
1600
|
+
}
|
|
1450
1601
|
this.emit("subDirectoryCreated", op.subdirName, true, this);
|
|
1451
1602
|
}
|
|
1452
1603
|
this.decrementPendingSubDirCount(this.pendingDeleteSubDirectoriesTracker, op.subDirName);
|
|
@@ -1527,7 +1678,7 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1527
1678
|
// and the op was created after the directory was created then apply this op.
|
|
1528
1679
|
return ((msg.clientId !== null && this.clientIds.has(msg.clientId)) ||
|
|
1529
1680
|
this.clientIds.has("detached") ||
|
|
1530
|
-
(this.
|
|
1681
|
+
(this.seqData.seq !== -1 && this.seqData.seq <= msg.referenceSequenceNumber));
|
|
1531
1682
|
}
|
|
1532
1683
|
/**
|
|
1533
1684
|
* If our local operations that have not yet been ack'd will eventually overwrite an incoming operation, we should
|
|
@@ -1564,10 +1715,11 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1564
1715
|
// If this is delete op and we have keys in this subDirectory, then we need to delete these
|
|
1565
1716
|
// keys except the pending ones as they will be sequenced after this delete.
|
|
1566
1717
|
directory.clearExceptPendingKeys(local);
|
|
1567
|
-
// In case of delete op, we need to reset the creation
|
|
1718
|
+
// In case of delete op, we need to reset the creation seqNum, clientSeqNum and client ids of
|
|
1568
1719
|
// creators as the previous directory is getting deleted and we will initialize again when
|
|
1569
1720
|
// we will receive op for the create again.
|
|
1570
|
-
directory.
|
|
1721
|
+
directory.seqData.seq = -1;
|
|
1722
|
+
directory.seqData.clientSeq = -1;
|
|
1571
1723
|
directory.clientIds.clear();
|
|
1572
1724
|
// Do the same thing for the subtree of the directory. If create is not pending for a child, then just
|
|
1573
1725
|
// delete it.
|
|
@@ -1581,21 +1733,35 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1581
1733
|
}
|
|
1582
1734
|
};
|
|
1583
1735
|
const subDirectory = this._subdirectories.get(op.subdirName);
|
|
1736
|
+
// Clear the creation tracker record
|
|
1737
|
+
this.ackedCreationSeqTracker.delete(op.subdirName);
|
|
1584
1738
|
resetSubDirectoryTree(subDirectory);
|
|
1585
1739
|
}
|
|
1586
1740
|
if (op.type === "createSubDirectory") {
|
|
1587
1741
|
const dir = this._subdirectories.get(op.subdirName);
|
|
1588
1742
|
// Child sub directory create seq number can't be lower than the parent subdirectory.
|
|
1589
1743
|
// The sequence number for multiple ops can be the same when multiple createSubDirectory occurs with grouped batching enabled, thus <= and not just <.
|
|
1590
|
-
if (this.
|
|
1591
|
-
if (dir?.
|
|
1592
|
-
// Only set the
|
|
1593
|
-
dir.
|
|
1744
|
+
if (this.seqData.seq !== -1 && this.seqData.seq <= msg.sequenceNumber) {
|
|
1745
|
+
if (dir?.seqData.seq === -1) {
|
|
1746
|
+
// Only set the sequence data based on the first message
|
|
1747
|
+
dir.seqData.seq = msg.sequenceNumber;
|
|
1748
|
+
dir.seqData.clientSeq = msg.clientSequenceNumber;
|
|
1749
|
+
// set the creation seq in tracker
|
|
1750
|
+
if (!this.ackedCreationSeqTracker.has(op.subdirName) &&
|
|
1751
|
+
!this.pendingDeleteSubDirectoriesTracker.has(op.subdirName)) {
|
|
1752
|
+
this.ackedCreationSeqTracker.set(op.subdirName, {
|
|
1753
|
+
seq: msg.sequenceNumber,
|
|
1754
|
+
clientSeq: msg.clientSequenceNumber,
|
|
1755
|
+
});
|
|
1756
|
+
if (local) {
|
|
1757
|
+
this.localCreationSeqTracker.delete(op.subdirName);
|
|
1758
|
+
}
|
|
1759
|
+
}
|
|
1594
1760
|
}
|
|
1595
1761
|
// The client created the dir at or after the dirs seq, so list its client id as a creator.
|
|
1596
1762
|
if (dir !== undefined &&
|
|
1597
1763
|
!dir.clientIds.has(msg.clientId) &&
|
|
1598
|
-
dir.
|
|
1764
|
+
dir.seqData.seq <= msg.sequenceNumber) {
|
|
1599
1765
|
dir.clientIds.add(msg.clientId);
|
|
1600
1766
|
}
|
|
1601
1767
|
}
|
|
@@ -1670,15 +1836,25 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1670
1836
|
* Create subdirectory implementation used for both locally sourced creation as well as incoming remote creation.
|
|
1671
1837
|
* @param subdirName - The name of the subdirectory being created
|
|
1672
1838
|
* @param local - Whether the message originated from the local client
|
|
1673
|
-
* @param
|
|
1839
|
+
* @param seqData - Sequence number and client sequence number at which this directory is created
|
|
1674
1840
|
* @param clientId - Id of client which created this directory.
|
|
1675
1841
|
* @returns True if is newly created, false if it already existed.
|
|
1676
1842
|
*/
|
|
1677
|
-
createSubDirectoryCore(subdirName, local,
|
|
1843
|
+
createSubDirectoryCore(subdirName, local, seqData, clientId) {
|
|
1678
1844
|
const subdir = this._subdirectories.get(subdirName);
|
|
1679
1845
|
if (subdir === undefined) {
|
|
1680
1846
|
const absolutePath = posix.join(this.absolutePath, subdirName);
|
|
1681
|
-
const subDir = new SubDirectory(
|
|
1847
|
+
const subDir = new SubDirectory({ ...seqData }, new Set([clientId]), this.directory, this.runtime, this.serializer, absolutePath);
|
|
1848
|
+
/**
|
|
1849
|
+
* Store the sequnce numbers of newly created subdirectory to the proper creation tracker, based
|
|
1850
|
+
* on whether the creation behavior has been ack'd or not
|
|
1851
|
+
*/
|
|
1852
|
+
if (!isAcknowledgedOrDetached(seqData)) {
|
|
1853
|
+
this.localCreationSeqTracker.set(subdirName, { ...seqData });
|
|
1854
|
+
}
|
|
1855
|
+
else {
|
|
1856
|
+
this.ackedCreationSeqTracker.set(subdirName, { ...seqData });
|
|
1857
|
+
}
|
|
1682
1858
|
this.registerEventsOnSubDirectory(subDir, subdirName);
|
|
1683
1859
|
this._subdirectories.set(subdirName, subDir);
|
|
1684
1860
|
this.emit("subDirectoryCreated", subdirName, local, this);
|
|
@@ -1708,6 +1884,16 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1708
1884
|
// Might want to consider cleaning out the structure more exhaustively though? But not when rollback.
|
|
1709
1885
|
if (previousValue !== undefined) {
|
|
1710
1886
|
this._subdirectories.delete(subdirName);
|
|
1887
|
+
/**
|
|
1888
|
+
* Remove the corresponding record from the proper creation tracker, based on whether the subdirectory has been
|
|
1889
|
+
* ack'd already or still not committed yet (could be both).
|
|
1890
|
+
*/
|
|
1891
|
+
if (this.ackedCreationSeqTracker.has(subdirName)) {
|
|
1892
|
+
this.ackedCreationSeqTracker.delete(subdirName);
|
|
1893
|
+
}
|
|
1894
|
+
if (this.localCreationSeqTracker.has(subdirName)) {
|
|
1895
|
+
this.localCreationSeqTracker.delete(subdirName);
|
|
1896
|
+
}
|
|
1711
1897
|
this.disposeSubDirectoryTree(previousValue);
|
|
1712
1898
|
this.emit("subDirectoryDeleted", subdirName, local, this);
|
|
1713
1899
|
}
|
|
@@ -1727,11 +1913,12 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1727
1913
|
}
|
|
1728
1914
|
}
|
|
1729
1915
|
undeleteSubDirectoryTree(directory) {
|
|
1730
|
-
// Restore deleted subdirectory tree.
|
|
1731
|
-
|
|
1916
|
+
// Restore deleted subdirectory tree. Need to undispose the current directory first, then get access to the iterator.
|
|
1917
|
+
// This will unmark "deleted" from the subdirectories from top to bottom.
|
|
1918
|
+
directory.undispose();
|
|
1919
|
+
for (const [_, subDirectory] of directory.subdirectories()) {
|
|
1732
1920
|
this.undeleteSubDirectoryTree(subDirectory);
|
|
1733
1921
|
}
|
|
1734
|
-
directory.undispose();
|
|
1735
1922
|
}
|
|
1736
1923
|
}
|
|
1737
|
-
//# sourceMappingURL=directory.
|
|
1924
|
+
//# sourceMappingURL=directory.mjs.map
|