@fluidframework/container-runtime 2.11.0 → 2.13.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 +41 -0
- package/api-report/container-runtime.legacy.alpha.api.md +17 -15
- package/container-runtime.test-files.tar +0 -0
- package/dist/blobManager/blobManagerSnapSum.js.map +1 -1
- package/dist/channelCollection.js.map +1 -1
- package/dist/containerRuntime.d.ts +38 -5
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +28 -7
- package/dist/containerRuntime.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.js +1 -1
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +0 -1
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opSplitter.js +0 -1
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +4 -0
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +31 -1
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.js +0 -2
- package/dist/scheduleManager.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +2 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +8 -1
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +70 -8
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +5 -2
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +39 -6
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +8 -4
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.js +0 -2
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +5 -2
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +23 -6
- package/dist/summary/summaryManager.js.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.js.map +1 -1
- package/lib/channelCollection.js.map +1 -1
- package/lib/containerRuntime.d.ts +38 -5
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +28 -7
- package/lib/containerRuntime.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.js +1 -1
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +0 -1
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opSplitter.js +0 -1
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +4 -0
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +29 -0
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.js +0 -2
- package/lib/scheduleManager.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts +2 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +8 -1
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +70 -8
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +5 -2
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +39 -6
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +8 -4
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.js +0 -2
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +5 -2
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +23 -6
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +20 -20
- package/src/blobManager/blobManagerSnapSum.ts +1 -1
- package/src/channelCollection.ts +1 -1
- package/src/containerRuntime.ts +84 -24
- package/src/gc/garbageCollection.ts +2 -1
- package/src/gc/gcConfigs.ts +1 -1
- package/src/gc/gcHelpers.ts +2 -2
- package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
- package/src/index.ts +1 -0
- package/src/opLifecycle/opDecompressor.ts +1 -1
- package/src/opLifecycle/opSplitter.ts +1 -1
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +38 -0
- package/src/scheduleManager.ts +2 -2
- package/src/summary/runWhileConnectedCoordinator.ts +2 -5
- package/src/summary/runningSummarizer.ts +82 -11
- package/src/summary/summarizer.ts +49 -10
- package/src/summary/summarizerTypes.ts +11 -4
- package/src/summary/summaryCollection.ts +2 -2
- package/src/summary/summaryManager.ts +30 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# @fluidframework/container-runtime
|
|
2
2
|
|
|
3
|
+
## 2.13.0
|
|
4
|
+
|
|
5
|
+
Dependency updates only.
|
|
6
|
+
|
|
7
|
+
## 2.12.0
|
|
8
|
+
|
|
9
|
+
### Minor Changes
|
|
10
|
+
|
|
11
|
+
- SummarizerStopReason, ISummarizeEventProps, and ISummarizerEvents are now deprecated ([#23217](https://github.com/microsoft/FluidFramework/pull/23217)) [cd88ee2320](https://github.com/microsoft/FluidFramework/commit/cd88ee2320c40ed9e0d43ec8ed73cb878f1c18a9)
|
|
12
|
+
|
|
13
|
+
`SummarizerStopReason`, `ISummarizeEventProps`, and `ISummarizerEvents` have all been deprecated from the `"@fluidframework/container-runtime"` package. Please migrate all uses of these APIs to their counterparts in the `"@fluidframework/container-runtime-definitions"` package.
|
|
14
|
+
|
|
15
|
+
- IContainerRuntimeOptions.flushMode is now deprecated ([#23288](https://github.com/microsoft/FluidFramework/pull/23288)) [af1cd7b370](https://github.com/microsoft/FluidFramework/commit/af1cd7b3707cce1306ae071aba1482734b039635)
|
|
16
|
+
|
|
17
|
+
The `IContainerRuntimeOptions.flushMode` property is deprecated and will be removed in version 2.20.0.
|
|
18
|
+
|
|
19
|
+
Only the default value `FlushMode.TurnBased` is supported when calling `ContainerRuntime.loadRuntime` directly, so there's no need for consumers to pass this option in.
|
|
20
|
+
|
|
21
|
+
- The ContainerRuntime class is now deprecated ([#23331](https://github.com/microsoft/FluidFramework/pull/23331)) [dc48446d7c](https://github.com/microsoft/FluidFramework/commit/dc48446d7c4914aca2a76095205975824aac1ba5)
|
|
22
|
+
|
|
23
|
+
The class `ContainerRuntime` is deprecated and will no longer be exported starting in version 2.20.0.
|
|
24
|
+
|
|
25
|
+
There are two possible migration paths to stop using `ContainerRuntime`:
|
|
26
|
+
|
|
27
|
+
- When using it as a type, replace it with an interface like `IContainerRuntime`
|
|
28
|
+
- When using the static function `ContainerRuntime.loadRuntime` replace it with the free function `loadContainerRuntime`.
|
|
29
|
+
|
|
30
|
+
`BaseContainerRuntimeFactory` has some changes as well, since it exposed `ContainerRuntime` in several function signatures:
|
|
31
|
+
|
|
32
|
+
- `instantiateFirstTime` - Takes the wider type `IContainerRuntime` instead of `ContainerRuntime`
|
|
33
|
+
- `instantiateFromExisting` - Takes the wider type `IContainerRuntime` instead of `ContainerRuntime`
|
|
34
|
+
- `preInitialize` - deprecated as well, since it returns `ContainerRuntime`
|
|
35
|
+
|
|
36
|
+
These functions should never be called directly anyway - use `BaseContainerRuntimeFactory.instantiateRuntime` instead.
|
|
37
|
+
|
|
38
|
+
- IContainerRuntimeOptions.enableGroupedBatching is now deprecated ([#23260](https://github.com/microsoft/FluidFramework/pull/23260)) [49d8e75e5c](https://github.com/microsoft/FluidFramework/commit/49d8e75e5cad12205aed15850db72c1ad21513c3)
|
|
39
|
+
|
|
40
|
+
The `IContainerRuntimeOptions.enableGroupedBatching` property is deprecated and will be removed in version 2.20.0. This will mean that the grouped batching feature can no longer be disabled. In versions 2.20.0 and beyond, grouped batching is required for the proper functioning of the Fluid Framework.
|
|
41
|
+
|
|
42
|
+
The sole case where grouped batching will be disabled is for compatibility with older v1 clients, and this will be implemented without any need for the configurable `IContainerRuntimeOptions.enableGroupedBatching` option.
|
|
43
|
+
|
|
3
44
|
## 2.11.0
|
|
4
45
|
|
|
5
46
|
### Minor Changes
|
|
@@ -32,9 +32,9 @@ export enum ContainerMessageType {
|
|
|
32
32
|
Rejoin = "rejoin"
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
// @alpha
|
|
36
|
-
export class ContainerRuntime extends TypedEventEmitter<IContainerRuntimeEvents
|
|
37
|
-
protected constructor(context: IContainerContext, registry: IFluidDataStoreRegistry, metadata: IContainerRuntimeMetadata | undefined, electedSummarizerData: ISerializedElection | undefined, chunks: [string, string[]][], dataStoreAliasMap: [string, string][], runtimeOptions: Readonly<Required<IContainerRuntimeOptions
|
|
35
|
+
// @alpha @deprecated
|
|
36
|
+
export class ContainerRuntime extends TypedEventEmitter<IContainerRuntimeEvents> implements IContainerRuntime, IRuntime, ISummarizerRuntime, ISummarizerInternalsProvider, IProvideFluidHandleContext {
|
|
37
|
+
protected constructor(context: IContainerContext, registry: IFluidDataStoreRegistry, metadata: IContainerRuntimeMetadata | undefined, electedSummarizerData: ISerializedElection | undefined, chunks: [string, string[]][], dataStoreAliasMap: [string, string][], runtimeOptions: Readonly<Required<Omit<IContainerRuntimeOptions, "flushMode" | "enableGroupedBatching">> & IContainerRuntimeOptions>, containerScope: FluidObject, baseLogger: ITelemetryBaseLogger, existing: boolean, blobManagerSnapshot: IBlobManagerLoadInfo, _storage: IDocumentStorageService, createIdCompressor: () => Promise<IIdCompressor & IIdCompressorCore>, documentsSchemaController: DocumentsSchemaController, featureGatesForTelemetry: Record<string, boolean | number | undefined>, provideEntryPoint: (containerRuntime: IContainerRuntime) => Promise<FluidObject>, requestHandler?: ((request: IRequest, runtime: IContainerRuntime) => Promise<IResponse>) | undefined, summaryConfiguration?: ISummaryConfiguration, recentBatchInfo?: [number, string][]);
|
|
38
38
|
// (undocumented)
|
|
39
39
|
protected addContainerStateToSummary(summaryTree: ISummaryTreeWithStats, fullTree: boolean, trackState: boolean, telemetryContext?: ITelemetryContext): void;
|
|
40
40
|
addedGCOutboundRoute(fromPath: string, toPath: string, messageTimestampMs?: number): void;
|
|
@@ -287,7 +287,7 @@ export interface IBroadcastSummaryResult {
|
|
|
287
287
|
// @alpha
|
|
288
288
|
export interface ICancellableSummarizerController extends ISummaryCancellationToken {
|
|
289
289
|
// (undocumented)
|
|
290
|
-
stop(reason:
|
|
290
|
+
stop(reason: SummarizerStopReason_2): void;
|
|
291
291
|
}
|
|
292
292
|
|
|
293
293
|
// @alpha
|
|
@@ -340,9 +340,11 @@ export interface IContainerRuntimeMetadata extends ICreateContainerMetadata, IGC
|
|
|
340
340
|
export interface IContainerRuntimeOptions {
|
|
341
341
|
readonly chunkSizeInBytes?: number;
|
|
342
342
|
readonly compressionOptions?: ICompressionRuntimeOptions;
|
|
343
|
+
// @deprecated
|
|
343
344
|
readonly enableGroupedBatching?: boolean;
|
|
344
345
|
readonly enableRuntimeIdCompressor?: IdCompressorMode;
|
|
345
346
|
readonly explicitSchemaControl?: boolean;
|
|
347
|
+
// @deprecated
|
|
346
348
|
readonly flushMode?: FlushMode;
|
|
347
349
|
// (undocumented)
|
|
348
350
|
readonly gcOptions?: IGCRuntimeOptions;
|
|
@@ -538,7 +540,7 @@ export interface ISubmitSummaryOptions extends ISummarizeOptions {
|
|
|
538
540
|
readonly summaryLogger: ITelemetryLoggerExt;
|
|
539
541
|
}
|
|
540
542
|
|
|
541
|
-
// @alpha (undocumented)
|
|
543
|
+
// @alpha @deprecated (undocumented)
|
|
542
544
|
export interface ISummarizeEventProps {
|
|
543
545
|
// (undocumented)
|
|
544
546
|
currentAttempt: number;
|
|
@@ -556,15 +558,15 @@ export interface ISummarizeOptions {
|
|
|
556
558
|
}
|
|
557
559
|
|
|
558
560
|
// @alpha (undocumented)
|
|
559
|
-
export interface ISummarizer extends IEventProvider<
|
|
561
|
+
export interface ISummarizer extends IEventProvider<ISummarizerEvents_2> {
|
|
560
562
|
// (undocumented)
|
|
561
563
|
close(): void;
|
|
562
564
|
enqueueSummarize(options: IEnqueueSummarizeOptions): EnqueueSummarizeResult;
|
|
563
565
|
readonly ISummarizer?: ISummarizer;
|
|
564
566
|
// (undocumented)
|
|
565
|
-
run(onBehalfOf: string): Promise<
|
|
567
|
+
run(onBehalfOf: string): Promise<SummarizerStopReason_2>;
|
|
566
568
|
// (undocumented)
|
|
567
|
-
stop(reason:
|
|
569
|
+
stop(reason: SummarizerStopReason_2): void;
|
|
568
570
|
summarizeOnDemand(options: IOnDemandSummarizeOptions): ISummarizeResults;
|
|
569
571
|
}
|
|
570
572
|
|
|
@@ -575,7 +577,7 @@ export interface ISummarizeResults {
|
|
|
575
577
|
readonly summarySubmitted: Promise<SummarizeResultPart<SubmitSummaryResult, SubmitSummaryFailureData>>;
|
|
576
578
|
}
|
|
577
579
|
|
|
578
|
-
// @alpha (undocumented)
|
|
580
|
+
// @alpha @deprecated (undocumented)
|
|
579
581
|
export interface ISummarizerEvents extends IEvent {
|
|
580
582
|
// (undocumented)
|
|
581
583
|
(event: "summarize", listener: (props: ISummarizeEventProps) => void): any;
|
|
@@ -632,7 +634,7 @@ export interface ISummaryBaseConfiguration {
|
|
|
632
634
|
}
|
|
633
635
|
|
|
634
636
|
// @alpha
|
|
635
|
-
export type ISummaryCancellationToken = ICancellationToken<
|
|
637
|
+
export type ISummaryCancellationToken = ICancellationToken<SummarizerStopReason_2>;
|
|
636
638
|
|
|
637
639
|
// @alpha (undocumented)
|
|
638
640
|
export interface ISummaryCollectionOpEvents extends IEvent {
|
|
@@ -750,7 +752,7 @@ export interface SubmitSummaryFailureData {
|
|
|
750
752
|
export type SubmitSummaryResult = IBaseSummarizeResult | IGenerateSummaryTreeResult | IUploadSummaryResult | ISubmitSummaryOpResult;
|
|
751
753
|
|
|
752
754
|
// @alpha
|
|
753
|
-
export class Summarizer extends TypedEventEmitter<
|
|
755
|
+
export class Summarizer extends TypedEventEmitter<ISummarizerEvents_2> implements ISummarizer {
|
|
754
756
|
constructor(
|
|
755
757
|
runtime: ISummarizerRuntime, configurationGetter: () => ISummaryConfiguration,
|
|
756
758
|
internalsProvider: ISummarizerInternalsProvider, handleContext: IFluidHandleContext, summaryCollection: SummaryCollection, runCoordinatorCreateFn: (runtime: IConnectableRuntime) => Promise<ICancellableSummarizerController>);
|
|
@@ -764,9 +766,9 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
764
766
|
// (undocumented)
|
|
765
767
|
recordSummaryAttempt?(summaryRefSeqNum?: number): void;
|
|
766
768
|
// (undocumented)
|
|
767
|
-
run(onBehalfOf: string): Promise<
|
|
768
|
-
stop(reason:
|
|
769
|
-
static stopReasonCanRunLastSummary(stopReason:
|
|
769
|
+
run(onBehalfOf: string): Promise<SummarizerStopReason_2>;
|
|
770
|
+
stop(reason: SummarizerStopReason_2): void;
|
|
771
|
+
static stopReasonCanRunLastSummary(stopReason: SummarizerStopReason_2): boolean;
|
|
770
772
|
// (undocumented)
|
|
771
773
|
summarizeOnDemand(options: IOnDemandSummarizeOptions): ISummarizeResults;
|
|
772
774
|
// (undocumented)
|
|
@@ -784,7 +786,7 @@ export type SummarizeResultPart<TSuccess, TFailure = undefined> = {
|
|
|
784
786
|
error: IRetriableFailureError;
|
|
785
787
|
};
|
|
786
788
|
|
|
787
|
-
// @alpha (undocumented)
|
|
789
|
+
// @alpha @deprecated (undocumented)
|
|
788
790
|
export type SummarizerStopReason =
|
|
789
791
|
/** Summarizer client failed to summarize in all attempts. */
|
|
790
792
|
"failToSummarize"
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobManagerSnapSum.js","sourceRoot":"","sources":["../../src/blobManager/blobManagerSnapSum.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6EAGwD;AACxD,kEAA6D;AAC7D,oEAAqE;AAErE,qEAA4E;AAa/D,QAAA,qBAAqB,GAAG,gBAAgB,CAAC;AAEtD;;GAEG;AACU,QAAA,aAAa,GAAG,QAAQ,CAAC;AAEtC;;;GAGG;AACI,MAAM,uBAAuB,GAAG,KAAK,EAC3C,OAA4E,EAC5C,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAFvC,QAAA,uBAAuB,2BAEgB;AAEpD,MAAM,MAAM,GAAG,KAAK,EACnB,OAA4E,EAC5C,EAAE;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,qBAAa,CAAC,CAAC;IAE7D,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,IAAI,oBAAoB,GAAuB,EAAE,CAAC;IAClD,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"blobManagerSnapSum.js","sourceRoot":"","sources":["../../src/blobManager/blobManagerSnapSum.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tAttachState,\n\ttype IContainerContext,\n} from \"@fluidframework/container-definitions/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { readAndParse } from \"@fluidframework/driver-utils/internal\";\nimport type { ISummaryTreeWithStats } from \"@fluidframework/runtime-definitions/internal\";\nimport { SummaryTreeBuilder } from \"@fluidframework/runtime-utils/internal\";\nimport type { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils/internal\";\n\n/**\n * Information from a snapshot needed to load BlobManager\n * @legacy\n * @alpha\n */\nexport interface IBlobManagerLoadInfo {\n\tids?: string[];\n\tredirectTable?: [string, string][];\n}\n\nexport const redirectTableBlobName = \".redirectTable\";\n\n/**\n * @internal\n */\nexport const blobsTreeName = \".blobs\";\n\n/**\n * Reads blobs needed to load BlobManager from storage.\n *\n */\nexport const loadBlobManagerLoadInfo = async (\n\tcontext: Pick<IContainerContext, \"baseSnapshot\" | \"storage\" | \"attachState\">,\n): Promise<IBlobManagerLoadInfo> => loadV1(context);\n\nconst loadV1 = async (\n\tcontext: Pick<IContainerContext, \"baseSnapshot\" | \"storage\" | \"attachState\">,\n): Promise<IBlobManagerLoadInfo> => {\n\tconst blobsTree = context.baseSnapshot?.trees[blobsTreeName];\n\n\tif (!blobsTree) {\n\t\treturn {};\n\t}\n\tlet redirectTableEntries: [string, string][] = [];\n\tconst tableId: string | undefined = blobsTree.blobs[redirectTableBlobName];\n\tif (tableId) {\n\t\tredirectTableEntries = await readAndParse(context.storage, tableId);\n\t}\n\tconst ids = Object.entries(blobsTree.blobs)\n\t\t.filter(([k, _]) => k !== redirectTableBlobName)\n\t\t.map(([_, v]) => v);\n\n\treturn { ids, redirectTable: redirectTableEntries };\n};\n\nexport const toRedirectTable = (\n\tsnapshot: IBlobManagerLoadInfo,\n\tlogger: ITelemetryLoggerExt,\n\tattachState: AttachState,\n): Map<string, string | undefined> => {\n\tlogger.sendTelemetryEvent({\n\t\teventName: \"AttachmentBlobsLoaded\",\n\t\tcount: snapshot.ids?.length ?? 0,\n\t\tredirectTable: snapshot.redirectTable?.length,\n\t});\n\tconst redirectTable = new Map<string, string | undefined>(snapshot.redirectTable);\n\tconst detached = attachState !== AttachState.Attached;\n\tif (snapshot.ids) {\n\t\t// If we are detached, we don't have storage IDs yet, so set to undefined\n\t\t// Otherwise, set identity (id -> id) entries.\n\t\tsnapshot.ids.forEach((entry) => redirectTable.set(entry, detached ? undefined : entry));\n\t}\n\treturn redirectTable;\n};\n\nexport const summarizeBlobManagerState = (\n\tredirectTable: Map<string, string | undefined>,\n\tattachState: AttachState,\n): ISummaryTreeWithStats => summarizeV1(redirectTable, attachState);\n\nconst summarizeV1 = (\n\tredirectTable: Map<string, string | undefined>,\n\tattachState: AttachState,\n): ISummaryTreeWithStats => {\n\tconst storageIds = getStorageIds(redirectTable, attachState);\n\n\t// if storageIds is empty, it means we are detached and have only local IDs, or that there are no blobs attached\n\tconst blobIds =\n\t\tstorageIds.size > 0 ? Array.from(storageIds) : Array.from(redirectTable.keys());\n\tconst builder = new SummaryTreeBuilder();\n\tblobIds.forEach((blobId) => {\n\t\tbuilder.addAttachment(blobId);\n\t});\n\n\t// Any non-identity entries in the table need to be saved in the summary\n\tif (redirectTable.size > blobIds.length) {\n\t\tbuilder.addBlob(\n\t\t\tredirectTableBlobName,\n\t\t\t// filter out identity entries\n\t\t\tJSON.stringify(\n\t\t\t\tArray.from(redirectTable.entries()).filter(\n\t\t\t\t\t([localId, storageId]) => localId !== storageId,\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t}\n\n\treturn builder.getSummaryTree();\n};\n\nexport const getStorageIds = (\n\tredirectTable: Map<string, string | undefined>,\n\tattachState: AttachState,\n) => {\n\tconst ids = new Set<string | undefined>(redirectTable.values());\n\n\t// If we are detached, we will not have storage IDs, only undefined\n\tconst undefinedValueInTable = ids.delete(undefined);\n\n\t// For a detached container, entries are inserted into the redirect table with an undefined storage ID.\n\t// For an attached container, entries are inserted w/storage ID after the BlobAttach op round-trips.\n\tassert(\n\t\t!undefinedValueInTable || (attachState === AttachState.Detached && ids.size === 0),\n\t\t0x382 /* 'redirectTable' must contain only undefined while detached / defined values while attached */,\n\t);\n\n\treturn ids as Set<string>;\n};\n"]}
|