@fluid-experimental/tree 2.92.0 → 2.100.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 +12 -0
- package/README.md +1 -1
- package/api-report/experimental-tree.alpha.api.md +1 -1
- package/dist/EditLog.d.ts +1 -2
- package/dist/EditLog.d.ts.map +1 -1
- package/dist/MergeHealth.d.ts.map +1 -1
- package/dist/MergeHealth.js.map +1 -1
- package/dist/SharedTree.d.ts +8 -1
- package/dist/SharedTree.d.ts.map +1 -1
- package/dist/SharedTree.js +13 -12
- package/dist/SharedTree.js.map +1 -1
- package/eslint.config.mts +1 -1
- package/lib/EditLog.d.ts +1 -2
- package/lib/EditLog.d.ts.map +1 -1
- package/lib/MergeHealth.d.ts.map +1 -1
- package/lib/MergeHealth.js.map +1 -1
- package/lib/SharedTree.d.ts +8 -1
- package/lib/SharedTree.d.ts.map +1 -1
- package/lib/SharedTree.js +13 -12
- package/lib/SharedTree.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +28 -30
- package/src/MergeHealth.ts +2 -2
- package/src/SharedTree.ts +28 -13
package/src/SharedTree.ts
CHANGED
|
@@ -26,14 +26,16 @@ import {
|
|
|
26
26
|
SharedObject,
|
|
27
27
|
createSingleBlobSummary,
|
|
28
28
|
} from '@fluidframework/shared-object-base/internal';
|
|
29
|
+
import type { TelemetryLoggerExt } from '@fluidframework/telemetry-utils/internal';
|
|
29
30
|
import {
|
|
30
31
|
IEventSampler,
|
|
31
32
|
ITelemetryLoggerPropertyBags,
|
|
32
|
-
ITelemetryLoggerExt,
|
|
33
33
|
PerformanceEvent,
|
|
34
34
|
createChildLogger,
|
|
35
35
|
createSampledLogger,
|
|
36
36
|
} from '@fluidframework/telemetry-utils/internal';
|
|
37
|
+
// eslint-disable-next-line import-x/no-internal-modules -- Needed to avoid specialized /internal ITelemetryLoggerExt
|
|
38
|
+
import type { ITelemetryLoggerExt } from '@fluidframework/telemetry-utils/legacy';
|
|
37
39
|
|
|
38
40
|
import { BuildNode, BuildTreeNode, Change, ChangeType } from './ChangeTypes.js';
|
|
39
41
|
import { RestOrArray, copyPropertyIfDefined, fail, unwrapRestOrArray } from './Common.js';
|
|
@@ -488,6 +490,13 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
488
490
|
* logger for SharedTree events.
|
|
489
491
|
*/
|
|
490
492
|
public readonly logger: ITelemetryLoggerExt;
|
|
493
|
+
/**
|
|
494
|
+
* Internal and only viable logger for SharedTree events.
|
|
495
|
+
* @privateRemarks
|
|
496
|
+
* `logger` is public and remains typed for external use with mostly deprecated methods.
|
|
497
|
+
* Internally, only loggerInternal should be used and it provides the full set of logging methods.
|
|
498
|
+
*/
|
|
499
|
+
private readonly loggerInternal: TelemetryLoggerExt & ITelemetryLoggerExt;
|
|
491
500
|
private readonly sequencedEditAppliedLogger: ITelemetryLoggerExt;
|
|
492
501
|
|
|
493
502
|
private readonly encoder_0_0_2: SharedTreeEncoder_0_0_2;
|
|
@@ -552,11 +561,12 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
552
561
|
const historyPolicy = this.getHistoryPolicy(options);
|
|
553
562
|
this.summarizeHistory = historyPolicy.summarizeHistory;
|
|
554
563
|
|
|
555
|
-
this.
|
|
564
|
+
this.loggerInternal = createChildLogger({
|
|
556
565
|
logger: runtime.logger,
|
|
557
566
|
namespace: 'SharedTree',
|
|
558
567
|
properties: sharedTreeTelemetryProperties,
|
|
559
568
|
});
|
|
569
|
+
this.logger = this.loggerInternal;
|
|
560
570
|
this.sequencedEditAppliedLogger = createChildLogger({
|
|
561
571
|
logger: this.logger,
|
|
562
572
|
namespace: 'SequencedEditApplied',
|
|
@@ -577,8 +587,8 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
577
587
|
},
|
|
578
588
|
};
|
|
579
589
|
})();
|
|
580
|
-
const
|
|
581
|
-
this.idCompressor = new IdCompressor(createSessionId(), reservedIdCount, attributionId,
|
|
590
|
+
const idCompressorLogger = createSampledLogger(this.loggerInternal, idCompressorEventSampler);
|
|
591
|
+
this.idCompressor = new IdCompressor(createSessionId(), reservedIdCount, attributionId, idCompressorLogger);
|
|
582
592
|
this.editLogSize = options.inMemoryHistorySize;
|
|
583
593
|
this.editEvictionFrequency = options.inMemoryHistorySize;
|
|
584
594
|
const { editLog, cachingLogViewer } = this.initializeNewEditLogFromSummary(
|
|
@@ -814,7 +824,7 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
814
824
|
fail('Unknown version');
|
|
815
825
|
}
|
|
816
826
|
} catch (error) {
|
|
817
|
-
this.
|
|
827
|
+
this.loggerInternal?.sendErrorEvent({
|
|
818
828
|
eventName: 'UnsupportedSummaryWriteFormat',
|
|
819
829
|
formatVersion: this.writeFormat,
|
|
820
830
|
});
|
|
@@ -830,7 +840,7 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
830
840
|
|
|
831
841
|
if (this.deltaManager.readOnlyInfo.readonly !== true && isUpdateRequired(loadedSummaryVersion, this.writeFormat)) {
|
|
832
842
|
this.submitOp({ type: SharedTreeOpType.Update, version: this.writeFormat });
|
|
833
|
-
this.
|
|
843
|
+
this.loggerInternal.sendTelemetryEvent({
|
|
834
844
|
eventName: 'RequestVersionUpdate',
|
|
835
845
|
versionFrom: loadedSummaryVersion,
|
|
836
846
|
versionTo: this.writeFormat,
|
|
@@ -873,7 +883,7 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
873
883
|
this.interner.getOrCreateInternedId(initialTree.definition);
|
|
874
884
|
if (compareSummaryFormatVersions(loadedSummaryVersion, WriteFormat.v0_1_1) < 0) {
|
|
875
885
|
const { editIds, editChunks } = editHistory;
|
|
876
|
-
this.
|
|
886
|
+
this.loggerInternal.sendTelemetryEvent({
|
|
877
887
|
eventName: 'SummaryConversion',
|
|
878
888
|
formatVersion: WriteFormat.v0_1_1,
|
|
879
889
|
historySize: editIds.length,
|
|
@@ -922,7 +932,7 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
922
932
|
// Use previously registered EditAddedHandlers if there is an existing EditLog.
|
|
923
933
|
const editLog = new EditLog(
|
|
924
934
|
editHistory,
|
|
925
|
-
this.
|
|
935
|
+
this.loggerInternal,
|
|
926
936
|
this.editLog?.editAddedHandlers,
|
|
927
937
|
this.editLogSize,
|
|
928
938
|
this.editEvictionFrequency
|
|
@@ -1021,7 +1031,7 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
1021
1031
|
if (sameVersion) {
|
|
1022
1032
|
if (type === SharedTreeOpType.Handle) {
|
|
1023
1033
|
// Edit virtualization is no longer supported, log the event and ignore the op.
|
|
1024
|
-
this.
|
|
1034
|
+
this.loggerInternal.sendErrorEvent({ eventName: 'UnexpectedHistoryChunk' });
|
|
1025
1035
|
} else if (type === SharedTreeOpType.Edit) {
|
|
1026
1036
|
if (op.version === WriteFormat.v0_1_1) {
|
|
1027
1037
|
this.idCompressor.finalizeCreationRange(op.idRange);
|
|
@@ -1038,7 +1048,7 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
1038
1048
|
// An op version newer than our current version should not be received. If this happens, either an
|
|
1039
1049
|
// incorrect op version has been written or an update op was skipped.
|
|
1040
1050
|
const error = 'Newer op version received by a client that has yet to be updated.';
|
|
1041
|
-
this.
|
|
1051
|
+
this.loggerInternal.sendErrorEvent(
|
|
1042
1052
|
{
|
|
1043
1053
|
eventName: 'UnexpectedNewerOpVersion',
|
|
1044
1054
|
},
|
|
@@ -1105,7 +1115,7 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
1105
1115
|
private processVersionUpdate(version: WriteFormat): void {
|
|
1106
1116
|
if (isUpdateRequired(this.writeFormat, version)) {
|
|
1107
1117
|
PerformanceEvent.timedExec(
|
|
1108
|
-
this.
|
|
1118
|
+
this.loggerInternal,
|
|
1109
1119
|
{ eventName: 'VersionUpdate', version },
|
|
1110
1120
|
() => {
|
|
1111
1121
|
if (compareSummaryFormatVersions(version, WriteFormat.v0_1_1) >= 0) {
|
|
@@ -1136,7 +1146,12 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
1136
1146
|
this.interner = new MutableStringInterner([initialTree.definition]);
|
|
1137
1147
|
const oldIdCompressor = this.idCompressor;
|
|
1138
1148
|
// Create the IdCompressor that will be used after the upgrade
|
|
1139
|
-
const newIdCompressor = new IdCompressor(
|
|
1149
|
+
const newIdCompressor = new IdCompressor(
|
|
1150
|
+
createSessionId(),
|
|
1151
|
+
reservedIdCount,
|
|
1152
|
+
this.attributionId,
|
|
1153
|
+
this.loggerInternal
|
|
1154
|
+
);
|
|
1140
1155
|
const newContext = getNodeIdContext(newIdCompressor);
|
|
1141
1156
|
// Generate all local IDs in the new compressor that were in the old compressor and preserve their UUIDs.
|
|
1142
1157
|
// This will allow the client to continue to use local IDs that were allocated pre-upgrade
|
|
@@ -1357,7 +1372,7 @@ export class SharedTree extends SharedObject<ISharedTreeEvents> implements NodeI
|
|
|
1357
1372
|
* @returns the inverse of `changes` or undefined if the changes could not be inverted for the given tree state.
|
|
1358
1373
|
*/
|
|
1359
1374
|
public revertChanges(changes: readonly InternalizedChange[], before: RevisionView): ChangeInternal[] | undefined {
|
|
1360
|
-
return revert(changes as unknown as readonly ChangeInternal[], before, this.
|
|
1375
|
+
return revert(changes as unknown as readonly ChangeInternal[], before, this.loggerInternal, this.emit.bind(this));
|
|
1361
1376
|
}
|
|
1362
1377
|
|
|
1363
1378
|
/**
|