@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.
Files changed (119) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/api-report/container-runtime.legacy.alpha.api.md +17 -15
  3. package/container-runtime.test-files.tar +0 -0
  4. package/dist/blobManager/blobManagerSnapSum.js.map +1 -1
  5. package/dist/channelCollection.js.map +1 -1
  6. package/dist/containerRuntime.d.ts +38 -5
  7. package/dist/containerRuntime.d.ts.map +1 -1
  8. package/dist/containerRuntime.js +28 -7
  9. package/dist/containerRuntime.js.map +1 -1
  10. package/dist/gc/garbageCollection.d.ts.map +1 -1
  11. package/dist/gc/garbageCollection.js.map +1 -1
  12. package/dist/gc/gcConfigs.js +1 -1
  13. package/dist/gc/gcConfigs.js.map +1 -1
  14. package/dist/gc/gcHelpers.js.map +1 -1
  15. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/opLifecycle/opDecompressor.js +0 -1
  20. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  21. package/dist/opLifecycle/opSplitter.js +0 -1
  22. package/dist/opLifecycle/opSplitter.js.map +1 -1
  23. package/dist/packageVersion.d.ts +1 -1
  24. package/dist/packageVersion.js +1 -1
  25. package/dist/packageVersion.js.map +1 -1
  26. package/dist/pendingStateManager.d.ts +4 -0
  27. package/dist/pendingStateManager.d.ts.map +1 -1
  28. package/dist/pendingStateManager.js +31 -1
  29. package/dist/pendingStateManager.js.map +1 -1
  30. package/dist/scheduleManager.js +0 -2
  31. package/dist/scheduleManager.js.map +1 -1
  32. package/dist/summary/runWhileConnectedCoordinator.d.ts +2 -1
  33. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  34. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  35. package/dist/summary/runningSummarizer.d.ts +8 -1
  36. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  37. package/dist/summary/runningSummarizer.js +70 -8
  38. package/dist/summary/runningSummarizer.js.map +1 -1
  39. package/dist/summary/summarizer.d.ts +5 -2
  40. package/dist/summary/summarizer.d.ts.map +1 -1
  41. package/dist/summary/summarizer.js +39 -6
  42. package/dist/summary/summarizer.js.map +1 -1
  43. package/dist/summary/summarizerTypes.d.ts +8 -4
  44. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  45. package/dist/summary/summarizerTypes.js.map +1 -1
  46. package/dist/summary/summaryCollection.js +0 -2
  47. package/dist/summary/summaryCollection.js.map +1 -1
  48. package/dist/summary/summaryManager.d.ts +5 -2
  49. package/dist/summary/summaryManager.d.ts.map +1 -1
  50. package/dist/summary/summaryManager.js +23 -6
  51. package/dist/summary/summaryManager.js.map +1 -1
  52. package/lib/blobManager/blobManagerSnapSum.js.map +1 -1
  53. package/lib/channelCollection.js.map +1 -1
  54. package/lib/containerRuntime.d.ts +38 -5
  55. package/lib/containerRuntime.d.ts.map +1 -1
  56. package/lib/containerRuntime.js +28 -7
  57. package/lib/containerRuntime.js.map +1 -1
  58. package/lib/gc/garbageCollection.d.ts.map +1 -1
  59. package/lib/gc/garbageCollection.js.map +1 -1
  60. package/lib/gc/gcConfigs.js +1 -1
  61. package/lib/gc/gcConfigs.js.map +1 -1
  62. package/lib/gc/gcHelpers.js.map +1 -1
  63. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  64. package/lib/index.d.ts +1 -1
  65. package/lib/index.d.ts.map +1 -1
  66. package/lib/index.js.map +1 -1
  67. package/lib/opLifecycle/opDecompressor.js +0 -1
  68. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  69. package/lib/opLifecycle/opSplitter.js +0 -1
  70. package/lib/opLifecycle/opSplitter.js.map +1 -1
  71. package/lib/packageVersion.d.ts +1 -1
  72. package/lib/packageVersion.js +1 -1
  73. package/lib/packageVersion.js.map +1 -1
  74. package/lib/pendingStateManager.d.ts +4 -0
  75. package/lib/pendingStateManager.d.ts.map +1 -1
  76. package/lib/pendingStateManager.js +29 -0
  77. package/lib/pendingStateManager.js.map +1 -1
  78. package/lib/scheduleManager.js +0 -2
  79. package/lib/scheduleManager.js.map +1 -1
  80. package/lib/summary/runWhileConnectedCoordinator.d.ts +2 -1
  81. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  82. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  83. package/lib/summary/runningSummarizer.d.ts +8 -1
  84. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  85. package/lib/summary/runningSummarizer.js +70 -8
  86. package/lib/summary/runningSummarizer.js.map +1 -1
  87. package/lib/summary/summarizer.d.ts +5 -2
  88. package/lib/summary/summarizer.d.ts.map +1 -1
  89. package/lib/summary/summarizer.js +39 -6
  90. package/lib/summary/summarizer.js.map +1 -1
  91. package/lib/summary/summarizerTypes.d.ts +8 -4
  92. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  93. package/lib/summary/summarizerTypes.js.map +1 -1
  94. package/lib/summary/summaryCollection.js +0 -2
  95. package/lib/summary/summaryCollection.js.map +1 -1
  96. package/lib/summary/summaryManager.d.ts +5 -2
  97. package/lib/summary/summaryManager.d.ts.map +1 -1
  98. package/lib/summary/summaryManager.js +23 -6
  99. package/lib/summary/summaryManager.js.map +1 -1
  100. package/package.json +20 -20
  101. package/src/blobManager/blobManagerSnapSum.ts +1 -1
  102. package/src/channelCollection.ts +1 -1
  103. package/src/containerRuntime.ts +84 -24
  104. package/src/gc/garbageCollection.ts +2 -1
  105. package/src/gc/gcConfigs.ts +1 -1
  106. package/src/gc/gcHelpers.ts +2 -2
  107. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  108. package/src/index.ts +1 -0
  109. package/src/opLifecycle/opDecompressor.ts +1 -1
  110. package/src/opLifecycle/opSplitter.ts +1 -1
  111. package/src/packageVersion.ts +1 -1
  112. package/src/pendingStateManager.ts +38 -0
  113. package/src/scheduleManager.ts +2 -2
  114. package/src/summary/runWhileConnectedCoordinator.ts +2 -5
  115. package/src/summary/runningSummarizer.ts +82 -11
  116. package/src/summary/summarizer.ts +49 -10
  117. package/src/summary/summarizerTypes.ts +11 -4
  118. package/src/summary/summaryCollection.ts +2 -2
  119. 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 & ISummarizerEvents> 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<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][]);
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: SummarizerStopReason): void;
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<ISummarizerEvents> {
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<SummarizerStopReason>;
567
+ run(onBehalfOf: string): Promise<SummarizerStopReason_2>;
566
568
  // (undocumented)
567
- stop(reason: SummarizerStopReason): void;
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<SummarizerStopReason>;
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<ISummarizerEvents> implements ISummarizer {
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<SummarizerStopReason>;
768
- stop(reason: SummarizerStopReason): void;
769
- static stopReasonCanRunLastSummary(stopReason: SummarizerStopReason): boolean;
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":"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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 = 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"]}
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"]}