@fluidframework/container-runtime 2.0.0-internal.1.1.2 → 2.0.0-internal.1.2.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 (137) hide show
  1. package/dist/batchManager.d.ts +37 -0
  2. package/dist/batchManager.d.ts.map +1 -0
  3. package/dist/batchManager.js +73 -0
  4. package/dist/batchManager.js.map +1 -0
  5. package/dist/batchTracker.d.ts +1 -2
  6. package/dist/batchTracker.d.ts.map +1 -1
  7. package/dist/batchTracker.js +1 -2
  8. package/dist/batchTracker.js.map +1 -1
  9. package/dist/containerRuntime.d.ts +52 -20
  10. package/dist/containerRuntime.d.ts.map +1 -1
  11. package/dist/containerRuntime.js +252 -126
  12. package/dist/containerRuntime.js.map +1 -1
  13. package/dist/dataStoreContext.d.ts +18 -9
  14. package/dist/dataStoreContext.d.ts.map +1 -1
  15. package/dist/dataStoreContext.js +24 -16
  16. package/dist/dataStoreContext.js.map +1 -1
  17. package/dist/dataStores.d.ts +6 -2
  18. package/dist/dataStores.d.ts.map +1 -1
  19. package/dist/dataStores.js +7 -9
  20. package/dist/dataStores.js.map +1 -1
  21. package/dist/deltaScheduler.d.ts +6 -4
  22. package/dist/deltaScheduler.d.ts.map +1 -1
  23. package/dist/deltaScheduler.js +6 -4
  24. package/dist/deltaScheduler.js.map +1 -1
  25. package/dist/garbageCollection.d.ts +41 -12
  26. package/dist/garbageCollection.d.ts.map +1 -1
  27. package/dist/garbageCollection.js +176 -98
  28. package/dist/garbageCollection.js.map +1 -1
  29. package/dist/gcSweepReadyUsageDetection.d.ts +53 -0
  30. package/dist/gcSweepReadyUsageDetection.d.ts.map +1 -0
  31. package/dist/gcSweepReadyUsageDetection.js +135 -0
  32. package/dist/gcSweepReadyUsageDetection.js.map +1 -0
  33. package/dist/orderedClientElection.d.ts +28 -10
  34. package/dist/orderedClientElection.d.ts.map +1 -1
  35. package/dist/orderedClientElection.js +14 -4
  36. package/dist/orderedClientElection.js.map +1 -1
  37. package/dist/packageVersion.d.ts +1 -1
  38. package/dist/packageVersion.js +1 -1
  39. package/dist/packageVersion.js.map +1 -1
  40. package/dist/pendingStateManager.d.ts +0 -11
  41. package/dist/pendingStateManager.d.ts.map +1 -1
  42. package/dist/pendingStateManager.js +9 -44
  43. package/dist/pendingStateManager.js.map +1 -1
  44. package/dist/runningSummarizer.js +1 -1
  45. package/dist/runningSummarizer.js.map +1 -1
  46. package/dist/scheduleManager.d.ts +6 -3
  47. package/dist/scheduleManager.d.ts.map +1 -1
  48. package/dist/scheduleManager.js +22 -14
  49. package/dist/scheduleManager.js.map +1 -1
  50. package/dist/summarizerTypes.d.ts +16 -9
  51. package/dist/summarizerTypes.d.ts.map +1 -1
  52. package/dist/summarizerTypes.js +1 -1
  53. package/dist/summarizerTypes.js.map +1 -1
  54. package/dist/summaryCollection.d.ts +1 -0
  55. package/dist/summaryCollection.d.ts.map +1 -1
  56. package/dist/summaryCollection.js +29 -13
  57. package/dist/summaryCollection.js.map +1 -1
  58. package/dist/summaryManager.d.ts +2 -2
  59. package/dist/summaryManager.js +2 -2
  60. package/dist/summaryManager.js.map +1 -1
  61. package/lib/batchManager.d.ts +37 -0
  62. package/lib/batchManager.d.ts.map +1 -0
  63. package/lib/batchManager.js +69 -0
  64. package/lib/batchManager.js.map +1 -0
  65. package/lib/batchTracker.d.ts +1 -2
  66. package/lib/batchTracker.d.ts.map +1 -1
  67. package/lib/batchTracker.js +1 -2
  68. package/lib/batchTracker.js.map +1 -1
  69. package/lib/containerRuntime.d.ts +52 -20
  70. package/lib/containerRuntime.d.ts.map +1 -1
  71. package/lib/containerRuntime.js +255 -129
  72. package/lib/containerRuntime.js.map +1 -1
  73. package/lib/dataStoreContext.d.ts +18 -9
  74. package/lib/dataStoreContext.d.ts.map +1 -1
  75. package/lib/dataStoreContext.js +25 -17
  76. package/lib/dataStoreContext.js.map +1 -1
  77. package/lib/dataStores.d.ts +6 -2
  78. package/lib/dataStores.d.ts.map +1 -1
  79. package/lib/dataStores.js +7 -9
  80. package/lib/dataStores.js.map +1 -1
  81. package/lib/deltaScheduler.d.ts +6 -4
  82. package/lib/deltaScheduler.d.ts.map +1 -1
  83. package/lib/deltaScheduler.js +6 -4
  84. package/lib/deltaScheduler.js.map +1 -1
  85. package/lib/garbageCollection.d.ts +41 -12
  86. package/lib/garbageCollection.d.ts.map +1 -1
  87. package/lib/garbageCollection.js +175 -97
  88. package/lib/garbageCollection.js.map +1 -1
  89. package/lib/gcSweepReadyUsageDetection.d.ts +53 -0
  90. package/lib/gcSweepReadyUsageDetection.d.ts.map +1 -0
  91. package/lib/gcSweepReadyUsageDetection.js +130 -0
  92. package/lib/gcSweepReadyUsageDetection.js.map +1 -0
  93. package/lib/orderedClientElection.d.ts +28 -10
  94. package/lib/orderedClientElection.d.ts.map +1 -1
  95. package/lib/orderedClientElection.js +14 -4
  96. package/lib/orderedClientElection.js.map +1 -1
  97. package/lib/packageVersion.d.ts +1 -1
  98. package/lib/packageVersion.js +1 -1
  99. package/lib/packageVersion.js.map +1 -1
  100. package/lib/pendingStateManager.d.ts +0 -11
  101. package/lib/pendingStateManager.d.ts.map +1 -1
  102. package/lib/pendingStateManager.js +9 -44
  103. package/lib/pendingStateManager.js.map +1 -1
  104. package/lib/runningSummarizer.js +1 -1
  105. package/lib/runningSummarizer.js.map +1 -1
  106. package/lib/scheduleManager.d.ts +6 -3
  107. package/lib/scheduleManager.d.ts.map +1 -1
  108. package/lib/scheduleManager.js +24 -16
  109. package/lib/scheduleManager.js.map +1 -1
  110. package/lib/summarizerTypes.d.ts +16 -9
  111. package/lib/summarizerTypes.d.ts.map +1 -1
  112. package/lib/summarizerTypes.js +1 -1
  113. package/lib/summarizerTypes.js.map +1 -1
  114. package/lib/summaryCollection.d.ts +1 -0
  115. package/lib/summaryCollection.d.ts.map +1 -1
  116. package/lib/summaryCollection.js +29 -13
  117. package/lib/summaryCollection.js.map +1 -1
  118. package/lib/summaryManager.d.ts +2 -2
  119. package/lib/summaryManager.js +2 -2
  120. package/lib/summaryManager.js.map +1 -1
  121. package/package.json +21 -18
  122. package/src/batchManager.ts +91 -0
  123. package/src/batchTracker.ts +1 -2
  124. package/src/containerRuntime.ts +331 -176
  125. package/src/dataStoreContext.ts +27 -17
  126. package/src/dataStores.ts +7 -8
  127. package/src/deltaScheduler.ts +6 -4
  128. package/src/garbageCollection.ts +224 -134
  129. package/src/gcSweepReadyUsageDetection.ts +147 -0
  130. package/src/orderedClientElection.ts +31 -10
  131. package/src/packageVersion.ts +1 -1
  132. package/src/pendingStateManager.ts +9 -57
  133. package/src/runningSummarizer.ts +1 -1
  134. package/src/scheduleManager.ts +32 -12
  135. package/src/summarizerTypes.ts +17 -9
  136. package/src/summaryCollection.ts +31 -16
  137. package/src/summaryManager.ts +2 -2
@@ -9,7 +9,7 @@ import { Deferred, TypedEventEmitter } from "@fluidframework/common-utils";
9
9
  import { IDocumentStorageService } from "@fluidframework/driver-definitions";
10
10
  import { IClientDetails, IDocumentMessage, IQuorumClients, ISequencedDocumentMessage, ISnapshotTree, ITreeEntry } from "@fluidframework/protocol-definitions";
11
11
  import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
12
- import { CreateChildSummarizerNodeFn, CreateChildSummarizerNodeParam, IAttachMessage, IFluidDataStoreChannel, IFluidDataStoreContext, IFluidDataStoreContextDetached, IFluidDataStoreContextEvents, IFluidDataStoreRegistry, IGarbageCollectionData, IGarbageCollectionDetailsBase, IGarbageCollectionSummaryDetails, IInboundSignalMessage, IProvideFluidDataStoreFactory, ISummarizeResult, ISummarizerNodeWithGC, SummarizeInternalFn, ITelemetryContext } from "@fluidframework/runtime-definitions";
12
+ import { BindState, CreateChildSummarizerNodeFn, CreateChildSummarizerNodeParam, IAttachMessage, IFluidDataStoreChannel, IFluidDataStoreContext, IFluidDataStoreContextDetached, IFluidDataStoreContextEvents, IFluidDataStoreRegistry, IGarbageCollectionData, IGarbageCollectionDetailsBase, IGarbageCollectionSummaryDetails, IInboundSignalMessage, IProvideFluidDataStoreFactory, ISummarizeResult, ISummarizerNodeWithGC, SummarizeInternalFn, ITelemetryContext } from "@fluidframework/runtime-definitions";
13
13
  import { ContainerRuntime } from "./containerRuntime";
14
14
  export declare function createAttributesBlob(pkg: readonly string[], isRootDataStore: boolean): ITreeEntry;
15
15
  interface ISnapshotDetails {
@@ -48,6 +48,7 @@ export interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContex
48
48
  */
49
49
  export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IFluidDataStoreContextEvents> implements IFluidDataStoreContext, IDisposable {
50
50
  private readonly existing;
51
+ private bindState;
51
52
  readonly isLocalDataStore: boolean;
52
53
  private readonly makeLocallyVisibleFn;
53
54
  get packagePath(): readonly string[];
@@ -82,7 +83,8 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
82
83
  protected isInMemoryRoot(): boolean;
83
84
  protected registry: IFluidDataStoreRegistry | undefined;
84
85
  protected detachedRuntimeCreation: boolean;
85
- private readonly bindToContext;
86
+ /** @deprecated - To be replaced by calling makeLocallyVisible directly */
87
+ readonly bindToContext: () => void;
86
88
  protected channel: IFluidDataStoreChannel | undefined;
87
89
  private loaded;
88
90
  protected pending: ISequencedDocumentMessage[] | undefined;
@@ -101,7 +103,8 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
101
103
  readonly scope: FluidObject;
102
104
  private readonly writeGCDataAtRoot;
103
105
  protected pkg?: readonly string[];
104
- constructor(props: IFluidDataStoreContextProps, existing: boolean, isLocalDataStore: boolean, makeLocallyVisibleFn: () => void);
106
+ constructor(props: IFluidDataStoreContextProps, existing: boolean, bindState: BindState, // Used to assert for state tracking purposes
107
+ isLocalDataStore: boolean, makeLocallyVisibleFn: () => void);
105
108
  dispose(): void;
106
109
  private rejectDeferredRealize;
107
110
  realize(): Promise<IFluidDataStoreChannel>;
@@ -146,12 +149,18 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
146
149
  private getGCDataInternal;
147
150
  /**
148
151
  * After GC has run, called to notify the data store of routes used in it. These are used for the following:
152
+ *
149
153
  * 1. To identify if this data store is being referenced in the document or not.
154
+ *
150
155
  * 2. To determine if it needs to re-summarize in case used routes changed since last summary.
156
+ *
151
157
  * 3. These are added to the summary generated by the data store.
152
- * 4. To notify child contexts of their used routes. This is done immediately if the data store is loaded. Else,
153
- * it is done when realizing the data store.
158
+ *
159
+ * 4. To notify child contexts of their used routes. This is done immediately if the data store is loaded.
160
+ * Else, it is done when realizing the data store.
161
+ *
154
162
  * 5. To update the timestamp when this data store or any children are marked as unreferenced.
163
+ *
155
164
  * @param usedRoutes - The routes that are used in this data store.
156
165
  * @param gcTimestamp - The time when GC was run that generated these used routes. If any node becomes unreferenced
157
166
  * as part of this GC run, this should be used to update the time when it happens.
@@ -197,13 +206,13 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
197
206
  abstract generateAttachMessage(): IAttachMessage;
198
207
  abstract getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
199
208
  /**
200
- * @deprecated - Sets the datastore as root, for aliasing purposes: #7948
209
+ * @deprecated Sets the datastore as root, for aliasing purposes: #7948
201
210
  * This method should not be used outside of the aliasing context.
202
211
  * It will be removed, as the source of truth for this flag will be the aliasing blob.
203
212
  */
204
213
  setInMemoryRoot(): void;
205
214
  /**
206
- * @deprecated - Renamed to getBaseGCDetails().
215
+ * @deprecated Renamed to `{@link FluidDataStoreContext.getBaseGCDetails}()`.
207
216
  */
208
217
  abstract getInitialGCSummaryDetails(): Promise<IGarbageCollectionSummaryDetails>;
209
218
  abstract getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
@@ -221,7 +230,7 @@ export declare class RemoteFluidDataStoreContext extends FluidDataStoreContext {
221
230
  private readonly initialSnapshotDetailsP;
222
231
  getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
223
232
  /**
224
- * @deprecated - Renamed to getBaseGCDetails.
233
+ * @deprecated Renamed to {@link RemoteFluidDataStoreContext.getBaseGCDetails}.
225
234
  */
226
235
  getInitialGCSummaryDetails(): Promise<IGarbageCollectionSummaryDetails>;
227
236
  getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
@@ -241,7 +250,7 @@ export declare class LocalFluidDataStoreContextBase extends FluidDataStoreContex
241
250
  generateAttachMessage(): IAttachMessage;
242
251
  getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
243
252
  /**
244
- * @deprecated - Renamed to getBaseGCDetails.
253
+ * @deprecated Renamed to {@link LocalFluidDataStoreContextBase.getBaseGCDetails}.
245
254
  */
246
255
  getInitialGCSummaryDetails(): Promise<IGarbageCollectionSummaryDetails>;
247
256
  getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
@@ -1 +1 @@
1
- {"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"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"}
@@ -31,9 +31,11 @@ exports.createAttributesBlob = createAttributesBlob;
31
31
  * Represents the context for the store. This context is passed to the store runtime.
32
32
  */
33
33
  class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
34
- constructor(props, existing, isLocalDataStore, makeLocallyVisibleFn) {
34
+ constructor(props, existing, bindState, // Used to assert for state tracking purposes
35
+ isLocalDataStore, makeLocallyVisibleFn) {
35
36
  super();
36
37
  this.existing = existing;
38
+ this.bindState = bindState;
37
39
  this.isLocalDataStore = isLocalDataStore;
38
40
  this.makeLocallyVisibleFn = makeLocallyVisibleFn;
39
41
  this._disposed = false;
@@ -53,8 +55,11 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
53
55
  this._attachState = this.containerRuntime.attachState !== container_definitions_1.AttachState.Detached && this.existing ?
54
56
  this.containerRuntime.attachState : container_definitions_1.AttachState.Detached;
55
57
  this.bindToContext = () => {
58
+ (0, common_utils_1.assert)(this.bindState === runtime_definitions_1.BindState.NotBound, 0x13b /* "datastore context is already in bound state" */);
59
+ this.bindState = runtime_definitions_1.BindState.Binding;
56
60
  (0, common_utils_1.assert)(this.channel !== undefined, 0x13c /* "undefined channel on datastore context" */);
57
61
  this.makeLocallyVisible();
62
+ this.bindState = runtime_definitions_1.BindState.Bound;
58
63
  };
59
64
  const thisSummarizeInternal = async (fullTree, trackState, telemetryContext) => this.summarizeInternal(fullTree, trackState, telemetryContext);
60
65
  this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC), async () => this.getBaseGCDetails());
@@ -298,12 +303,18 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
298
303
  }
299
304
  /**
300
305
  * After GC has run, called to notify the data store of routes used in it. These are used for the following:
306
+ *
301
307
  * 1. To identify if this data store is being referenced in the document or not.
308
+ *
302
309
  * 2. To determine if it needs to re-summarize in case used routes changed since last summary.
310
+ *
303
311
  * 3. These are added to the summary generated by the data store.
304
- * 4. To notify child contexts of their used routes. This is done immediately if the data store is loaded. Else,
305
- * it is done when realizing the data store.
312
+ *
313
+ * 4. To notify child contexts of their used routes. This is done immediately if the data store is loaded.
314
+ * Else, it is done when realizing the data store.
315
+ *
306
316
  * 5. To update the timestamp when this data store or any children are marked as unreferenced.
317
+ *
307
318
  * @param usedRoutes - The routes that are used in this data store.
308
319
  * @param gcTimestamp - The time when GC was run that generated these used routes. If any node becomes unreferenced
309
320
  * as part of this GC run, this should be used to update the time when it happens.
@@ -448,7 +459,7 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
448
459
  return this._containerRuntime.getAbsoluteUrl(relativeUrl);
449
460
  }
450
461
  /**
451
- * @deprecated - Sets the datastore as root, for aliasing purposes: #7948
462
+ * @deprecated Sets the datastore as root, for aliasing purposes: #7948
452
463
  * This method should not be used outside of the aliasing context.
453
464
  * It will be removed, as the source of truth for this flag will be the aliasing blob.
454
465
  */
@@ -496,7 +507,7 @@ exports.FluidDataStoreContext = FluidDataStoreContext;
496
507
  FluidDataStoreContext.pendingOpsCountThreshold = 1000;
497
508
  class RemoteFluidDataStoreContext extends FluidDataStoreContext {
498
509
  constructor(props) {
499
- super(props, true /* existing */, false /* isLocalDataStore */, () => {
510
+ super(props, true /* existing */, runtime_definitions_1.BindState.Bound, false /* isLocalDataStore */, () => {
500
511
  throw new Error("Already attached");
501
512
  });
502
513
  this.initialSnapshotDetailsP = new common_utils_1.LazyPromise(async () => {
@@ -522,12 +533,9 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
522
533
  // For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
523
534
  const formatVersion = (0, summaryFormat_1.getAttributesFormatVersion)(attributes);
524
535
  if (formatVersion < 1) {
525
- if (attributes.pkg.startsWith("[\"") && attributes.pkg.endsWith("\"]")) {
526
- pkgFromSnapshot = JSON.parse(attributes.pkg);
527
- }
528
- else {
529
- pkgFromSnapshot = [attributes.pkg];
530
- }
536
+ pkgFromSnapshot = attributes.pkg.startsWith("[\"") && attributes.pkg.endsWith("\"]")
537
+ ? JSON.parse(attributes.pkg)
538
+ : [attributes.pkg];
531
539
  }
532
540
  else {
533
541
  pkgFromSnapshot = JSON.parse(attributes.pkg);
@@ -561,7 +569,7 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
561
569
  return this.initialSnapshotDetailsP;
562
570
  }
563
571
  /**
564
- * @deprecated - Renamed to getBaseGCDetails.
572
+ * @deprecated Renamed to {@link RemoteFluidDataStoreContext.getBaseGCDetails}.
565
573
  */
566
574
  async getInitialGCSummaryDetails() {
567
575
  return this.getBaseGCDetails();
@@ -579,7 +587,7 @@ exports.RemoteFluidDataStoreContext = RemoteFluidDataStoreContext;
579
587
  */
580
588
  class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
581
589
  constructor(props) {
582
- super(props, props.snapshotTree !== undefined ? true : false /* existing */, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
590
+ super(props, props.snapshotTree !== undefined ? true : false /* existing */, props.snapshotTree ? runtime_definitions_1.BindState.Bound : runtime_definitions_1.BindState.NotBound, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
583
591
  this.snapshotTree = props.snapshotTree;
584
592
  if (props.isRootDataStore === true) {
585
593
  this.setInMemoryRoot();
@@ -647,7 +655,7 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
647
655
  };
648
656
  }
649
657
  /**
650
- * @deprecated - Renamed to getBaseGCDetails.
658
+ * @deprecated Renamed to {@link LocalFluidDataStoreContextBase.getBaseGCDetails}.
651
659
  */
652
660
  async getInitialGCSummaryDetails() {
653
661
  // Local data store does not have initial summary.
@@ -684,14 +692,14 @@ class LocalDetachedFluidDataStoreContext extends LocalFluidDataStoreContextBase
684
692
  }
685
693
  async attachRuntime(registry, dataStoreChannel) {
686
694
  (0, common_utils_1.assert)(this.detachedRuntimeCreation, 0x154 /* "runtime creation is already attached" */);
695
+ this.detachedRuntimeCreation = false;
687
696
  (0, common_utils_1.assert)(this.channelDeferred === undefined, 0x155 /* "channel deferral is already set" */);
697
+ this.channelDeferred = new common_utils_1.Deferred();
688
698
  const factory = registry.IFluidDataStoreFactory;
689
699
  const entry = await this.factoryFromPackagePath(this.pkg);
690
700
  (0, common_utils_1.assert)(entry.factory === factory, 0x156 /* "Unexpected factory for package path" */);
691
701
  (0, common_utils_1.assert)(this.registry === undefined, 0x157 /* "datastore registry already attached" */);
692
702
  this.registry = entry.registry;
693
- this.detachedRuntimeCreation = false;
694
- this.channelDeferred = new common_utils_1.Deferred();
695
703
  super.bindRuntime(dataStoreChannel);
696
704
  if (await this.isRoot()) {
697
705
  dataStoreChannel.makeVisibleAndAttachGraph();
@@ -1 +1 @@
1
- {"version":3,"file":"dataStoreContext.js","sourceRoot":"","sources":["../src/dataStoreContext.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 { IDisposable, ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n FluidObject,\n IRequest,\n IResponse,\n IFluidHandle,\n} from \"@fluidframework/core-interfaces\";\nimport {\n IAudience,\n IDeltaManager,\n AttachState,\n ILoaderOptions,\n} from \"@fluidframework/container-definitions\";\nimport {\n assert,\n Deferred,\n LazyPromise,\n TypedEventEmitter,\n} from \"@fluidframework/common-utils\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport { readAndParse } from \"@fluidframework/driver-utils\";\nimport { BlobTreeEntry } from \"@fluidframework/protocol-base\";\nimport {\n IClientDetails,\n IDocumentMessage,\n IQuorumClients,\n ISequencedDocumentMessage,\n ISnapshotTree,\n ITreeEntry,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n IContainerRuntime,\n} from \"@fluidframework/container-runtime-definitions\";\nimport {\n channelsTreeName,\n CreateChildSummarizerNodeFn,\n CreateChildSummarizerNodeParam,\n FluidDataStoreRegistryEntry,\n gcBlobKey,\n IAttachMessage,\n IFluidDataStoreChannel,\n IFluidDataStoreContext,\n IFluidDataStoreContextDetached,\n IFluidDataStoreContextEvents,\n IFluidDataStoreRegistry,\n IGarbageCollectionData,\n IGarbageCollectionDetailsBase,\n IGarbageCollectionSummaryDetails,\n IInboundSignalMessage,\n IProvideFluidDataStoreFactory,\n ISummarizeInternalResult,\n ISummarizeResult,\n ISummarizerNodeWithGC,\n SummarizeInternalFn,\n ITelemetryContext,\n} from \"@fluidframework/runtime-definitions\";\nimport { addBlobToSummary, convertSummaryTreeToITree } from \"@fluidframework/runtime-utils\";\nimport {\n ChildLogger,\n LoggingError,\n TelemetryDataTag,\n ThresholdCounter,\n} from \"@fluidframework/telemetry-utils\";\nimport { DataProcessingError } from \"@fluidframework/container-utils\";\n\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport {\n dataStoreAttributesBlobName,\n hasIsolatedChannels,\n wrapSummaryInChannelsTree,\n ReadFluidDataStoreAttributes,\n WriteFluidDataStoreAttributes,\n getAttributesFormatVersion,\n getFluidDataStoreAttributes,\n} from \"./summaryFormat\";\n\nfunction createAttributes(\n pkg: readonly string[],\n isRootDataStore: boolean,\n): WriteFluidDataStoreAttributes {\n const stringifiedPkg = JSON.stringify(pkg);\n return {\n pkg: stringifiedPkg,\n summaryFormatVersion: 2,\n isRootDataStore,\n };\n}\nexport function createAttributesBlob(\n pkg: readonly string[],\n isRootDataStore: boolean,\n): ITreeEntry {\n const attributes = createAttributes(pkg, isRootDataStore);\n return new BlobTreeEntry(dataStoreAttributesBlobName, JSON.stringify(attributes));\n}\n\ninterface ISnapshotDetails {\n pkg: readonly string[];\n isRootDataStore: boolean;\n snapshot?: ISnapshotTree;\n}\n\ninterface FluidDataStoreMessage {\n content: any;\n type: string;\n}\n\n/** Properties necessary for creating a FluidDataStoreContext */\nexport interface IFluidDataStoreContextProps {\n readonly id: string;\n readonly runtime: ContainerRuntime;\n readonly storage: IDocumentStorageService;\n readonly scope: FluidObject;\n readonly createSummarizerNodeFn: CreateChildSummarizerNodeFn;\n readonly writeGCDataAtRoot: boolean;\n readonly pkg?: Readonly<string[]>;\n}\n\n/** Properties necessary for creating a local FluidDataStoreContext */\nexport interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContextProps {\n readonly pkg: Readonly<string[]> | undefined;\n readonly snapshotTree: ISnapshotTree | undefined;\n readonly isRootDataStore: boolean | undefined;\n readonly makeLocallyVisibleFn: () => void;\n /**\n * @deprecated 0.16 Issue #1635, #3631\n */\n readonly createProps?: any;\n}\n\n/** Properties necessary for creating a remote FluidDataStoreContext */\nexport interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {\n readonly snapshotTree: ISnapshotTree | string | undefined;\n readonly getBaseGCDetails: () => Promise<IGarbageCollectionDetailsBase | undefined>;\n}\n\n/**\n * Represents the context for the store. This context is passed to the store runtime.\n */\nexport abstract class FluidDataStoreContext extends TypedEventEmitter<IFluidDataStoreContextEvents> implements\n IFluidDataStoreContext,\n IDisposable {\n public get packagePath(): readonly string[] {\n assert(this.pkg !== undefined, 0x139 /* \"Undefined package path\" */);\n return this.pkg;\n }\n\n public get options(): ILoaderOptions {\n return this._containerRuntime.options;\n }\n\n public get clientId(): string | undefined {\n return this._containerRuntime.clientId;\n }\n\n public get clientDetails(): IClientDetails {\n return this._containerRuntime.clientDetails;\n }\n\n public get logger(): ITelemetryLogger {\n return this._containerRuntime.logger;\n }\n\n public get deltaManager(): IDeltaManager<ISequencedDocumentMessage, IDocumentMessage> {\n return this._containerRuntime.deltaManager;\n }\n\n public get connected(): boolean {\n return this._containerRuntime.connected;\n }\n\n public get IFluidHandleContext() {\n return this._containerRuntime.IFluidHandleContext;\n }\n\n public get containerRuntime(): IContainerRuntime {\n return this._containerRuntime;\n }\n\n public get isLoaded(): boolean {\n return this.loaded;\n }\n\n public get baseSnapshot(): ISnapshotTree | undefined {\n return this._baseSnapshot;\n }\n\n private _disposed = false;\n public get disposed() { return this._disposed; }\n\n public get attachState(): AttachState {\n return this._attachState;\n }\n\n public get IFluidDataStoreRegistry(): IFluidDataStoreRegistry | undefined {\n return this.registry;\n }\n\n /**\n * A datastore is considered as root if it\n * 1. is root in memory - see isInMemoryRoot\n * 2. is root as part of the base snapshot that the datastore loaded from\n * @returns whether a datastore is root\n */\n public async isRoot(): Promise<boolean> {\n return this.isInMemoryRoot() || (await this.getInitialSnapshotDetails()).isRootDataStore;\n }\n\n /**\n * There are 3 states where isInMemoryRoot needs to be true\n * 1. when a datastore becomes aliased. This can happen for both remote and local datastores\n * 2. when a datastore is created locally as root\n * 3. when a datastore is created locally as root and is rehydrated\n * @returns whether a datastore is root in memory\n */\n protected isInMemoryRoot(): boolean {\n return this._isInMemoryRoot;\n }\n\n protected registry: IFluidDataStoreRegistry | undefined;\n\n protected detachedRuntimeCreation = false;\n // back-compat (for tests) - can be removed in 2.0.0-alpha.2.0.0, or earlier if compat tests drop n/n-2 coverage\n // @ts-expect-error - This shouldn't be referenced in the current version, but needs to be here for back-compat\n private readonly bindToContext: () => void;\n protected channel: IFluidDataStoreChannel | undefined;\n private loaded = false;\n protected pending: ISequencedDocumentMessage[] | undefined = [];\n protected channelDeferred: Deferred<IFluidDataStoreChannel> | undefined;\n private _baseSnapshot: ISnapshotTree | undefined;\n protected _attachState: AttachState;\n private _isInMemoryRoot: boolean = false;\n protected readonly summarizerNode: ISummarizerNodeWithGC;\n private readonly subLogger: ITelemetryLogger;\n private readonly thresholdOpsCounter: ThresholdCounter;\n private static readonly pendingOpsCountThreshold = 1000;\n\n // The used state of this node as per the last GC run. This is used to update the used state of the channel\n // if it realizes after GC is run.\n private lastUsedState: { usedRoutes: string[]; gcTimestamp?: number; } | undefined;\n\n public readonly id: string;\n private readonly _containerRuntime: ContainerRuntime;\n public readonly storage: IDocumentStorageService;\n public readonly scope: FluidObject;\n private readonly writeGCDataAtRoot: boolean;\n protected pkg?: readonly string[];\n\n constructor(\n props: IFluidDataStoreContextProps,\n private readonly existing: boolean,\n public readonly isLocalDataStore: boolean,\n private readonly makeLocallyVisibleFn: () => void,\n ) {\n super();\n\n this._containerRuntime = props.runtime;\n this.id = props.id;\n this.storage = props.storage;\n this.scope = props.scope;\n this.writeGCDataAtRoot = props.writeGCDataAtRoot;\n this.pkg = props.pkg;\n\n // URIs use slashes as delimiters. Handles use URIs.\n // Thus having slashes in types almost guarantees trouble down the road!\n assert(!this.id.includes(\"/\"), 0x13a /* Data store ID contains slash */);\n\n this._attachState = this.containerRuntime.attachState !== AttachState.Detached && this.existing ?\n this.containerRuntime.attachState : AttachState.Detached;\n\n this.bindToContext = () => {\n assert(this.channel !== undefined, 0x13c /* \"undefined channel on datastore context\" */);\n this.makeLocallyVisible();\n };\n\n const thisSummarizeInternal =\n async (fullTree: boolean, trackState: boolean, telemetryContext?: ITelemetryContext) =>\n this.summarizeInternal(fullTree, trackState, telemetryContext);\n\n this.summarizerNode = props.createSummarizerNodeFn(\n thisSummarizeInternal,\n async (fullGC?: boolean) => this.getGCDataInternal(fullGC),\n async () => this.getBaseGCDetails(),\n );\n\n this.subLogger = ChildLogger.create(this.logger, \"FluidDataStoreContext\");\n this.thresholdOpsCounter = new ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.subLogger);\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n\n // Dispose any pending runtime after it gets fulfilled\n // Errors are logged where this.channelDeferred is consumed/generated (realizeCore(), bindRuntime())\n if (this.channelDeferred) {\n this.channelDeferred.promise.then((runtime) => {\n runtime.dispose();\n }).catch((error) => {});\n }\n }\n\n private rejectDeferredRealize(reason: string, packageName?: string): never {\n throw new LoggingError(reason, { packageName: { value: packageName, tag: TelemetryDataTag.CodeArtifact } });\n }\n\n public async realize(): Promise<IFluidDataStoreChannel> {\n assert(!this.detachedRuntimeCreation, 0x13d /* \"Detached runtime creation on realize()\" */);\n if (!this.channelDeferred) {\n this.channelDeferred = new Deferred<IFluidDataStoreChannel>();\n this.realizeCore(this.existing).catch((error) => {\n const errorWrapped = DataProcessingError.wrapIfUnrecognized(error, \"realizeFluidDataStoreContext\");\n errorWrapped.addTelemetryProperties({\n fluidDataStoreId: {\n value: this.id,\n tag: TelemetryDataTag.CodeArtifact,\n },\n });\n this.channelDeferred?.reject(errorWrapped);\n this.logger.sendErrorEvent({ eventName: \"RealizeError\" }, errorWrapped);\n });\n }\n return this.channelDeferred.promise;\n }\n\n protected async factoryFromPackagePath(packages?: readonly string[]) {\n assert(this.pkg === packages, 0x13e /* \"Unexpected package path\" */);\n if (packages === undefined) {\n this.rejectDeferredRealize(\"packages is undefined\");\n }\n\n let entry: FluidDataStoreRegistryEntry | undefined;\n let registry: IFluidDataStoreRegistry | undefined = this._containerRuntime.IFluidDataStoreRegistry;\n let lastPkg: string | undefined;\n for (const pkg of packages) {\n if (!registry) {\n this.rejectDeferredRealize(\"No registry for package\", lastPkg);\n }\n lastPkg = pkg;\n entry = await registry.get(pkg);\n if (!entry) {\n this.rejectDeferredRealize(\"Registry does not contain entry for the package\", pkg);\n }\n registry = entry.IFluidDataStoreRegistry;\n }\n const factory = entry?.IFluidDataStoreFactory;\n if (factory === undefined) {\n this.rejectDeferredRealize(\"Can't find factory for package\", lastPkg);\n }\n\n return { factory, registry };\n }\n\n private async realizeCore(existing: boolean): Promise<void> {\n const details = await this.getInitialSnapshotDetails();\n // Base snapshot is the baseline where pending ops are applied to.\n // It is important that this be in sync with the pending ops, and also\n // that it is set here, before bindRuntime is called.\n this._baseSnapshot = details.snapshot;\n const packages = details.pkg;\n\n const { factory, registry } = await this.factoryFromPackagePath(packages);\n\n assert(this.registry === undefined, 0x13f /* \"datastore context registry is already set\" */);\n this.registry = registry;\n\n const channel = await factory.instantiateDataStore(this, existing);\n assert(channel !== undefined, 0x140 /* \"undefined channel on datastore context\" */);\n this.bindRuntime(channel);\n }\n\n /**\n * Notifies this object about changes in the connection state.\n * @param value - New connection state.\n * @param clientId - ID of the client. Its old ID when in disconnected state and\n * its new client ID when we are connecting or connected.\n */\n public setConnectionState(connected: boolean, clientId?: string) {\n this.verifyNotClosed();\n\n // Connection events are ignored if the store is not yet loaded\n if (!this.loaded) {\n return;\n }\n\n assert(this.connected === connected, 0x141 /* \"Unexpected connected state\" */);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.channel!.setConnectionState(connected, clientId);\n }\n\n public process(messageArg: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown): void {\n this.verifyNotClosed();\n\n const innerContents = messageArg.contents as FluidDataStoreMessage;\n const message = {\n ...messageArg,\n type: innerContents.type,\n contents: innerContents.content,\n };\n\n this.summarizerNode.recordChange(message);\n\n if (this.loaded) {\n return this.channel?.process(message, local, localOpMetadata);\n } else {\n assert(!local, 0x142 /* \"local store channel is not loaded\" */);\n assert(this.pending !== undefined, 0x23d /* \"pending is undefined\" */);\n this.pending.push(message);\n this.thresholdOpsCounter.sendIfMultiple(\"StorePendingOps\", this.pending.length);\n }\n }\n\n public processSignal(message: IInboundSignalMessage, local: boolean): void {\n this.verifyNotClosed();\n\n // Signals are ignored if the store is not yet loaded\n if (!this.loaded) {\n return;\n }\n\n this.channel?.processSignal(message, local);\n }\n\n public getQuorum(): IQuorumClients {\n return this._containerRuntime.getQuorum();\n }\n\n public getAudience(): IAudience {\n return this._containerRuntime.getAudience();\n }\n\n /**\n * Returns a summary at the current sequence number.\n * @param fullTree - true to bypass optimizations and force a full summary tree\n * @param trackState - This tells whether we should track state from this summary.\n * @param telemetryContext - summary data passed through the layers for telemetry purposes\n */\n public async summarize(\n fullTree: boolean = false,\n trackState: boolean = true,\n telemetryContext?: ITelemetryContext,\n ): Promise<ISummarizeResult> {\n return this.summarizerNode.summarize(fullTree, trackState, telemetryContext);\n }\n\n private async summarizeInternal(\n fullTree: boolean,\n trackState: boolean,\n telemetryContext?: ITelemetryContext,\n ): Promise<ISummarizeInternalResult> {\n await this.realize();\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const summarizeResult = await this.channel!.summarize(fullTree, trackState, telemetryContext);\n\n // Wrap dds summaries in .channels subtree.\n wrapSummaryInChannelsTree(summarizeResult);\n const pathPartsForChildren = [channelsTreeName];\n\n // Add data store's attributes to the summary.\n const { pkg } = await this.getInitialSnapshotDetails();\n const isRoot = await this.isRoot();\n const attributes = createAttributes(pkg, isRoot);\n addBlobToSummary(summarizeResult, dataStoreAttributesBlobName, JSON.stringify(attributes));\n\n // Add GC data to the summary if it's not written at the root.\n if (!this.writeGCDataAtRoot) {\n addBlobToSummary(summarizeResult, gcBlobKey, JSON.stringify(this.summarizerNode.getGCSummaryDetails()));\n }\n\n // If we are not referenced, mark the summary tree as unreferenced. Also, update unreferenced blob\n // size in the summary stats with the blobs size of this data store.\n if (!this.summarizerNode.isReferenced()) {\n summarizeResult.summary.unreferenced = true;\n summarizeResult.stats.unreferencedBlobSize = summarizeResult.stats.totalBlobSize;\n }\n\n return {\n ...summarizeResult,\n id: this.id,\n pathPartsForChildren,\n };\n }\n\n /**\n * Returns the data used for garbage collection. This includes a list of GC nodes that represent this data store\n * including any of its child channel contexts. Each node has a set of outbound routes to other GC nodes in the\n * document.\n * If there is no new data in this data store since the last summary, previous GC data is used.\n * If there is new data, the GC data is generated again (by calling getGCDataInternal).\n * @param fullGC - true to bypass optimizations and force full generation of GC data.\n */\n public async getGCData(fullGC: boolean = false): Promise<IGarbageCollectionData> {\n return this.summarizerNode.getGCData(fullGC);\n }\n\n /**\n * Generates data used for garbage collection. This is called when there is new data since last summary. It\n * realizes the data store and calls into each channel context to get its GC data.\n * @param fullGC - true to bypass optimizations and force full generation of GC data.\n */\n private async getGCDataInternal(fullGC: boolean = false): Promise<IGarbageCollectionData> {\n await this.realize();\n assert(this.channel !== undefined, 0x143 /* \"Channel should not be undefined when running GC\" */);\n\n return this.channel.getGCData(fullGC);\n }\n\n /**\n * After GC has run, called to notify the data store of routes used in it. These are used for the following:\n * 1. To identify if this data store is being referenced in the document or not.\n * 2. To determine if it needs to re-summarize in case used routes changed since last summary.\n * 3. These are added to the summary generated by the data store.\n * 4. To notify child contexts of their used routes. This is done immediately if the data store is loaded. Else,\n * it is done when realizing the data store.\n * 5. To update the timestamp when this data store or any children are marked as unreferenced.\n * @param usedRoutes - The routes that are used in this data store.\n * @param gcTimestamp - The time when GC was run that generated these used routes. If any node becomes unreferenced\n * as part of this GC run, this should be used to update the time when it happens.\n */\n public updateUsedRoutes(usedRoutes: string[], gcTimestamp?: number) {\n // Update the used routes in this data store's summarizer node.\n this.summarizerNode.updateUsedRoutes(usedRoutes, gcTimestamp);\n\n /**\n * If the data store has not been realized yet, we need this used state to update the used state of the channel\n * when it realizes. It's safe to keep only the last used state because if something changes because of this GC\n * run, the data store will be immediately realized as part of the summary that follows GC. For example, if a\n * child's reference state changes, the gcTimestamp has to be used to update its unreferencedTimestamp. Since\n * it will result in a change in this data store's used routes, it will be realized to regenerate its summary.\n */\n this.lastUsedState = { usedRoutes, gcTimestamp };\n\n // If we are loaded, call the channel so it can update the used routes of the child contexts.\n // If we are not loaded, we will update this when we are realized.\n if (this.loaded) {\n this.updateChannelUsedRoutes();\n }\n }\n\n /**\n * Called when a new outbound reference is added to another node. This is used by garbage collection to identify\n * all references added in the system.\n * @param srcHandle - The handle of the node that added the reference.\n * @param outboundHandle - The handle of the outbound node that is referenced.\n */\n public addedGCOutboundReference(srcHandle: IFluidHandle, outboundHandle: IFluidHandle) {\n this._containerRuntime.addedGCOutboundReference(srcHandle, outboundHandle);\n }\n\n /**\n * Updates the used routes of the channel and its child contexts. The channel must be loaded before calling this.\n * It is called in these two scenarios:\n * 1. When the used routes of the data store is updated and the data store is loaded.\n * 2. When the data store is realized. This updates the channel's used routes as per last GC run.\n */\n private updateChannelUsedRoutes() {\n assert(this.loaded, 0x144 /* \"Channel should be loaded when updating used routes\" */);\n assert(this.channel !== undefined, 0x145 /* \"Channel should be present when data store is loaded\" */);\n\n // If there is no lastUsedState, GC has not run up until this point.\n if (this.lastUsedState === undefined) {\n return;\n }\n\n // Remove the route to this data store, if it exists.\n const usedChannelRoutes = this.lastUsedState.usedRoutes.filter(\n (id: string) => { return id !== \"/\" && id !== \"\"; },\n );\n this.channel.updateUsedRoutes(usedChannelRoutes, this.lastUsedState.gcTimestamp);\n }\n\n /**\n * @deprecated 0.18.Should call request on the runtime directly\n */\n public async request(request: IRequest): Promise<IResponse> {\n const runtime = await this.realize();\n return runtime.request(request);\n }\n\n public submitMessage(type: string, content: any, localOpMetadata: unknown): void {\n this.verifyNotClosed();\n assert(!!this.channel, 0x146 /* \"Channel must exist when submitting message\" */);\n const fluidDataStoreContent: FluidDataStoreMessage = {\n content,\n type,\n };\n this._containerRuntime.submitDataStoreOp(\n this.id,\n fluidDataStoreContent,\n localOpMetadata);\n }\n\n /**\n * This is called from a SharedSummaryBlock that does not generate ops but only wants to be part of the summary.\n * It indicates that there is data in the object that needs to be summarized.\n * We will update the latestSequenceNumber of the summary tracker of this\n * store and of the object's channel.\n *\n * @param address - The address of the channel that is dirty.\n *\n */\n public setChannelDirty(address: string): void {\n this.verifyNotClosed();\n\n // Get the latest sequence number.\n const latestSequenceNumber = this.deltaManager.lastSequenceNumber;\n\n this.summarizerNode.invalidate(latestSequenceNumber);\n\n const channelSummarizerNode = this.summarizerNode.getChild(address);\n\n if (channelSummarizerNode) {\n channelSummarizerNode.invalidate(latestSequenceNumber); // TODO: lazy load problem?\n }\n }\n\n public submitSignal(type: string, content: any) {\n this.verifyNotClosed();\n assert(!!this.channel, 0x147 /* \"Channel must exist on submitting signal\" */);\n return this._containerRuntime.submitDataStoreSignal(this.id, type, content);\n }\n\n /**\n * This is called by the data store channel when it becomes locally visible indicating that it is ready to become\n * globally visible now.\n */\n public makeLocallyVisible() {\n assert(this.channel !== undefined, 0x2cf /* \"undefined channel on datastore context\" */);\n this.makeLocallyVisibleFn();\n }\n\n protected bindRuntime(channel: IFluidDataStoreChannel) {\n if (this.channel) {\n throw new Error(\"Runtime already bound\");\n }\n\n try {\n assert(!this.detachedRuntimeCreation, 0x148 /* \"Detached runtime creation on runtime bind\" */);\n assert(this.channelDeferred !== undefined, 0x149 /* \"Undefined channel deferral\" */);\n assert(this.pkg !== undefined, 0x14a /* \"Undefined package path\" */);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const pending = this.pending!;\n\n // Apply all pending ops\n for (const op of pending) {\n channel.process(op, false, undefined /* localOpMetadata */);\n }\n\n this.thresholdOpsCounter.send(\"ProcessPendingOps\", pending.length);\n this.pending = undefined;\n\n // And now mark the runtime active\n this.loaded = true;\n this.channel = channel;\n\n // Freeze the package path to ensure that someone doesn't modify it when it is\n // returned in packagePath().\n Object.freeze(this.pkg);\n\n /**\n * Update the used routes of the channel. If GC has run before this data store was realized, we will have\n * the used routes saved. So, this will ensure that all the child contexts have up-to-date used routes as\n * per the last time GC was run.\n * Also, this data store may have been realized during summarize. In that case, the child contexts need to\n * have their used routes updated to determine if its needs to summarize again and to add it to the summary.\n */\n this.updateChannelUsedRoutes();\n\n // And notify the pending promise it is now available\n this.channelDeferred.resolve(this.channel);\n } catch (error) {\n this.channelDeferred?.reject(error);\n this.logger.sendErrorEvent(\n { eventName: \"BindRuntimeError\", fluidDataStoreId: {\n value: this.id,\n tag: TelemetryDataTag.CodeArtifact,\n } },\n error);\n }\n }\n\n public async getAbsoluteUrl(relativeUrl: string): Promise<string | undefined> {\n if (this.attachState !== AttachState.Attached) {\n return undefined;\n }\n return this._containerRuntime.getAbsoluteUrl(relativeUrl);\n }\n\n public abstract generateAttachMessage(): IAttachMessage;\n\n public abstract getInitialSnapshotDetails(): Promise<ISnapshotDetails>;\n\n /**\n * @deprecated - Sets the datastore as root, for aliasing purposes: #7948\n * This method should not be used outside of the aliasing context.\n * It will be removed, as the source of truth for this flag will be the aliasing blob.\n */\n public setInMemoryRoot(): void {\n this._isInMemoryRoot = true;\n }\n\n /**\n * @deprecated - Renamed to getBaseGCDetails().\n */\n public abstract getInitialGCSummaryDetails(): Promise<IGarbageCollectionSummaryDetails>;\n\n public abstract getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;\n\n public reSubmit(contents: any, localOpMetadata: unknown) {\n assert(!!this.channel, 0x14b /* \"Channel must exist when resubmitting ops\" */);\n const innerContents = contents as FluidDataStoreMessage;\n this.channel.reSubmit(innerContents.type, innerContents.content, localOpMetadata);\n }\n\n public rollback(contents: any, localOpMetadata: unknown) {\n if (!this.channel) {\n throw new Error(\"Channel must exist when rolling back ops\");\n }\n if (!this.channel.rollback) {\n throw new Error(\"Channel doesn't support rollback\");\n }\n const innerContents = contents as FluidDataStoreMessage;\n this.channel.rollback(innerContents.type, innerContents.content, localOpMetadata);\n }\n\n public async applyStashedOp(contents: any): Promise<unknown> {\n if (!this.channel) {\n await this.realize();\n }\n assert(!!this.channel, 0x14c /* \"Channel must exist when rebasing ops\" */);\n const innerContents = contents as FluidDataStoreMessage;\n return this.channel.applyStashedOp(innerContents.content);\n }\n\n private verifyNotClosed() {\n if (this._disposed) {\n throw new Error(\"Context is closed\");\n }\n }\n\n public getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam) {\n return (\n summarizeInternal: SummarizeInternalFn,\n getGCDataFn: (fullGC?: boolean) => Promise<IGarbageCollectionData>,\n getBaseGCDetailsFn: () => Promise<IGarbageCollectionDetailsBase>,\n ) => this.summarizerNode.createChild(\n summarizeInternal,\n id,\n createParam,\n // DDS will not create failure summaries\n { throwOnFailure: true },\n getGCDataFn,\n getBaseGCDetailsFn,\n );\n }\n\n public async uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>> {\n return this.containerRuntime.uploadBlob(blob);\n }\n}\n\nexport class RemoteFluidDataStoreContext extends FluidDataStoreContext {\n private readonly initSnapshotValue: ISnapshotTree | string | undefined;\n private readonly baseGCDetailsP: Promise<IGarbageCollectionDetailsBase>;\n\n constructor(props: IRemoteFluidDataStoreContextProps) {\n super(\n props,\n true /* existing */,\n false /* isLocalDataStore */,\n () => {\n throw new Error(\"Already attached\");\n },\n );\n\n this.initSnapshotValue = props.snapshotTree;\n this.baseGCDetailsP = new LazyPromise<IGarbageCollectionDetailsBase>(async () => {\n return (await props.getBaseGCDetails()) ?? {};\n });\n }\n\n private readonly initialSnapshotDetailsP = new LazyPromise<ISnapshotDetails>(async () => {\n let tree: ISnapshotTree | undefined;\n let isRootDataStore = true;\n\n if (typeof this.initSnapshotValue === \"string\") {\n const commit = (await this.storage.getVersions(this.initSnapshotValue, 1))[0];\n tree = await this.storage.getSnapshotTree(commit) ?? undefined;\n } else {\n tree = this.initSnapshotValue;\n }\n\n const localReadAndParse = async <T>(id: string) => readAndParse<T>(this.storage, id);\n if (tree) {\n tree = await this.summarizerNode.loadBaseSummary(tree, localReadAndParse);\n }\n\n if (!!tree && tree.blobs[dataStoreAttributesBlobName] !== undefined) {\n // Need to get through snapshot and use that to populate extraBlobs\n const attributes =\n await localReadAndParse<ReadFluidDataStoreAttributes>(tree.blobs[dataStoreAttributesBlobName]);\n\n let pkgFromSnapshot: string[];\n // Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.\n // For snapshotFormatVersion = \"0.1\" (1) or above, pkg is jsonified, otherwise it is just a string.\n const formatVersion = getAttributesFormatVersion(attributes);\n if (formatVersion < 1) {\n if (attributes.pkg.startsWith(\"[\\\"\") && attributes.pkg.endsWith(\"\\\"]\")) {\n pkgFromSnapshot = JSON.parse(attributes.pkg) as string[];\n } else {\n pkgFromSnapshot = [attributes.pkg];\n }\n } else {\n pkgFromSnapshot = JSON.parse(attributes.pkg) as string[];\n }\n this.pkg = pkgFromSnapshot;\n\n /**\n * If there is no isRootDataStore in the attributes blob, set it to true. This will ensure that\n * data stores in older documents are not garbage collected incorrectly. This may lead to additional\n * roots in the document but they won't break.\n */\n isRootDataStore = attributes.isRootDataStore ?? true;\n\n if (hasIsolatedChannels(attributes)) {\n tree = tree.trees[channelsTreeName];\n assert(tree !== undefined,\n 0x1fe /* \"isolated channels subtree should exist in remote datastore snapshot\" */);\n }\n }\n\n return {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n pkg: this.pkg!,\n isRootDataStore,\n snapshot: tree,\n };\n });\n\n public async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n return this.initialSnapshotDetailsP;\n }\n\n /**\n * @deprecated - Renamed to getBaseGCDetails.\n */\n public async getInitialGCSummaryDetails(): Promise<IGarbageCollectionSummaryDetails> {\n return this.getBaseGCDetails();\n }\n\n public async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {\n return this.baseGCDetailsP;\n }\n\n public generateAttachMessage(): IAttachMessage {\n throw new Error(\"Cannot attach remote store\");\n }\n}\n\n/**\n * Base class for detached & attached context classes\n */\nexport class LocalFluidDataStoreContextBase extends FluidDataStoreContext {\n private readonly snapshotTree: ISnapshotTree | undefined;\n /**\n * @deprecated 0.16 Issue #1635, #3631\n */\n public readonly createProps?: any;\n\n constructor(props: ILocalFluidDataStoreContextProps) {\n super(\n props,\n props.snapshotTree !== undefined ? true : false /* existing */,\n true /* isLocalDataStore */,\n props.makeLocallyVisibleFn,\n );\n\n this.snapshotTree = props.snapshotTree;\n if (props.isRootDataStore === true) {\n this.setInMemoryRoot();\n }\n this.createProps = props.createProps;\n this.attachListeners();\n }\n\n private attachListeners(): void {\n this.once(\"attaching\", () => {\n assert(this.attachState === AttachState.Detached, 0x14d /* \"Should move from detached to attaching\" */);\n this._attachState = AttachState.Attaching;\n });\n this.once(\"attached\", () => {\n assert(this.attachState === AttachState.Attaching, 0x14e /* \"Should move from attaching to attached\" */);\n this._attachState = AttachState.Attached;\n });\n }\n\n public generateAttachMessage(): IAttachMessage {\n assert(this.channel !== undefined, 0x14f /* \"There should be a channel when generating attach message\" */);\n assert(this.pkg !== undefined, 0x150 /* \"pkg should be available in local data store context\" */);\n\n const summarizeResult = this.channel.getAttachSummary();\n\n // Wrap dds summaries in .channels subtree.\n wrapSummaryInChannelsTree(summarizeResult);\n\n // Add data store's attributes to the summary.\n const attributes = createAttributes(\n this.pkg,\n this.isInMemoryRoot(),\n );\n addBlobToSummary(summarizeResult, dataStoreAttributesBlobName, JSON.stringify(attributes));\n\n // Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.\n const snapshot = convertSummaryTreeToITree(summarizeResult.summary);\n\n const message: IAttachMessage = {\n id: this.id,\n snapshot,\n type: this.pkg[this.pkg.length - 1],\n };\n\n return message;\n }\n\n public async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n let snapshot = this.snapshotTree;\n let attributes: ReadFluidDataStoreAttributes;\n let isRootDataStore = false;\n if (snapshot !== undefined) {\n // Get the dataStore attributes.\n // Note: storage can be undefined in special case while detached.\n attributes = await getFluidDataStoreAttributes(this.storage, snapshot);\n if (hasIsolatedChannels(attributes)) {\n snapshot = snapshot.trees[channelsTreeName];\n assert(snapshot !== undefined,\n 0x1ff /* \"isolated channels subtree should exist in local datastore snapshot\" */);\n }\n if (this.pkg === undefined) {\n this.pkg = JSON.parse(attributes.pkg) as string[];\n // If there is no isRootDataStore in the attributes blob, set it to true. This ensures that data\n // stores in older documents are not garbage collected incorrectly. This may lead to additional\n // roots in the document but they won't break.\n if (attributes.isRootDataStore ?? true) {\n isRootDataStore = true;\n this.setInMemoryRoot();\n }\n }\n }\n assert(this.pkg !== undefined, 0x152 /* \"pkg should be available in local data store\" */);\n\n return {\n pkg: this.pkg,\n isRootDataStore,\n snapshot,\n };\n }\n\n /**\n * @deprecated - Renamed to getBaseGCDetails.\n */\n public async getInitialGCSummaryDetails(): Promise<IGarbageCollectionSummaryDetails> {\n // Local data store does not have initial summary.\n return {};\n }\n\n public async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {\n // Local data store does not have initial summary.\n return {};\n }\n}\n\n/**\n * context implementation for \"attached\" data store runtime.\n * Various workflows (snapshot creation, requests) result in .realize() being called\n * on context, resulting in instantiation and attachment of runtime.\n * Runtime is created using data store factory that is associated with this context.\n */\nexport class LocalFluidDataStoreContext extends LocalFluidDataStoreContextBase {\n constructor(props: ILocalFluidDataStoreContextProps) {\n super(props);\n }\n}\n\n/**\n * Detached context. Data Store runtime will be attached to it by attachRuntime() call\n * Before attachment happens, this context is not associated with particular type of runtime\n * or factory, i.e. it's package path is undefined.\n * Attachment process provides all missing parts - package path, data store runtime, and data store factory\n */\nexport class LocalDetachedFluidDataStoreContext\n extends LocalFluidDataStoreContextBase\n implements IFluidDataStoreContextDetached {\n constructor(props: ILocalFluidDataStoreContextProps) {\n super(props);\n this.detachedRuntimeCreation = true;\n }\n\n public async attachRuntime(\n registry: IProvideFluidDataStoreFactory,\n dataStoreChannel: IFluidDataStoreChannel) {\n assert(this.detachedRuntimeCreation, 0x154 /* \"runtime creation is already attached\" */);\n assert(this.channelDeferred === undefined, 0x155 /* \"channel deferral is already set\" */);\n\n const factory = registry.IFluidDataStoreFactory;\n\n const entry = await this.factoryFromPackagePath(this.pkg);\n assert(entry.factory === factory, 0x156 /* \"Unexpected factory for package path\" */);\n\n assert(this.registry === undefined, 0x157 /* \"datastore registry already attached\" */);\n this.registry = entry.registry;\n\n this.detachedRuntimeCreation = false;\n this.channelDeferred = new Deferred<IFluidDataStoreChannel>();\n\n super.bindRuntime(dataStoreChannel);\n\n if (await this.isRoot()) {\n dataStoreChannel.makeVisibleAndAttachGraph();\n }\n }\n\n public async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n if (this.detachedRuntimeCreation) {\n throw new Error(\"Detached Fluid Data Store context can't be realized! Please attach runtime first!\");\n }\n return super.getInitialSnapshotDetails();\n }\n}\n"]}
1
+ {"version":3,"file":"dataStoreContext.js","sourceRoot":"","sources":["../src/dataStoreContext.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 { IDisposable, ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n FluidObject,\n IRequest,\n IResponse,\n IFluidHandle,\n} from \"@fluidframework/core-interfaces\";\nimport {\n IAudience,\n IDeltaManager,\n AttachState,\n ILoaderOptions,\n} from \"@fluidframework/container-definitions\";\nimport {\n assert,\n Deferred,\n LazyPromise,\n TypedEventEmitter,\n} from \"@fluidframework/common-utils\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport { readAndParse } from \"@fluidframework/driver-utils\";\nimport { BlobTreeEntry } from \"@fluidframework/protocol-base\";\nimport {\n IClientDetails,\n IDocumentMessage,\n IQuorumClients,\n ISequencedDocumentMessage,\n ISnapshotTree,\n ITreeEntry,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n IContainerRuntime,\n} from \"@fluidframework/container-runtime-definitions\";\nimport {\n BindState,\n channelsTreeName,\n CreateChildSummarizerNodeFn,\n CreateChildSummarizerNodeParam,\n FluidDataStoreRegistryEntry,\n gcBlobKey,\n IAttachMessage,\n IFluidDataStoreChannel,\n IFluidDataStoreContext,\n IFluidDataStoreContextDetached,\n IFluidDataStoreContextEvents,\n IFluidDataStoreRegistry,\n IGarbageCollectionData,\n IGarbageCollectionDetailsBase,\n IGarbageCollectionSummaryDetails,\n IInboundSignalMessage,\n IProvideFluidDataStoreFactory,\n ISummarizeInternalResult,\n ISummarizeResult,\n ISummarizerNodeWithGC,\n SummarizeInternalFn,\n ITelemetryContext,\n} from \"@fluidframework/runtime-definitions\";\nimport { addBlobToSummary, convertSummaryTreeToITree } from \"@fluidframework/runtime-utils\";\nimport {\n ChildLogger,\n LoggingError,\n TelemetryDataTag,\n ThresholdCounter,\n} from \"@fluidframework/telemetry-utils\";\nimport { DataProcessingError } from \"@fluidframework/container-utils\";\n\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport {\n dataStoreAttributesBlobName,\n hasIsolatedChannels,\n wrapSummaryInChannelsTree,\n ReadFluidDataStoreAttributes,\n WriteFluidDataStoreAttributes,\n getAttributesFormatVersion,\n getFluidDataStoreAttributes,\n} from \"./summaryFormat\";\n\nfunction createAttributes(\n pkg: readonly string[],\n isRootDataStore: boolean,\n): WriteFluidDataStoreAttributes {\n const stringifiedPkg = JSON.stringify(pkg);\n return {\n pkg: stringifiedPkg,\n summaryFormatVersion: 2,\n isRootDataStore,\n };\n}\nexport function createAttributesBlob(\n pkg: readonly string[],\n isRootDataStore: boolean,\n): ITreeEntry {\n const attributes = createAttributes(pkg, isRootDataStore);\n return new BlobTreeEntry(dataStoreAttributesBlobName, JSON.stringify(attributes));\n}\n\ninterface ISnapshotDetails {\n pkg: readonly string[];\n isRootDataStore: boolean;\n snapshot?: ISnapshotTree;\n}\n\ninterface FluidDataStoreMessage {\n content: any;\n type: string;\n}\n\n/** Properties necessary for creating a FluidDataStoreContext */\nexport interface IFluidDataStoreContextProps {\n readonly id: string;\n readonly runtime: ContainerRuntime;\n readonly storage: IDocumentStorageService;\n readonly scope: FluidObject;\n readonly createSummarizerNodeFn: CreateChildSummarizerNodeFn;\n readonly writeGCDataAtRoot: boolean;\n readonly pkg?: Readonly<string[]>;\n}\n\n/** Properties necessary for creating a local FluidDataStoreContext */\nexport interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContextProps {\n readonly pkg: Readonly<string[]> | undefined;\n readonly snapshotTree: ISnapshotTree | undefined;\n readonly isRootDataStore: boolean | undefined;\n readonly makeLocallyVisibleFn: () => void;\n /**\n * @deprecated 0.16 Issue #1635, #3631\n */\n readonly createProps?: any;\n}\n\n/** Properties necessary for creating a remote FluidDataStoreContext */\nexport interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {\n readonly snapshotTree: ISnapshotTree | string | undefined;\n readonly getBaseGCDetails: () => Promise<IGarbageCollectionDetailsBase | undefined>;\n}\n\n/**\n * Represents the context for the store. This context is passed to the store runtime.\n */\nexport abstract class FluidDataStoreContext extends TypedEventEmitter<IFluidDataStoreContextEvents> implements\n IFluidDataStoreContext,\n IDisposable {\n public get packagePath(): readonly string[] {\n assert(this.pkg !== undefined, 0x139 /* \"Undefined package path\" */);\n return this.pkg;\n }\n\n public get options(): ILoaderOptions {\n return this._containerRuntime.options;\n }\n\n public get clientId(): string | undefined {\n return this._containerRuntime.clientId;\n }\n\n public get clientDetails(): IClientDetails {\n return this._containerRuntime.clientDetails;\n }\n\n public get logger(): ITelemetryLogger {\n return this._containerRuntime.logger;\n }\n\n public get deltaManager(): IDeltaManager<ISequencedDocumentMessage, IDocumentMessage> {\n return this._containerRuntime.deltaManager;\n }\n\n public get connected(): boolean {\n return this._containerRuntime.connected;\n }\n\n public get IFluidHandleContext() {\n return this._containerRuntime.IFluidHandleContext;\n }\n\n public get containerRuntime(): IContainerRuntime {\n return this._containerRuntime;\n }\n\n public get isLoaded(): boolean {\n return this.loaded;\n }\n\n public get baseSnapshot(): ISnapshotTree | undefined {\n return this._baseSnapshot;\n }\n\n private _disposed = false;\n public get disposed() { return this._disposed; }\n\n public get attachState(): AttachState {\n return this._attachState;\n }\n\n public get IFluidDataStoreRegistry(): IFluidDataStoreRegistry | undefined {\n return this.registry;\n }\n\n /**\n * A datastore is considered as root if it\n * 1. is root in memory - see isInMemoryRoot\n * 2. is root as part of the base snapshot that the datastore loaded from\n * @returns whether a datastore is root\n */\n public async isRoot(): Promise<boolean> {\n return this.isInMemoryRoot() || (await this.getInitialSnapshotDetails()).isRootDataStore;\n }\n\n /**\n * There are 3 states where isInMemoryRoot needs to be true\n * 1. when a datastore becomes aliased. This can happen for both remote and local datastores\n * 2. when a datastore is created locally as root\n * 3. when a datastore is created locally as root and is rehydrated\n * @returns whether a datastore is root in memory\n */\n protected isInMemoryRoot(): boolean {\n return this._isInMemoryRoot;\n }\n\n protected registry: IFluidDataStoreRegistry | undefined;\n\n protected detachedRuntimeCreation = false;\n /** @deprecated - To be replaced by calling makeLocallyVisible directly */\n public readonly bindToContext: () => void;\n protected channel: IFluidDataStoreChannel | undefined;\n private loaded = false;\n protected pending: ISequencedDocumentMessage[] | undefined = [];\n protected channelDeferred: Deferred<IFluidDataStoreChannel> | undefined;\n private _baseSnapshot: ISnapshotTree | undefined;\n protected _attachState: AttachState;\n private _isInMemoryRoot: boolean = false;\n protected readonly summarizerNode: ISummarizerNodeWithGC;\n private readonly subLogger: ITelemetryLogger;\n private readonly thresholdOpsCounter: ThresholdCounter;\n private static readonly pendingOpsCountThreshold = 1000;\n\n // The used state of this node as per the last GC run. This is used to update the used state of the channel\n // if it realizes after GC is run.\n private lastUsedState: { usedRoutes: string[]; gcTimestamp?: number; } | undefined;\n\n public readonly id: string;\n private readonly _containerRuntime: ContainerRuntime;\n public readonly storage: IDocumentStorageService;\n public readonly scope: FluidObject;\n private readonly writeGCDataAtRoot: boolean;\n protected pkg?: readonly string[];\n\n constructor(\n props: IFluidDataStoreContextProps,\n private readonly existing: boolean,\n private bindState: BindState, // Used to assert for state tracking purposes\n public readonly isLocalDataStore: boolean,\n private readonly makeLocallyVisibleFn: () => void,\n ) {\n super();\n\n this._containerRuntime = props.runtime;\n this.id = props.id;\n this.storage = props.storage;\n this.scope = props.scope;\n this.writeGCDataAtRoot = props.writeGCDataAtRoot;\n this.pkg = props.pkg;\n\n // URIs use slashes as delimiters. Handles use URIs.\n // Thus having slashes in types almost guarantees trouble down the road!\n assert(!this.id.includes(\"/\"), 0x13a /* Data store ID contains slash */);\n\n this._attachState = this.containerRuntime.attachState !== AttachState.Detached && this.existing ?\n this.containerRuntime.attachState : AttachState.Detached;\n\n this.bindToContext = () => {\n assert(this.bindState === BindState.NotBound, 0x13b /* \"datastore context is already in bound state\" */);\n this.bindState = BindState.Binding;\n assert(this.channel !== undefined, 0x13c /* \"undefined channel on datastore context\" */);\n this.makeLocallyVisible();\n this.bindState = BindState.Bound;\n };\n\n const thisSummarizeInternal =\n async (fullTree: boolean, trackState: boolean, telemetryContext?: ITelemetryContext) =>\n this.summarizeInternal(fullTree, trackState, telemetryContext);\n\n this.summarizerNode = props.createSummarizerNodeFn(\n thisSummarizeInternal,\n async (fullGC?: boolean) => this.getGCDataInternal(fullGC),\n async () => this.getBaseGCDetails(),\n );\n\n this.subLogger = ChildLogger.create(this.logger, \"FluidDataStoreContext\");\n this.thresholdOpsCounter = new ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.subLogger);\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n\n // Dispose any pending runtime after it gets fulfilled\n // Errors are logged where this.channelDeferred is consumed/generated (realizeCore(), bindRuntime())\n if (this.channelDeferred) {\n this.channelDeferred.promise.then((runtime) => {\n runtime.dispose();\n }).catch((error) => {});\n }\n }\n\n private rejectDeferredRealize(reason: string, packageName?: string): never {\n throw new LoggingError(reason, { packageName: { value: packageName, tag: TelemetryDataTag.CodeArtifact } });\n }\n\n public async realize(): Promise<IFluidDataStoreChannel> {\n assert(!this.detachedRuntimeCreation, 0x13d /* \"Detached runtime creation on realize()\" */);\n if (!this.channelDeferred) {\n this.channelDeferred = new Deferred<IFluidDataStoreChannel>();\n this.realizeCore(this.existing).catch((error) => {\n const errorWrapped = DataProcessingError.wrapIfUnrecognized(error, \"realizeFluidDataStoreContext\");\n errorWrapped.addTelemetryProperties({\n fluidDataStoreId: {\n value: this.id,\n tag: TelemetryDataTag.CodeArtifact,\n },\n });\n this.channelDeferred?.reject(errorWrapped);\n this.logger.sendErrorEvent({ eventName: \"RealizeError\" }, errorWrapped);\n });\n }\n return this.channelDeferred.promise;\n }\n\n protected async factoryFromPackagePath(packages?: readonly string[]) {\n assert(this.pkg === packages, 0x13e /* \"Unexpected package path\" */);\n if (packages === undefined) {\n this.rejectDeferredRealize(\"packages is undefined\");\n }\n\n let entry: FluidDataStoreRegistryEntry | undefined;\n let registry: IFluidDataStoreRegistry | undefined = this._containerRuntime.IFluidDataStoreRegistry;\n let lastPkg: string | undefined;\n for (const pkg of packages) {\n if (!registry) {\n this.rejectDeferredRealize(\"No registry for package\", lastPkg);\n }\n lastPkg = pkg;\n entry = await registry.get(pkg);\n if (!entry) {\n this.rejectDeferredRealize(\"Registry does not contain entry for the package\", pkg);\n }\n registry = entry.IFluidDataStoreRegistry;\n }\n const factory = entry?.IFluidDataStoreFactory;\n if (factory === undefined) {\n this.rejectDeferredRealize(\"Can't find factory for package\", lastPkg);\n }\n\n return { factory, registry };\n }\n\n private async realizeCore(existing: boolean): Promise<void> {\n const details = await this.getInitialSnapshotDetails();\n // Base snapshot is the baseline where pending ops are applied to.\n // It is important that this be in sync with the pending ops, and also\n // that it is set here, before bindRuntime is called.\n this._baseSnapshot = details.snapshot;\n const packages = details.pkg;\n\n const { factory, registry } = await this.factoryFromPackagePath(packages);\n\n assert(this.registry === undefined, 0x13f /* \"datastore context registry is already set\" */);\n this.registry = registry;\n\n const channel = await factory.instantiateDataStore(this, existing);\n assert(channel !== undefined, 0x140 /* \"undefined channel on datastore context\" */);\n this.bindRuntime(channel);\n }\n\n /**\n * Notifies this object about changes in the connection state.\n * @param value - New connection state.\n * @param clientId - ID of the client. Its old ID when in disconnected state and\n * its new client ID when we are connecting or connected.\n */\n public setConnectionState(connected: boolean, clientId?: string) {\n this.verifyNotClosed();\n\n // Connection events are ignored if the store is not yet loaded\n if (!this.loaded) {\n return;\n }\n\n assert(this.connected === connected, 0x141 /* \"Unexpected connected state\" */);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.channel!.setConnectionState(connected, clientId);\n }\n\n public process(messageArg: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown): void {\n this.verifyNotClosed();\n\n const innerContents = messageArg.contents as FluidDataStoreMessage;\n const message = {\n ...messageArg,\n type: innerContents.type,\n contents: innerContents.content,\n };\n\n this.summarizerNode.recordChange(message);\n\n if (this.loaded) {\n return this.channel?.process(message, local, localOpMetadata);\n } else {\n assert(!local, 0x142 /* \"local store channel is not loaded\" */);\n assert(this.pending !== undefined, 0x23d /* \"pending is undefined\" */);\n this.pending.push(message);\n this.thresholdOpsCounter.sendIfMultiple(\"StorePendingOps\", this.pending.length);\n }\n }\n\n public processSignal(message: IInboundSignalMessage, local: boolean): void {\n this.verifyNotClosed();\n\n // Signals are ignored if the store is not yet loaded\n if (!this.loaded) {\n return;\n }\n\n this.channel?.processSignal(message, local);\n }\n\n public getQuorum(): IQuorumClients {\n return this._containerRuntime.getQuorum();\n }\n\n public getAudience(): IAudience {\n return this._containerRuntime.getAudience();\n }\n\n /**\n * Returns a summary at the current sequence number.\n * @param fullTree - true to bypass optimizations and force a full summary tree\n * @param trackState - This tells whether we should track state from this summary.\n * @param telemetryContext - summary data passed through the layers for telemetry purposes\n */\n public async summarize(\n fullTree: boolean = false,\n trackState: boolean = true,\n telemetryContext?: ITelemetryContext,\n ): Promise<ISummarizeResult> {\n return this.summarizerNode.summarize(fullTree, trackState, telemetryContext);\n }\n\n private async summarizeInternal(\n fullTree: boolean,\n trackState: boolean,\n telemetryContext?: ITelemetryContext,\n ): Promise<ISummarizeInternalResult> {\n await this.realize();\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const summarizeResult = await this.channel!.summarize(fullTree, trackState, telemetryContext);\n\n // Wrap dds summaries in .channels subtree.\n wrapSummaryInChannelsTree(summarizeResult);\n const pathPartsForChildren = [channelsTreeName];\n\n // Add data store's attributes to the summary.\n const { pkg } = await this.getInitialSnapshotDetails();\n const isRoot = await this.isRoot();\n const attributes = createAttributes(pkg, isRoot);\n addBlobToSummary(summarizeResult, dataStoreAttributesBlobName, JSON.stringify(attributes));\n\n // Add GC data to the summary if it's not written at the root.\n if (!this.writeGCDataAtRoot) {\n addBlobToSummary(summarizeResult, gcBlobKey, JSON.stringify(this.summarizerNode.getGCSummaryDetails()));\n }\n\n // If we are not referenced, mark the summary tree as unreferenced. Also, update unreferenced blob\n // size in the summary stats with the blobs size of this data store.\n if (!this.summarizerNode.isReferenced()) {\n summarizeResult.summary.unreferenced = true;\n summarizeResult.stats.unreferencedBlobSize = summarizeResult.stats.totalBlobSize;\n }\n\n return {\n ...summarizeResult,\n id: this.id,\n pathPartsForChildren,\n };\n }\n\n /**\n * Returns the data used for garbage collection. This includes a list of GC nodes that represent this data store\n * including any of its child channel contexts. Each node has a set of outbound routes to other GC nodes in the\n * document.\n * If there is no new data in this data store since the last summary, previous GC data is used.\n * If there is new data, the GC data is generated again (by calling getGCDataInternal).\n * @param fullGC - true to bypass optimizations and force full generation of GC data.\n */\n public async getGCData(fullGC: boolean = false): Promise<IGarbageCollectionData> {\n return this.summarizerNode.getGCData(fullGC);\n }\n\n /**\n * Generates data used for garbage collection. This is called when there is new data since last summary. It\n * realizes the data store and calls into each channel context to get its GC data.\n * @param fullGC - true to bypass optimizations and force full generation of GC data.\n */\n private async getGCDataInternal(fullGC: boolean = false): Promise<IGarbageCollectionData> {\n await this.realize();\n assert(this.channel !== undefined, 0x143 /* \"Channel should not be undefined when running GC\" */);\n\n return this.channel.getGCData(fullGC);\n }\n\n /**\n * After GC has run, called to notify the data store of routes used in it. These are used for the following:\n *\n * 1. To identify if this data store is being referenced in the document or not.\n *\n * 2. To determine if it needs to re-summarize in case used routes changed since last summary.\n *\n * 3. These are added to the summary generated by the data store.\n *\n * 4. To notify child contexts of their used routes. This is done immediately if the data store is loaded.\n * Else, it is done when realizing the data store.\n *\n * 5. To update the timestamp when this data store or any children are marked as unreferenced.\n *\n * @param usedRoutes - The routes that are used in this data store.\n * @param gcTimestamp - The time when GC was run that generated these used routes. If any node becomes unreferenced\n * as part of this GC run, this should be used to update the time when it happens.\n */\n public updateUsedRoutes(usedRoutes: string[], gcTimestamp?: number) {\n // Update the used routes in this data store's summarizer node.\n this.summarizerNode.updateUsedRoutes(usedRoutes, gcTimestamp);\n\n /**\n * If the data store has not been realized yet, we need this used state to update the used state of the channel\n * when it realizes. It's safe to keep only the last used state because if something changes because of this GC\n * run, the data store will be immediately realized as part of the summary that follows GC. For example, if a\n * child's reference state changes, the gcTimestamp has to be used to update its unreferencedTimestamp. Since\n * it will result in a change in this data store's used routes, it will be realized to regenerate its summary.\n */\n this.lastUsedState = { usedRoutes, gcTimestamp };\n\n // If we are loaded, call the channel so it can update the used routes of the child contexts.\n // If we are not loaded, we will update this when we are realized.\n if (this.loaded) {\n this.updateChannelUsedRoutes();\n }\n }\n\n /**\n * Called when a new outbound reference is added to another node. This is used by garbage collection to identify\n * all references added in the system.\n * @param srcHandle - The handle of the node that added the reference.\n * @param outboundHandle - The handle of the outbound node that is referenced.\n */\n public addedGCOutboundReference(srcHandle: IFluidHandle, outboundHandle: IFluidHandle) {\n this._containerRuntime.addedGCOutboundReference(srcHandle, outboundHandle);\n }\n\n /**\n * Updates the used routes of the channel and its child contexts. The channel must be loaded before calling this.\n * It is called in these two scenarios:\n * 1. When the used routes of the data store is updated and the data store is loaded.\n * 2. When the data store is realized. This updates the channel's used routes as per last GC run.\n */\n private updateChannelUsedRoutes() {\n assert(this.loaded, 0x144 /* \"Channel should be loaded when updating used routes\" */);\n assert(this.channel !== undefined, 0x145 /* \"Channel should be present when data store is loaded\" */);\n\n // If there is no lastUsedState, GC has not run up until this point.\n if (this.lastUsedState === undefined) {\n return;\n }\n\n // Remove the route to this data store, if it exists.\n const usedChannelRoutes = this.lastUsedState.usedRoutes.filter(\n (id: string) => { return id !== \"/\" && id !== \"\"; },\n );\n this.channel.updateUsedRoutes(usedChannelRoutes, this.lastUsedState.gcTimestamp);\n }\n\n /**\n * @deprecated 0.18.Should call request on the runtime directly\n */\n public async request(request: IRequest): Promise<IResponse> {\n const runtime = await this.realize();\n return runtime.request(request);\n }\n\n public submitMessage(type: string, content: any, localOpMetadata: unknown): void {\n this.verifyNotClosed();\n assert(!!this.channel, 0x146 /* \"Channel must exist when submitting message\" */);\n const fluidDataStoreContent: FluidDataStoreMessage = {\n content,\n type,\n };\n this._containerRuntime.submitDataStoreOp(\n this.id,\n fluidDataStoreContent,\n localOpMetadata);\n }\n\n /**\n * This is called from a SharedSummaryBlock that does not generate ops but only wants to be part of the summary.\n * It indicates that there is data in the object that needs to be summarized.\n * We will update the latestSequenceNumber of the summary tracker of this\n * store and of the object's channel.\n *\n * @param address - The address of the channel that is dirty.\n *\n */\n public setChannelDirty(address: string): void {\n this.verifyNotClosed();\n\n // Get the latest sequence number.\n const latestSequenceNumber = this.deltaManager.lastSequenceNumber;\n\n this.summarizerNode.invalidate(latestSequenceNumber);\n\n const channelSummarizerNode = this.summarizerNode.getChild(address);\n\n if (channelSummarizerNode) {\n channelSummarizerNode.invalidate(latestSequenceNumber); // TODO: lazy load problem?\n }\n }\n\n public submitSignal(type: string, content: any) {\n this.verifyNotClosed();\n assert(!!this.channel, 0x147 /* \"Channel must exist on submitting signal\" */);\n return this._containerRuntime.submitDataStoreSignal(this.id, type, content);\n }\n\n /**\n * This is called by the data store channel when it becomes locally visible indicating that it is ready to become\n * globally visible now.\n */\n public makeLocallyVisible() {\n assert(this.channel !== undefined, 0x2cf /* \"undefined channel on datastore context\" */);\n this.makeLocallyVisibleFn();\n }\n\n protected bindRuntime(channel: IFluidDataStoreChannel) {\n if (this.channel) {\n throw new Error(\"Runtime already bound\");\n }\n\n try {\n assert(!this.detachedRuntimeCreation, 0x148 /* \"Detached runtime creation on runtime bind\" */);\n assert(this.channelDeferred !== undefined, 0x149 /* \"Undefined channel deferral\" */);\n assert(this.pkg !== undefined, 0x14a /* \"Undefined package path\" */);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const pending = this.pending!;\n\n // Apply all pending ops\n for (const op of pending) {\n channel.process(op, false, undefined /* localOpMetadata */);\n }\n\n this.thresholdOpsCounter.send(\"ProcessPendingOps\", pending.length);\n this.pending = undefined;\n\n // And now mark the runtime active\n this.loaded = true;\n this.channel = channel;\n\n // Freeze the package path to ensure that someone doesn't modify it when it is\n // returned in packagePath().\n Object.freeze(this.pkg);\n\n /**\n * Update the used routes of the channel. If GC has run before this data store was realized, we will have\n * the used routes saved. So, this will ensure that all the child contexts have up-to-date used routes as\n * per the last time GC was run.\n * Also, this data store may have been realized during summarize. In that case, the child contexts need to\n * have their used routes updated to determine if its needs to summarize again and to add it to the summary.\n */\n this.updateChannelUsedRoutes();\n\n // And notify the pending promise it is now available\n this.channelDeferred.resolve(this.channel);\n } catch (error) {\n this.channelDeferred?.reject(error);\n this.logger.sendErrorEvent(\n { eventName: \"BindRuntimeError\", fluidDataStoreId: {\n value: this.id,\n tag: TelemetryDataTag.CodeArtifact,\n } },\n error);\n }\n }\n\n public async getAbsoluteUrl(relativeUrl: string): Promise<string | undefined> {\n if (this.attachState !== AttachState.Attached) {\n return undefined;\n }\n return this._containerRuntime.getAbsoluteUrl(relativeUrl);\n }\n\n public abstract generateAttachMessage(): IAttachMessage;\n\n public abstract getInitialSnapshotDetails(): Promise<ISnapshotDetails>;\n\n /**\n * @deprecated Sets the datastore as root, for aliasing purposes: #7948\n * This method should not be used outside of the aliasing context.\n * It will be removed, as the source of truth for this flag will be the aliasing blob.\n */\n public setInMemoryRoot(): void {\n this._isInMemoryRoot = true;\n }\n\n /**\n * @deprecated Renamed to `{@link FluidDataStoreContext.getBaseGCDetails}()`.\n */\n public abstract getInitialGCSummaryDetails(): Promise<IGarbageCollectionSummaryDetails>;\n\n public abstract getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;\n\n public reSubmit(contents: any, localOpMetadata: unknown) {\n assert(!!this.channel, 0x14b /* \"Channel must exist when resubmitting ops\" */);\n const innerContents = contents as FluidDataStoreMessage;\n this.channel.reSubmit(innerContents.type, innerContents.content, localOpMetadata);\n }\n\n public rollback(contents: any, localOpMetadata: unknown) {\n if (!this.channel) {\n throw new Error(\"Channel must exist when rolling back ops\");\n }\n if (!this.channel.rollback) {\n throw new Error(\"Channel doesn't support rollback\");\n }\n const innerContents = contents as FluidDataStoreMessage;\n this.channel.rollback(innerContents.type, innerContents.content, localOpMetadata);\n }\n\n public async applyStashedOp(contents: any): Promise<unknown> {\n if (!this.channel) {\n await this.realize();\n }\n assert(!!this.channel, 0x14c /* \"Channel must exist when rebasing ops\" */);\n const innerContents = contents as FluidDataStoreMessage;\n return this.channel.applyStashedOp(innerContents.content);\n }\n\n private verifyNotClosed() {\n if (this._disposed) {\n throw new Error(\"Context is closed\");\n }\n }\n\n public getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam) {\n return (\n summarizeInternal: SummarizeInternalFn,\n getGCDataFn: (fullGC?: boolean) => Promise<IGarbageCollectionData>,\n getBaseGCDetailsFn: () => Promise<IGarbageCollectionDetailsBase>,\n ) => this.summarizerNode.createChild(\n summarizeInternal,\n id,\n createParam,\n // DDS will not create failure summaries\n { throwOnFailure: true },\n getGCDataFn,\n getBaseGCDetailsFn,\n );\n }\n\n public async uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>> {\n return this.containerRuntime.uploadBlob(blob);\n }\n}\n\nexport class RemoteFluidDataStoreContext extends FluidDataStoreContext {\n private readonly initSnapshotValue: ISnapshotTree | string | undefined;\n private readonly baseGCDetailsP: Promise<IGarbageCollectionDetailsBase>;\n\n constructor(props: IRemoteFluidDataStoreContextProps) {\n super(\n props,\n true /* existing */,\n BindState.Bound,\n false /* isLocalDataStore */,\n () => {\n throw new Error(\"Already attached\");\n },\n );\n\n this.initSnapshotValue = props.snapshotTree;\n this.baseGCDetailsP = new LazyPromise<IGarbageCollectionDetailsBase>(async () => {\n return (await props.getBaseGCDetails()) ?? {};\n });\n }\n\n private readonly initialSnapshotDetailsP = new LazyPromise<ISnapshotDetails>(async () => {\n let tree: ISnapshotTree | undefined;\n let isRootDataStore = true;\n\n if (typeof this.initSnapshotValue === \"string\") {\n const commit = (await this.storage.getVersions(this.initSnapshotValue, 1))[0];\n tree = await this.storage.getSnapshotTree(commit) ?? undefined;\n } else {\n tree = this.initSnapshotValue;\n }\n\n const localReadAndParse = async <T>(id: string) => readAndParse<T>(this.storage, id);\n if (tree) {\n tree = await this.summarizerNode.loadBaseSummary(tree, localReadAndParse);\n }\n\n if (!!tree && tree.blobs[dataStoreAttributesBlobName] !== undefined) {\n // Need to get through snapshot and use that to populate extraBlobs\n const attributes =\n await localReadAndParse<ReadFluidDataStoreAttributes>(tree.blobs[dataStoreAttributesBlobName]);\n\n let pkgFromSnapshot: string[];\n // Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.\n // For snapshotFormatVersion = \"0.1\" (1) or above, pkg is jsonified, otherwise it is just a string.\n const formatVersion = getAttributesFormatVersion(attributes);\n if (formatVersion < 1) {\n pkgFromSnapshot = attributes.pkg.startsWith(\"[\\\"\") && attributes.pkg.endsWith(\"\\\"]\")\n ? JSON.parse(attributes.pkg) as string[]\n : [attributes.pkg];\n } else {\n pkgFromSnapshot = JSON.parse(attributes.pkg) as string[];\n }\n this.pkg = pkgFromSnapshot;\n\n /**\n * If there is no isRootDataStore in the attributes blob, set it to true. This will ensure that\n * data stores in older documents are not garbage collected incorrectly. This may lead to additional\n * roots in the document but they won't break.\n */\n isRootDataStore = attributes.isRootDataStore ?? true;\n\n if (hasIsolatedChannels(attributes)) {\n tree = tree.trees[channelsTreeName];\n assert(tree !== undefined,\n 0x1fe /* \"isolated channels subtree should exist in remote datastore snapshot\" */);\n }\n }\n\n return {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n pkg: this.pkg!,\n isRootDataStore,\n snapshot: tree,\n };\n });\n\n public async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n return this.initialSnapshotDetailsP;\n }\n\n /**\n * @deprecated Renamed to {@link RemoteFluidDataStoreContext.getBaseGCDetails}.\n */\n public async getInitialGCSummaryDetails(): Promise<IGarbageCollectionSummaryDetails> {\n return this.getBaseGCDetails();\n }\n\n public async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {\n return this.baseGCDetailsP;\n }\n\n public generateAttachMessage(): IAttachMessage {\n throw new Error(\"Cannot attach remote store\");\n }\n}\n\n/**\n * Base class for detached & attached context classes\n */\nexport class LocalFluidDataStoreContextBase extends FluidDataStoreContext {\n private readonly snapshotTree: ISnapshotTree | undefined;\n /**\n * @deprecated 0.16 Issue #1635, #3631\n */\n public readonly createProps?: any;\n\n constructor(props: ILocalFluidDataStoreContextProps) {\n super(\n props,\n props.snapshotTree !== undefined ? true : false /* existing */,\n props.snapshotTree ? BindState.Bound : BindState.NotBound,\n true /* isLocalDataStore */,\n props.makeLocallyVisibleFn,\n );\n\n this.snapshotTree = props.snapshotTree;\n if (props.isRootDataStore === true) {\n this.setInMemoryRoot();\n }\n this.createProps = props.createProps;\n this.attachListeners();\n }\n\n private attachListeners(): void {\n this.once(\"attaching\", () => {\n assert(this.attachState === AttachState.Detached, 0x14d /* \"Should move from detached to attaching\" */);\n this._attachState = AttachState.Attaching;\n });\n this.once(\"attached\", () => {\n assert(this.attachState === AttachState.Attaching, 0x14e /* \"Should move from attaching to attached\" */);\n this._attachState = AttachState.Attached;\n });\n }\n\n public generateAttachMessage(): IAttachMessage {\n assert(this.channel !== undefined, 0x14f /* \"There should be a channel when generating attach message\" */);\n assert(this.pkg !== undefined, 0x150 /* \"pkg should be available in local data store context\" */);\n\n const summarizeResult = this.channel.getAttachSummary();\n\n // Wrap dds summaries in .channels subtree.\n wrapSummaryInChannelsTree(summarizeResult);\n\n // Add data store's attributes to the summary.\n const attributes = createAttributes(\n this.pkg,\n this.isInMemoryRoot(),\n );\n addBlobToSummary(summarizeResult, dataStoreAttributesBlobName, JSON.stringify(attributes));\n\n // Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.\n const snapshot = convertSummaryTreeToITree(summarizeResult.summary);\n\n const message: IAttachMessage = {\n id: this.id,\n snapshot,\n type: this.pkg[this.pkg.length - 1],\n };\n\n return message;\n }\n\n public async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n let snapshot = this.snapshotTree;\n let attributes: ReadFluidDataStoreAttributes;\n let isRootDataStore = false;\n if (snapshot !== undefined) {\n // Get the dataStore attributes.\n // Note: storage can be undefined in special case while detached.\n attributes = await getFluidDataStoreAttributes(this.storage, snapshot);\n if (hasIsolatedChannels(attributes)) {\n snapshot = snapshot.trees[channelsTreeName];\n assert(snapshot !== undefined,\n 0x1ff /* \"isolated channels subtree should exist in local datastore snapshot\" */);\n }\n if (this.pkg === undefined) {\n this.pkg = JSON.parse(attributes.pkg) as string[];\n // If there is no isRootDataStore in the attributes blob, set it to true. This ensures that data\n // stores in older documents are not garbage collected incorrectly. This may lead to additional\n // roots in the document but they won't break.\n if (attributes.isRootDataStore ?? true) {\n isRootDataStore = true;\n this.setInMemoryRoot();\n }\n }\n }\n assert(this.pkg !== undefined, 0x152 /* \"pkg should be available in local data store\" */);\n\n return {\n pkg: this.pkg,\n isRootDataStore,\n snapshot,\n };\n }\n\n /**\n * @deprecated Renamed to {@link LocalFluidDataStoreContextBase.getBaseGCDetails}.\n */\n public async getInitialGCSummaryDetails(): Promise<IGarbageCollectionSummaryDetails> {\n // Local data store does not have initial summary.\n return {};\n }\n\n public async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {\n // Local data store does not have initial summary.\n return {};\n }\n}\n\n/**\n * context implementation for \"attached\" data store runtime.\n * Various workflows (snapshot creation, requests) result in .realize() being called\n * on context, resulting in instantiation and attachment of runtime.\n * Runtime is created using data store factory that is associated with this context.\n */\nexport class LocalFluidDataStoreContext extends LocalFluidDataStoreContextBase {\n constructor(props: ILocalFluidDataStoreContextProps) {\n super(props);\n }\n}\n\n/**\n * Detached context. Data Store runtime will be attached to it by attachRuntime() call\n * Before attachment happens, this context is not associated with particular type of runtime\n * or factory, i.e. it's package path is undefined.\n * Attachment process provides all missing parts - package path, data store runtime, and data store factory\n */\nexport class LocalDetachedFluidDataStoreContext\n extends LocalFluidDataStoreContextBase\n implements IFluidDataStoreContextDetached {\n constructor(props: ILocalFluidDataStoreContextProps) {\n super(props);\n this.detachedRuntimeCreation = true;\n }\n\n public async attachRuntime(\n registry: IProvideFluidDataStoreFactory,\n dataStoreChannel: IFluidDataStoreChannel) {\n assert(this.detachedRuntimeCreation, 0x154 /* \"runtime creation is already attached\" */);\n this.detachedRuntimeCreation = false;\n\n assert(this.channelDeferred === undefined, 0x155 /* \"channel deferral is already set\" */);\n this.channelDeferred = new Deferred<IFluidDataStoreChannel>();\n\n const factory = registry.IFluidDataStoreFactory;\n\n const entry = await this.factoryFromPackagePath(this.pkg);\n assert(entry.factory === factory, 0x156 /* \"Unexpected factory for package path\" */);\n\n assert(this.registry === undefined, 0x157 /* \"datastore registry already attached\" */);\n this.registry = entry.registry;\n\n super.bindRuntime(dataStoreChannel);\n\n if (await this.isRoot()) {\n dataStoreChannel.makeVisibleAndAttachGraph();\n }\n }\n\n public async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n if (this.detachedRuntimeCreation) {\n throw new Error(\"Detached Fluid Data Store context can't be realized! Please attach runtime first!\");\n }\n return super.getInitialSnapshotDetails();\n }\n}\n"]}
@@ -75,11 +75,15 @@ export declare class DataStores implements IDisposable {
75
75
  updateStateBeforeGC(): Promise<void>;
76
76
  /**
77
77
  * Generates data used for garbage collection. It does the following:
78
+ *
78
79
  * 1. Calls into each child data store context to get its GC data.
80
+ *
79
81
  * 2. Prefixes the child context's id to the GC nodes in the child's GC data. This makes sure that the node can be
80
- * identified as belonging to the child.
82
+ * identified as belonging to the child.
83
+ *
81
84
  * 3. Adds a GC node for this channel to the nodes received from the children. All these nodes together represent
82
- * the GC data of this channel.
85
+ * the GC data of this channel.
86
+ *
83
87
  * @param fullGC - true to bypass optimizations and force full generation of GC data.
84
88
  */
85
89
  getGCData(fullGC?: boolean): Promise<IGarbageCollectionData>;
@@ -1 +1 @@
1
- {"version":3,"file":"dataStores.d.ts","sourceRoot":"","sources":["../src/dataStores.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAoB,oBAAoB,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAIzG,OAAO,EACH,yBAAyB,EACzB,aAAa,EAChB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,WAAW,EAEX,2BAA2B,EAC3B,8BAA8B,EAE9B,cAAc,EAEd,8BAA8B,EAC9B,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EAGrB,qBAAqB,EACrB,iBAAiB,EACpB,MAAM,qCAAqC,CAAC;AAS7C,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAKpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACH,qBAAqB,EAErB,0BAA0B,EAG7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAA8C,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,sBAAsB,EAA2B,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD;;;GAGG;AACH,qBAAa,UAAW,YAAW,WAAW;IA0BtC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,8BAA8B;IAE/C,OAAO,CAAC,QAAQ,CAAC,2BAA2B;IAG5C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IApC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqC;IAEnE,SAAgB,yBAAyB,cAAqB;IAE9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAE1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAE7E,SAAgB,kBAAkB,EAAE;QAEhC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;QAE7C,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;KAC7C,CAAC;IAIF,OAAO,CAAC,qBAAqB,CAAgB;IAG7C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8E;gBAGzF,YAAY,EAAE,aAAa,GAAG,SAAS,EACvC,OAAO,EAAE,gBAAgB,EACzB,cAAc,EAAE,CAAC,aAAa,EAAE,GAAG,KAAK,IAAI,EAC5C,8BAA8B,EAC3C,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,8BAA8B,KAAK,2BAA2B,EAC3E,2BAA2B,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,EAClE,UAAU,EAAE,oBAAoB,EAChC,gBAAgB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC,EAC1D,aAAa,EAAE,CAC5B,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,EAClE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,iBAAiB,EAAE,OAAO,EAC1B,QAAQ,GAAE,iBAAqD;IA2EpF,IAAW,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAEhD;IAED,IAAW,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAE7D;IAEY,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKlE,oBAAoB,CAAC,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,OAAO;IAoEvE,mBAAmB,CACtB,OAAO,EAAE,yBAAyB,EAClC,eAAe,EAAE,OAAO,EACxB,KAAK,EAAE,OAAO,GACf,IAAI;IAkBA,uBAAuB,CAAC,YAAY,EAAE,sBAAsB,GAAG,OAAO;IA0B7E,OAAO,CAAC,gBAAgB;IAIxB;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAqB5B,2BAA2B,CAC9B,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EACvB,MAAM,EAAE,OAAO,EACf,EAAE,SAAS,GAAG,8BAA8B;IAsBzC,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAsB1E,IAAW,QAAQ,YAAyC;IAC5D,SAAgB,OAAO,aAAgC;IAEhD,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO;IAO1D,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO;IAOpD,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAO9C,oBAAoB,CAAC,OAAO,EAAE,cAAc;IAMlD,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO;IAgBnG,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAW7E,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO;IAkB7E,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;IAcxD,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI;IAetF,IAAW,IAAI,IAAI,MAAM,CAExB;IAEY,SAAS,CAClB,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,OAAO,EACnB,gBAAgB,CAAC,EAAE,iBAAiB,GACrC,OAAO,CAAC,qBAAqB,CAAC;IAkB1B,aAAa,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,qBAAqB;IAqCjF;;;;OAIG;IACU,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAajD;;;;;;;;OAQG;IACU,SAAS,CAAC,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoBhF;;;;;OAKG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM;IAelE;;;;OAIG;IACI,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE;IAiBhD;;;OAGG;YACW,iBAAiB;IAW/B;;OAEG;IACU,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAO9F;;;OAGG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;CAajE;AAED,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,aAAa,GAAG,SAAS,EACnC,QAAQ,CAAC,EAAE,yBAAyB,GACrC,aAAa,GAAG,SAAS,CAsB3B"}
1
+ {"version":3,"file":"dataStores.d.ts","sourceRoot":"","sources":["../src/dataStores.ts"],"names":[],"mappings":"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"}