@fluidframework/container-runtime 2.0.0-dev-rc.5.0.0.272251 → 2.0.0-dev-rc.5.0.0.272889

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 (233) hide show
  1. package/api-extractor.json +1 -1
  2. package/container-runtime.test-files.tar +0 -0
  3. package/dist/batchTracker.d.ts.map +1 -1
  4. package/dist/batchTracker.js.map +1 -1
  5. package/dist/blobManager.d.ts.map +1 -1
  6. package/dist/blobManager.js.map +1 -1
  7. package/dist/channelCollection.d.ts.map +1 -1
  8. package/dist/channelCollection.js +1 -3
  9. package/dist/channelCollection.js.map +1 -1
  10. package/dist/connectionTelemetry.d.ts.map +1 -1
  11. package/dist/connectionTelemetry.js.map +1 -1
  12. package/dist/containerRuntime.d.ts.map +1 -1
  13. package/dist/containerRuntime.js +4 -5
  14. package/dist/containerRuntime.js.map +1 -1
  15. package/dist/dataStoreContext.d.ts.map +1 -1
  16. package/dist/dataStoreContext.js +2 -1
  17. package/dist/dataStoreContext.js.map +1 -1
  18. package/dist/dataStoreContexts.d.ts.map +1 -1
  19. package/dist/dataStoreContexts.js.map +1 -1
  20. package/dist/deltaManagerProxies.d.ts.map +1 -1
  21. package/dist/deltaManagerProxies.js.map +1 -1
  22. package/dist/deltaScheduler.d.ts.map +1 -1
  23. package/dist/deltaScheduler.js +1 -3
  24. package/dist/deltaScheduler.js.map +1 -1
  25. package/dist/gc/garbageCollection.d.ts.map +1 -1
  26. package/dist/gc/garbageCollection.js +2 -2
  27. package/dist/gc/garbageCollection.js.map +1 -1
  28. package/dist/gc/gcConfigs.js +1 -1
  29. package/dist/gc/gcConfigs.js.map +1 -1
  30. package/dist/gc/gcHelpers.d.ts.map +1 -1
  31. package/dist/gc/gcHelpers.js.map +1 -1
  32. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  33. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  34. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  35. package/dist/gc/gcTelemetry.js +1 -2
  36. package/dist/gc/gcTelemetry.js.map +1 -1
  37. package/dist/index.d.ts +1 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/messageTypes.d.ts +5 -21
  41. package/dist/messageTypes.d.ts.map +1 -1
  42. package/dist/messageTypes.js.map +1 -1
  43. package/dist/opLifecycle/index.d.ts +1 -1
  44. package/dist/opLifecycle/index.d.ts.map +1 -1
  45. package/dist/opLifecycle/index.js.map +1 -1
  46. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  47. package/dist/opLifecycle/opDecompressor.js +1 -2
  48. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  49. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  50. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  51. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  52. package/dist/opLifecycle/opSplitter.js +1 -1
  53. package/dist/opLifecycle/opSplitter.js.map +1 -1
  54. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  55. package/dist/opLifecycle/outbox.js.map +1 -1
  56. package/dist/packageVersion.d.ts +1 -1
  57. package/dist/packageVersion.js +1 -1
  58. package/dist/packageVersion.js.map +1 -1
  59. package/dist/pendingStateManager.d.ts.map +1 -1
  60. package/dist/pendingStateManager.js +1 -1
  61. package/dist/pendingStateManager.js.map +1 -1
  62. package/dist/summary/documentSchema.d.ts.map +1 -1
  63. package/dist/summary/documentSchema.js +1 -2
  64. package/dist/summary/documentSchema.js.map +1 -1
  65. package/dist/summary/index.d.ts +1 -1
  66. package/dist/summary/index.d.ts.map +1 -1
  67. package/dist/summary/index.js.map +1 -1
  68. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  69. package/dist/summary/orderedClientElection.js.map +1 -1
  70. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  71. package/dist/summary/runningSummarizer.js +1 -2
  72. package/dist/summary/runningSummarizer.js.map +1 -1
  73. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  74. package/dist/summary/summarizerClientElection.js.map +1 -1
  75. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  76. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  77. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  78. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  79. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  80. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +4 -1
  81. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  82. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  83. package/dist/summary/summarizerTypes.js.map +1 -1
  84. package/dist/summary/summaryCollection.d.ts.map +1 -1
  85. package/dist/summary/summaryCollection.js.map +1 -1
  86. package/dist/summary/summaryFormat.d.ts.map +1 -1
  87. package/dist/summary/summaryFormat.js.map +1 -1
  88. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  89. package/dist/summary/summaryGenerator.js +1 -2
  90. package/dist/summary/summaryGenerator.js.map +1 -1
  91. package/dist/summary/summaryManager.d.ts.map +1 -1
  92. package/dist/summary/summaryManager.js +1 -2
  93. package/dist/summary/summaryManager.js.map +1 -1
  94. package/dist/throttler.d.ts.map +1 -1
  95. package/dist/throttler.js +3 -1
  96. package/dist/throttler.js.map +1 -1
  97. package/lib/batchTracker.d.ts.map +1 -1
  98. package/lib/batchTracker.js +1 -1
  99. package/lib/batchTracker.js.map +1 -1
  100. package/lib/blobManager.d.ts.map +1 -1
  101. package/lib/blobManager.js +1 -1
  102. package/lib/blobManager.js.map +1 -1
  103. package/lib/channelCollection.d.ts.map +1 -1
  104. package/lib/channelCollection.js +1 -3
  105. package/lib/channelCollection.js.map +1 -1
  106. package/lib/connectionTelemetry.d.ts.map +1 -1
  107. package/lib/connectionTelemetry.js.map +1 -1
  108. package/lib/containerRuntime.d.ts.map +1 -1
  109. package/lib/containerRuntime.js +6 -7
  110. package/lib/containerRuntime.js.map +1 -1
  111. package/lib/dataStoreContext.d.ts.map +1 -1
  112. package/lib/dataStoreContext.js +2 -1
  113. package/lib/dataStoreContext.js.map +1 -1
  114. package/lib/dataStoreContexts.d.ts.map +1 -1
  115. package/lib/dataStoreContexts.js +1 -1
  116. package/lib/dataStoreContexts.js.map +1 -1
  117. package/lib/deltaManagerProxies.d.ts.map +1 -1
  118. package/lib/deltaManagerProxies.js.map +1 -1
  119. package/lib/deltaScheduler.d.ts.map +1 -1
  120. package/lib/deltaScheduler.js +1 -3
  121. package/lib/deltaScheduler.js.map +1 -1
  122. package/lib/gc/garbageCollection.d.ts.map +1 -1
  123. package/lib/gc/garbageCollection.js +3 -3
  124. package/lib/gc/garbageCollection.js.map +1 -1
  125. package/lib/gc/gcConfigs.js +1 -1
  126. package/lib/gc/gcConfigs.js.map +1 -1
  127. package/lib/gc/gcHelpers.d.ts.map +1 -1
  128. package/lib/gc/gcHelpers.js.map +1 -1
  129. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  130. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  131. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  132. package/lib/gc/gcTelemetry.js +1 -2
  133. package/lib/gc/gcTelemetry.js.map +1 -1
  134. package/lib/index.d.ts +1 -1
  135. package/lib/index.d.ts.map +1 -1
  136. package/lib/index.js.map +1 -1
  137. package/lib/messageTypes.d.ts +5 -21
  138. package/lib/messageTypes.d.ts.map +1 -1
  139. package/lib/messageTypes.js.map +1 -1
  140. package/lib/opLifecycle/index.d.ts +1 -1
  141. package/lib/opLifecycle/index.d.ts.map +1 -1
  142. package/lib/opLifecycle/index.js +1 -1
  143. package/lib/opLifecycle/index.js.map +1 -1
  144. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  145. package/lib/opLifecycle/opDecompressor.js +1 -2
  146. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  147. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  148. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  149. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  150. package/lib/opLifecycle/opSplitter.js +1 -1
  151. package/lib/opLifecycle/opSplitter.js.map +1 -1
  152. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  153. package/lib/opLifecycle/outbox.js.map +1 -1
  154. package/lib/packageVersion.d.ts +1 -1
  155. package/lib/packageVersion.js +1 -1
  156. package/lib/packageVersion.js.map +1 -1
  157. package/lib/pendingStateManager.d.ts.map +1 -1
  158. package/lib/pendingStateManager.js +1 -1
  159. package/lib/pendingStateManager.js.map +1 -1
  160. package/lib/summary/documentSchema.d.ts.map +1 -1
  161. package/lib/summary/documentSchema.js +1 -2
  162. package/lib/summary/documentSchema.js.map +1 -1
  163. package/lib/summary/index.d.ts +1 -1
  164. package/lib/summary/index.d.ts.map +1 -1
  165. package/lib/summary/index.js +1 -1
  166. package/lib/summary/index.js.map +1 -1
  167. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  168. package/lib/summary/orderedClientElection.js.map +1 -1
  169. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  170. package/lib/summary/runningSummarizer.js +1 -2
  171. package/lib/summary/runningSummarizer.js.map +1 -1
  172. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  173. package/lib/summary/summarizerClientElection.js.map +1 -1
  174. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  175. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  176. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  177. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  178. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  179. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +4 -1
  180. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  181. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  182. package/lib/summary/summarizerTypes.js.map +1 -1
  183. package/lib/summary/summaryCollection.d.ts.map +1 -1
  184. package/lib/summary/summaryCollection.js.map +1 -1
  185. package/lib/summary/summaryFormat.d.ts.map +1 -1
  186. package/lib/summary/summaryFormat.js.map +1 -1
  187. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  188. package/lib/summary/summaryGenerator.js +1 -2
  189. package/lib/summary/summaryGenerator.js.map +1 -1
  190. package/lib/summary/summaryManager.d.ts.map +1 -1
  191. package/lib/summary/summaryManager.js +1 -2
  192. package/lib/summary/summaryManager.js.map +1 -1
  193. package/lib/throttler.d.ts.map +1 -1
  194. package/lib/throttler.js +3 -1
  195. package/lib/throttler.js.map +1 -1
  196. package/package.json +23 -19
  197. package/src/batchTracker.ts +4 -1
  198. package/src/blobManager.ts +14 -16
  199. package/src/channelCollection.ts +17 -20
  200. package/src/connectionTelemetry.ts +3 -8
  201. package/src/containerRuntime.ts +41 -40
  202. package/src/dataStoreContext.ts +31 -9
  203. package/src/dataStoreContexts.ts +7 -2
  204. package/src/deltaManagerProxies.ts +12 -3
  205. package/src/deltaScheduler.ts +1 -3
  206. package/src/gc/garbageCollection.ts +23 -24
  207. package/src/gc/gcConfigs.ts +7 -3
  208. package/src/gc/gcHelpers.ts +6 -2
  209. package/src/gc/gcSummaryStateTracker.ts +4 -1
  210. package/src/gc/gcTelemetry.ts +1 -2
  211. package/src/index.ts +0 -1
  212. package/src/messageTypes.ts +7 -23
  213. package/src/opLifecycle/index.ts +5 -1
  214. package/src/opLifecycle/opDecompressor.ts +2 -6
  215. package/src/opLifecycle/opGroupingManager.ts +1 -4
  216. package/src/opLifecycle/opSplitter.ts +9 -3
  217. package/src/opLifecycle/outbox.ts +1 -4
  218. package/src/packageVersion.ts +1 -1
  219. package/src/pendingStateManager.ts +4 -2
  220. package/src/summary/documentSchema.ts +4 -7
  221. package/src/summary/index.ts +4 -1
  222. package/src/summary/orderedClientElection.ts +17 -10
  223. package/src/summary/runningSummarizer.ts +20 -9
  224. package/src/summary/summarizerClientElection.ts +2 -1
  225. package/src/summary/summarizerNode/summarizerNode.ts +6 -4
  226. package/src/summary/summarizerNode/summarizerNodeUtils.ts +7 -2
  227. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +10 -6
  228. package/src/summary/summarizerTypes.ts +9 -2
  229. package/src/summary/summaryCollection.ts +4 -1
  230. package/src/summary/summaryFormat.ts +8 -3
  231. package/src/summary/summaryGenerator.ts +4 -9
  232. package/src/summary/summaryManager.ts +6 -9
  233. package/src/throttler.ts +3 -1
@@ -3,7 +3,11 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { TypedEventEmitter, bufferToString, stringToBuffer } from "@fluid-internal/client-utils";
6
+ import {
7
+ TypedEventEmitter,
8
+ bufferToString,
9
+ stringToBuffer,
10
+ } from "@fluid-internal/client-utils";
7
11
  import { AttachState, ICriticalContainerError } from "@fluidframework/container-definitions";
8
12
  import {
9
13
  IContainerRuntime,
@@ -100,7 +104,8 @@ export type IBlobManagerRuntime = Pick<
100
104
  > &
101
105
  TypedEventEmitter<IContainerRuntimeEvents>;
102
106
 
103
- type ICreateBlobResponseWithTTL = ICreateBlobResponse & Partial<Record<"minTTLInSeconds", number>>;
107
+ type ICreateBlobResponseWithTTL = ICreateBlobResponse &
108
+ Partial<Record<"minTTLInSeconds", number>>;
104
109
 
105
110
  interface PendingBlob {
106
111
  blob: ArrayBufferLike;
@@ -281,15 +286,11 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
281
286
  if (expired) {
282
287
  // we want to avoid submitting ops with broken handles
283
288
  this.closeContainer(
284
- new GenericError(
285
- "Trying to submit a BlobAttach for expired blob",
286
- undefined,
287
- {
288
- localId,
289
- blobId,
290
- secondsSinceUpload,
291
- },
292
- ),
289
+ new GenericError("Trying to submit a BlobAttach for expired blob", undefined, {
290
+ localId,
291
+ blobId,
292
+ secondsSinceUpload,
293
+ }),
293
294
  );
294
295
  }
295
296
  }
@@ -414,7 +415,7 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
414
415
  pending.attached = true;
415
416
  this.emit("blobAttached", pending);
416
417
  this.deletePendingBlobMaybe(id);
417
- }
418
+ }
418
419
  : undefined;
419
420
  return new BlobHandle(
420
421
  `${BlobManager.basePath}/${id}`,
@@ -854,10 +855,7 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
854
855
  0x391 /* Redirect table size must match BlobManager's local ID count */,
855
856
  );
856
857
  for (const [localId, storageId] of table) {
857
- assert(
858
- this.redirectTable.has(localId),
859
- 0x254 /* "unrecognized id in redirect table" */,
860
- );
858
+ assert(this.redirectTable.has(localId), 0x254 /* "unrecognized id in redirect table" */);
861
859
  this.setRedirection(localId, storageId);
862
860
  // set identity (id -> id) entry
863
861
  this.setRedirection(storageId, storageId);
@@ -397,11 +397,14 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
397
397
  const attachMessage = message.contents as InboundAttachMessage;
398
398
 
399
399
  // We need to process the GC Data for both local and remote attach messages
400
- const foundGCData = processAttachMessageGCData(attachMessage.snapshot, (nodeId, toPath) => {
401
- // nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
402
- const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
403
- this.parentContext.addedGCOutboundRoute(fromPath, toPath, message.timestamp);
404
- });
400
+ const foundGCData = processAttachMessageGCData(
401
+ attachMessage.snapshot,
402
+ (nodeId, toPath) => {
403
+ // nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
404
+ const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
405
+ this.parentContext.addedGCOutboundRoute(fromPath, toPath, message.timestamp);
406
+ },
407
+ );
405
408
 
406
409
  // Only log once per container to avoid noise/cost.
407
410
  // Allows longitudinal tracking of various state (e.g. foundGCData), and some sampled details
@@ -838,11 +841,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
838
841
  envelope.address,
839
842
  transformed.contents,
840
843
  (fromPath: string, toPath: string) =>
841
- this.parentContext.addedGCOutboundRoute(
842
- fromPath,
843
- toPath,
844
- message.timestamp,
845
- ),
844
+ this.parentContext.addedGCOutboundRoute(fromPath, toPath, message.timestamp),
846
845
  );
847
846
  break;
848
847
  }
@@ -979,9 +978,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
979
978
  }
980
979
 
981
980
  const idToLog =
982
- originalRequest !== undefined
983
- ? urlToGCNodePath(originalRequest.url)
984
- : dataStoreNodePath;
981
+ originalRequest !== undefined ? urlToGCNodePath(originalRequest.url) : dataStoreNodePath;
985
982
 
986
983
  // Log the package details asynchronously since getInitialSnapshotDetails is async
987
984
  const recentlyDeletedContext = this.contexts.getRecentlyDeletedContext(id);
@@ -1203,11 +1200,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
1203
1200
  const summaryBuilder = new SummaryTreeBuilder();
1204
1201
  await this.visitContextsDuringSummary(
1205
1202
  async (contextId: string, context: FluidDataStoreContext) => {
1206
- const contextSummary = await context.summarize(
1207
- fullTree,
1208
- trackState,
1209
- telemetryContext,
1210
- );
1203
+ const contextSummary = await context.summarize(fullTree, trackState, telemetryContext);
1211
1204
  summaryBuilder.addWithStats(contextId, contextSummary);
1212
1205
  },
1213
1206
  );
@@ -1292,7 +1285,9 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
1292
1285
  * be deleted.
1293
1286
  * @returns The routes of data stores and its objects that were deleted.
1294
1287
  */
1295
- public deleteSweepReadyNodes(sweepReadyDataStoreRoutes: readonly string[]): readonly string[] {
1288
+ public deleteSweepReadyNodes(
1289
+ sweepReadyDataStoreRoutes: readonly string[],
1290
+ ): readonly string[] {
1296
1291
  for (const route of sweepReadyDataStoreRoutes) {
1297
1292
  const pathParts = route.split("/");
1298
1293
  const dataStoreId = pathParts[1];
@@ -1370,7 +1365,9 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
1370
1365
  /**
1371
1366
  * Called by GC to retrieve the package path of a data store node with the given path.
1372
1367
  */
1373
- public async getDataStorePackagePath(nodePath: string): Promise<readonly string[] | undefined> {
1368
+ public async getDataStorePackagePath(
1369
+ nodePath: string,
1370
+ ): Promise<readonly string[] | undefined> {
1374
1371
  // If the node belongs to a data store, return its package path. For DDSes, we return the package path of the
1375
1372
  // data store that contains it.
1376
1373
  const context = this.contexts.get(nodePath.split("/")[1]);
@@ -141,8 +141,7 @@ class OpPerfTelemetry {
141
141
  return {
142
142
  sample: () => {
143
143
  eventCount++;
144
- const shouldSample =
145
- eventCount % OpPerfTelemetry.DELTA_LATENCY_SAMPLE_RATE === 0;
144
+ const shouldSample = eventCount % OpPerfTelemetry.DELTA_LATENCY_SAMPLE_RATE === 0;
146
145
  if (shouldSample) {
147
146
  eventCount = 0;
148
147
  }
@@ -163,8 +162,7 @@ class OpPerfTelemetry {
163
162
  return {
164
163
  sample: () => {
165
164
  eventCount++;
166
- const shouldSample =
167
- eventCount % OpPerfTelemetry.PROCESSED_OPS_SAMPLE_RATE === 0;
165
+ const shouldSample = eventCount % OpPerfTelemetry.PROCESSED_OPS_SAMPLE_RATE === 0;
168
166
  if (shouldSample) {
169
167
  eventCount = 0;
170
168
  this.noOpCountForTelemetry = 0;
@@ -212,10 +210,7 @@ class OpPerfTelemetry {
212
210
  ) {
213
211
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
214
212
  const latencyStats = this.latencyStatistics.get(msg.clientSequenceNumber)!;
215
- assert(
216
- latencyStats !== undefined,
217
- 0x7c2 /* Latency stats for op should exist */,
218
- );
213
+ assert(latencyStats !== undefined, 0x7c2 /* Latency stats for op should exist */);
219
214
  assert(
220
215
  latencyStats.opProcessingTimes.outboundPushEventTime === undefined,
221
216
  0x2c8 /* "outboundPushEventTime should be undefined" */,
@@ -127,12 +127,19 @@ import { v4 as uuid } from "uuid";
127
127
 
128
128
  import { BindBatchTracker } from "./batchTracker.js";
129
129
  import { BlobManager, IBlobManagerLoadInfo, IPendingBlobs } from "./blobManager.js";
130
- import { ChannelCollection, getSummaryForDatastores, wrapContext } from "./channelCollection.js";
130
+ import {
131
+ ChannelCollection,
132
+ getSummaryForDatastores,
133
+ wrapContext,
134
+ } from "./channelCollection.js";
131
135
  import { IPerfSignalReport, ReportOpPerfTelemetry } from "./connectionTelemetry.js";
132
136
  import { ContainerFluidHandleContext } from "./containerHandleContext.js";
133
137
  import { channelToDataStore } from "./dataStore.js";
134
138
  import { FluidDataStoreRegistry } from "./dataStoreRegistry.js";
135
- import { DeltaManagerPendingOpsProxy, DeltaManagerSummarizerProxy } from "./deltaManagerProxies.js";
139
+ import {
140
+ DeltaManagerPendingOpsProxy,
141
+ DeltaManagerSummarizerProxy,
142
+ } from "./deltaManagerProxies.js";
136
143
  import {
137
144
  GCNodeType,
138
145
  GarbageCollector,
@@ -1136,10 +1143,7 @@ export class ContainerRuntime
1136
1143
  // That's because any other usage will require immidiate loading of ID Compressor in next sessions in order
1137
1144
  // to reason over such things as session ID space.
1138
1145
  if (this.idCompressorMode === "on") {
1139
- assert(
1140
- this._idCompressor !== undefined,
1141
- 0x8ea /* compressor should have been loaded */,
1142
- );
1146
+ assert(this._idCompressor !== undefined, 0x8ea /* compressor should have been loaded */);
1143
1147
  return this._idCompressor;
1144
1148
  }
1145
1149
  }
@@ -1173,7 +1177,10 @@ export class ContainerRuntime
1173
1177
  * should be sufficient. This should be used only if necessary. For example, for validating and propagating connected
1174
1178
  * events which requires access to the actual real only info, this is needed.
1175
1179
  */
1176
- private readonly innerDeltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>;
1180
+ private readonly innerDeltaManager: IDeltaManager<
1181
+ ISequencedDocumentMessage,
1182
+ IDocumentMessage
1183
+ >;
1177
1184
 
1178
1185
  // internal logger for ContainerRuntime. Use this.logger for stores, summaries, etc.
1179
1186
  private readonly mc: MonitoringContext;
@@ -1538,7 +1545,9 @@ export class ContainerRuntime
1538
1545
  const useDeltaManagerOpsProxy =
1539
1546
  this.mc.config.getBoolean("Fluid.ContainerRuntime.DeltaManagerOpsProxy") !== false;
1540
1547
  // The summarizerDeltaManager Proxy is used to lie to the summarizer to convince it is in the right state as a summarizer client.
1541
- const summarizerDeltaManagerProxy = new DeltaManagerSummarizerProxy(this.innerDeltaManager);
1548
+ const summarizerDeltaManagerProxy = new DeltaManagerSummarizerProxy(
1549
+ this.innerDeltaManager,
1550
+ );
1542
1551
  outerDeltaManager = summarizerDeltaManagerProxy;
1543
1552
 
1544
1553
  // The DeltaManagerPendingOpsProxy is used to control the minimum sequence number
@@ -1754,7 +1763,7 @@ export class ContainerRuntime
1754
1763
  : ({
1755
1764
  clientId,
1756
1765
  client: audience.getMember(clientId),
1757
- } satisfies ISelf);
1766
+ } satisfies ISelf);
1758
1767
  };
1759
1768
 
1760
1769
  let oldClientId = this.clientId;
@@ -1773,7 +1782,8 @@ export class ContainerRuntime
1773
1782
  const closeSummarizerDelayOverride = this.mc.config.getNumber(
1774
1783
  "Fluid.ContainerRuntime.Test.CloseSummarizerDelayOverrideMs",
1775
1784
  );
1776
- this.closeSummarizerDelayMs = closeSummarizerDelayOverride ?? defaultCloseSummarizerDelayMs;
1785
+ this.closeSummarizerDelayMs =
1786
+ closeSummarizerDelayOverride ?? defaultCloseSummarizerDelayMs;
1777
1787
  this.summaryCollection = new SummaryCollection(this.deltaManager, this.logger);
1778
1788
 
1779
1789
  this.dirtyContainer =
@@ -1940,7 +1950,10 @@ export class ContainerRuntime
1940
1950
  }
1941
1951
  }
1942
1952
 
1943
- public getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam) {
1953
+ public getCreateChildSummarizerNodeFn(
1954
+ id: string,
1955
+ createParam: CreateChildSummarizerNodeParam,
1956
+ ) {
1944
1957
  return (
1945
1958
  summarizeInternal: SummarizeInternalFn,
1946
1959
  getGCDataFn: (fullGC?: boolean) => Promise<IGarbageCollectionData>,
@@ -2087,9 +2100,7 @@ export class ContainerRuntime
2087
2100
  // the summarizer state is not up to date.
2088
2101
  // This should be a recoverable scenario and shouldn't happen as we should process the ack first.
2089
2102
  if (this.isSummarizerClient) {
2090
- throw new Error(
2091
- "Summarizer client behind, loaded newer snapshot with loadingGroupId",
2092
- );
2103
+ throw new Error("Summarizer client behind, loaded newer snapshot with loadingGroupId");
2093
2104
  }
2094
2105
 
2095
2106
  // We want to catchup from sequenceNumber to targetSequenceNumber
@@ -2196,7 +2207,7 @@ export class ContainerRuntime
2196
2207
  status: 200,
2197
2208
  mimeType: "fluid/object",
2198
2209
  value: blob,
2199
- }
2210
+ }
2200
2211
  : create404Response(request);
2201
2212
  } else if (requestParser.pathParts.length > 0) {
2202
2213
  return await this.channelCollection.request(request);
@@ -2597,13 +2608,13 @@ export class ContainerRuntime
2597
2608
  message: message as InboundSequencedContainerRuntimeMessage,
2598
2609
  local,
2599
2610
  modernRuntimeMessage,
2600
- }
2611
+ }
2601
2612
  : // Unrecognized message will be ignored.
2602
- {
2613
+ {
2603
2614
  message,
2604
2615
  local,
2605
2616
  modernRuntimeMessage,
2606
- };
2617
+ };
2607
2618
  msg.savedOp = savedOp;
2608
2619
 
2609
2620
  // ensure that we observe any re-entrancy, and if needed, rebase ops
@@ -2749,10 +2760,7 @@ export class ContainerRuntime
2749
2760
 
2750
2761
  const compatBehavior = messageWithContext.message.compatDetails?.behavior;
2751
2762
  if (
2752
- !compatBehaviorAllowsMessageType(
2753
- messageWithContext.message.type,
2754
- compatBehavior,
2755
- )
2763
+ !compatBehaviorAllowsMessageType(messageWithContext.message.type, compatBehavior)
2756
2764
  ) {
2757
2765
  const { message } = messageWithContext;
2758
2766
  const error = DataProcessingError.create(
@@ -2807,8 +2815,7 @@ export class ContainerRuntime
2807
2815
  // Check to see if the signal was lost.
2808
2816
  if (
2809
2817
  this._perfSignalData.trackingSignalSequenceNumber !== undefined &&
2810
- envelope.clientSignalSequenceNumber >
2811
- this._perfSignalData.trackingSignalSequenceNumber
2818
+ envelope.clientSignalSequenceNumber > this._perfSignalData.trackingSignalSequenceNumber
2812
2819
  ) {
2813
2820
  this._perfSignalData.signalsLost++;
2814
2821
  this._perfSignalData.trackingSignalSequenceNumber = undefined;
@@ -3543,10 +3550,7 @@ export class ContainerRuntime
3543
3550
  * Generally the validate sequence number comes from the running summarizer and the node sequence number comes from the
3544
3551
  * summarizer nodes.
3545
3552
  */
3546
- if (
3547
- startSummaryResult.invalidNodes > 0 ||
3548
- startSummaryResult.mismatchNumbers.size > 0
3549
- ) {
3553
+ if (startSummaryResult.invalidNodes > 0 || startSummaryResult.mismatchNumbers.size > 0) {
3550
3554
  summaryLogger.sendTelemetryEvent({
3551
3555
  eventName: "LatestSummaryRefSeqNumMismatch",
3552
3556
  details: {
@@ -3714,12 +3718,12 @@ export class ContainerRuntime
3714
3718
  proposalHandle: undefined,
3715
3719
  ackHandle: this.loadedFromVersionId,
3716
3720
  referenceSequenceNumber: summaryRefSeqNum,
3717
- }
3721
+ }
3718
3722
  : {
3719
3723
  proposalHandle: lastAck.summaryOp.contents.handle,
3720
3724
  ackHandle: lastAck.summaryAck.contents.handle,
3721
3725
  referenceSequenceNumber: summaryRefSeqNum,
3722
- };
3726
+ };
3723
3727
 
3724
3728
  let handle: string;
3725
3729
  try {
@@ -4267,10 +4271,7 @@ export class ContainerRuntime
4267
4271
  "prefetchLatestSummaryBeforeClose",
4268
4272
  FetchSource.noCache,
4269
4273
  );
4270
- assert(
4271
- !!versions && !!versions[0],
4272
- 0x137 /* "Failed to get version from storage" */,
4273
- );
4274
+ assert(!!versions && !!versions[0], 0x137 /* "Failed to get version from storage" */);
4274
4275
  stats.getVersionDuration = trace.trace().duration;
4275
4276
 
4276
4277
  const maybeSnapshot = await this.storage.getSnapshotTree(versions[0]);
@@ -4338,15 +4339,13 @@ export class ContainerRuntime
4338
4339
  logAndReturnPendingState(
4339
4340
  event,
4340
4341
  getSyncState(
4341
- await this.blobManager.attachAndGetPendingBlobs(
4342
- props?.stopBlobAttachingSignal,
4343
- ),
4342
+ await this.blobManager.attachAndGetPendingBlobs(props?.stopBlobAttachingSignal),
4344
4343
  ),
4345
4344
  ),
4346
- )
4345
+ )
4347
4346
  : PerformanceEvent.timedExec(this.mc.logger, perfEvent, (event) =>
4348
4347
  logAndReturnPendingState(event, getSyncState()),
4349
- );
4348
+ );
4350
4349
  }
4351
4350
 
4352
4351
  public summarizeOnDemand(options: IOnDemandSummarizeOptions): ISummarizeResults {
@@ -4384,7 +4383,9 @@ export class ContainerRuntime
4384
4383
  };
4385
4384
  }
4386
4385
 
4387
- private validateSummaryHeuristicConfiguration(configuration: ISummaryConfigurationHeuristics) {
4386
+ private validateSummaryHeuristicConfiguration(
4387
+ configuration: ISummaryConfigurationHeuristics,
4388
+ ) {
4388
4389
  // eslint-disable-next-line no-restricted-syntax
4389
4390
  for (const prop in configuration) {
4390
4391
  if (typeof configuration[prop] === "number" && configuration[prop] < 0) {
@@ -94,7 +94,10 @@ function createAttributes(
94
94
  isRootDataStore,
95
95
  };
96
96
  }
97
- export function createAttributesBlob(pkg: readonly string[], isRootDataStore: boolean): ITreeEntry {
97
+ export function createAttributesBlob(
98
+ pkg: readonly string[],
99
+ isRootDataStore: boolean,
100
+ ): ITreeEntry {
98
101
  const attributes = createAttributes(pkg, isRootDataStore);
99
102
  return new BlobTreeEntry(dataStoreAttributesBlobName, JSON.stringify(attributes));
100
103
  }
@@ -157,7 +160,8 @@ export interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContext
157
160
  * Properties necessary for creating a local FluidDataStoreContext
158
161
  * @internal
159
162
  */
160
- export interface ILocalDetachedFluidDataStoreContextProps extends ILocalFluidDataStoreContextProps {
163
+ export interface ILocalDetachedFluidDataStoreContextProps
164
+ extends ILocalFluidDataStoreContextProps {
161
165
  readonly channelToDataStoreFn: (channel: IFluidDataStoreChannel) => IDataStore;
162
166
  }
163
167
 
@@ -431,7 +435,9 @@ export abstract class FluidDataStoreContext
431
435
  this._tombstoned = tombstone;
432
436
  }
433
437
 
434
- public abstract setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void;
438
+ public abstract setAttachState(
439
+ attachState: AttachState.Attaching | AttachState.Attached,
440
+ ): void;
435
441
 
436
442
  private rejectDeferredRealize(
437
443
  reason: string,
@@ -448,7 +454,10 @@ export abstract class FluidDataStoreContext
448
454
  }
449
455
 
450
456
  public async realize(): Promise<IFluidDataStoreChannel> {
451
- assert(!this.detachedRuntimeCreation, 0x13d /* "Detached runtime creation on realize()" */);
457
+ assert(
458
+ !this.detachedRuntimeCreation,
459
+ 0x13d /* "Detached runtime creation on realize()" */,
460
+ );
452
461
  if (!this.channelP) {
453
462
  this.channelP = this.realizeCore(this.existing).catch((error) => {
454
463
  const errorWrapped = DataProcessingError.wrapIfUnrecognized(
@@ -892,13 +901,17 @@ export abstract class FluidDataStoreContext
892
901
  * Get the summary required when attaching this context's DataStore.
893
902
  * Used for both Container Attach and DataStore Attach.
894
903
  */
895
- public abstract getAttachSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats;
904
+ public abstract getAttachSummary(
905
+ telemetryContext?: ITelemetryContext,
906
+ ): ISummaryTreeWithStats;
896
907
 
897
908
  /**
898
909
  * Get the GC Data for the initial state being attached so remote clients can learn of this DataStore's
899
910
  * outbound routes.
900
911
  */
901
- public abstract getAttachGCData(telemetryContext?: ITelemetryContext): IGarbageCollectionData;
912
+ public abstract getAttachGCData(
913
+ telemetryContext?: ITelemetryContext,
914
+ ): IGarbageCollectionData;
902
915
 
903
916
  public abstract getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
904
917
 
@@ -1010,7 +1023,10 @@ export abstract class FluidDataStoreContext
1010
1023
  this.localChangesTelemetryCount--;
1011
1024
  }
1012
1025
 
1013
- public getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam) {
1026
+ public getCreateChildSummarizerNodeFn(
1027
+ id: string,
1028
+ createParam: CreateChildSummarizerNodeParam,
1029
+ ) {
1014
1030
  return (
1015
1031
  summarizeInternal: SummarizeInternalFn,
1016
1032
  getGCDataFn: (fullGC?: boolean) => Promise<IGarbageCollectionData>,
@@ -1076,7 +1092,10 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
1076
1092
  // Sequence number of the snapshot.
1077
1093
  let sequenceNumber: number | undefined;
1078
1094
  // Check whether we need to fetch the snapshot first to load.
1079
- if (this.snapshotFetchRequired === undefined && this._baseSnapshot?.groupId !== undefined) {
1095
+ if (
1096
+ this.snapshotFetchRequired === undefined &&
1097
+ this._baseSnapshot?.groupId !== undefined
1098
+ ) {
1080
1099
  assert(
1081
1100
  this.blobContents !== undefined,
1082
1101
  0x97a /* Blob contents should be present to evaluate */,
@@ -1144,7 +1163,10 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
1144
1163
  }
1145
1164
  }
1146
1165
 
1147
- assert(this.pkg !== undefined, 0x8f6 /* The datastore context package should be defined */);
1166
+ assert(
1167
+ this.pkg !== undefined,
1168
+ 0x8f6 /* The datastore context package should be defined */,
1169
+ );
1148
1170
  return {
1149
1171
  pkg: this.pkg,
1150
1172
  isRootDataStore,
@@ -5,12 +5,17 @@
5
5
 
6
6
  import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
7
7
  import { assert, Deferred, Lazy } from "@fluidframework/core-utils/internal";
8
- import { ITelemetryLoggerExt, createChildLogger } from "@fluidframework/telemetry-utils/internal";
8
+ import {
9
+ ITelemetryLoggerExt,
10
+ createChildLogger,
11
+ } from "@fluidframework/telemetry-utils/internal";
9
12
 
10
13
  import { FluidDataStoreContext, LocalFluidDataStoreContext } from "./dataStoreContext.js";
11
14
 
12
15
  /** @internal */
13
- export class DataStoreContexts implements Iterable<[string, FluidDataStoreContext]>, IDisposable {
16
+ export class DataStoreContexts
17
+ implements Iterable<[string, FluidDataStoreContext]>, IDisposable
18
+ {
14
19
  private readonly notBoundContexts = new Set<string>();
15
20
 
16
21
  /** Attached and loaded context proxies */
@@ -100,7 +100,10 @@ export abstract class BaseDeltaManagerProxy
100
100
  }
101
101
 
102
102
  constructor(
103
- protected readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
103
+ protected readonly deltaManager: IDeltaManager<
104
+ ISequencedDocumentMessage,
105
+ IDocumentMessage
106
+ >,
104
107
  ) {
105
108
  super();
106
109
 
@@ -192,7 +195,10 @@ export class DeltaManagerSummarizerProxy extends BaseDeltaManagerProxy {
192
195
  private readonly isSummarizerClient: boolean;
193
196
 
194
197
  constructor(
195
- protected readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
198
+ protected readonly deltaManager: IDeltaManager<
199
+ ISequencedDocumentMessage,
200
+ IDocumentMessage
201
+ >,
196
202
  ) {
197
203
  super(deltaManager);
198
204
  this.isSummarizerClient = this.deltaManager.clientDetails.type === summarizerClientType;
@@ -237,7 +243,10 @@ export class DeltaManagerPendingOpsProxy extends BaseDeltaManagerProxy {
237
243
  };
238
244
 
239
245
  constructor(
240
- protected readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
246
+ protected readonly deltaManager: IDeltaManager<
247
+ ISequencedDocumentMessage,
248
+ IDocumentMessage
249
+ >,
241
250
  private readonly pendingStateManager: Pick<
242
251
  PendingStateManager,
243
252
  "minimumPendingMessageSequenceNumber"
@@ -148,9 +148,7 @@ export class DeltaScheduler {
148
148
  numberOfTurns: this.schedulingLog.numberOfTurns,
149
149
  processingTime: formatTick(this.schedulingLog.totalProcessingTime),
150
150
  opsProcessed:
151
- this.schedulingLog.lastSequenceNumber -
152
- this.schedulingLog.firstSequenceNumber +
153
- 1,
151
+ this.schedulingLog.lastSequenceNumber - this.schedulingLog.firstSequenceNumber + 1,
154
152
  batchesProcessed: this.schedulingLog.numberOfBatchesProcessed,
155
153
  duration: formatTick(currentTime - this.schedulingLog.startTime),
156
154
  schedulingCount: this.schedulingCount,
@@ -12,7 +12,10 @@ import {
12
12
  type IGarbageCollectionData,
13
13
  type ITelemetryContext,
14
14
  } from "@fluidframework/runtime-definitions/internal";
15
- import { createResponseError, responseToException } from "@fluidframework/runtime-utils/internal";
15
+ import {
16
+ createResponseError,
17
+ responseToException,
18
+ } from "@fluidframework/runtime-utils/internal";
16
19
  import {
17
20
  ITelemetryLoggerExt,
18
21
  DataProcessingError,
@@ -56,7 +59,10 @@ import {
56
59
  urlToGCNodePath,
57
60
  } from "./gcHelpers.js";
58
61
  import { runGarbageCollection } from "./gcReferenceGraphAlgorithm.js";
59
- import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions.js";
62
+ import {
63
+ IGarbageCollectionSnapshotData,
64
+ IGarbageCollectionState,
65
+ } from "./gcSummaryDefinitions.js";
60
66
  import { GCSummaryStateTracker } from "./gcSummaryStateTracker.js";
61
67
  import { GCTelemetryTracker } from "./gcTelemetry.js";
62
68
  import {
@@ -242,10 +248,7 @@ export class GarbageCollector implements IGarbageCollector {
242
248
  return undefined;
243
249
  }
244
250
 
245
- const snapshotData = await getGCDataFromSnapshot(
246
- gcSnapshotTree,
247
- readAndParseBlob,
248
- );
251
+ const snapshotData = await getGCDataFromSnapshot(gcSnapshotTree, readAndParseBlob);
249
252
 
250
253
  // If the GC version in base snapshot does not match the GC version currently in effect, the GC data
251
254
  // in the snapshot cannot be interpreted correctly. Set everything to undefined except for
@@ -260,10 +263,7 @@ export class GarbageCollector implements IGarbageCollector {
260
263
  }
261
264
  return snapshotData;
262
265
  } catch (error) {
263
- const dpe = DataProcessingError.wrapIfUnrecognized(
264
- error,
265
- "FailedToInitializeGC",
266
- );
266
+ const dpe = DataProcessingError.wrapIfUnrecognized(error, "FailedToInitializeGC");
267
267
  dpe.addTelemetryProperties({
268
268
  gcConfigs: JSON.stringify(this.configs),
269
269
  });
@@ -746,7 +746,7 @@ export class GarbageCollector implements IGarbageCollector {
746
746
  const containerGCMessage: ContainerRuntimeGCMessage = {
747
747
  type: ContainerMessageType.GC,
748
748
  contents,
749
- compatDetails: { behavior: "Ignore" },
749
+ compatDetails: { behavior: "Ignore" }, // DEPRECATED: For temporary back compat only
750
750
  };
751
751
  this.submitMessage(containerGCMessage);
752
752
  return;
@@ -814,14 +814,16 @@ export class GarbageCollector implements IGarbageCollector {
814
814
  */
815
815
  const gcDataSuperSet = concatGarbageCollectionData(previousGCData, currentGCData);
816
816
  const newOutboundRoutesSinceLastRun: string[] = [];
817
- this.newReferencesSinceLastRun.forEach((outboundRoutes: string[], sourceNodeId: string) => {
818
- if (gcDataSuperSet.gcNodes[sourceNodeId] === undefined) {
819
- gcDataSuperSet.gcNodes[sourceNodeId] = outboundRoutes;
820
- } else {
821
- gcDataSuperSet.gcNodes[sourceNodeId].push(...outboundRoutes);
822
- }
823
- newOutboundRoutesSinceLastRun.push(...outboundRoutes);
824
- });
817
+ this.newReferencesSinceLastRun.forEach(
818
+ (outboundRoutes: string[], sourceNodeId: string) => {
819
+ if (gcDataSuperSet.gcNodes[sourceNodeId] === undefined) {
820
+ gcDataSuperSet.gcNodes[sourceNodeId] = outboundRoutes;
821
+ } else {
822
+ gcDataSuperSet.gcNodes[sourceNodeId].push(...outboundRoutes);
823
+ }
824
+ newOutboundRoutesSinceLastRun.push(...outboundRoutes);
825
+ },
826
+ );
825
827
 
826
828
  /**
827
829
  * Run GC on the above reference graph starting with root and all new outbound routes. This will generate a
@@ -929,10 +931,7 @@ export class GarbageCollector implements IGarbageCollector {
929
931
  }
930
932
  default: {
931
933
  if (
932
- !compatBehaviorAllowsGCMessageType(
933
- gcMessageType,
934
- message.compatDetails?.behavior,
935
- )
934
+ !compatBehaviorAllowsGCMessageType(gcMessageType, message.compatDetails?.behavior)
936
935
  ) {
937
936
  const error = DataProcessingError.create(
938
937
  `Garbage collection message of unknown type ${gcMessageType}`,
@@ -1096,7 +1095,7 @@ export class GarbageCollector implements IGarbageCollector {
1096
1095
  type: GarbageCollectionMessageType.TombstoneLoaded,
1097
1096
  nodePath,
1098
1097
  },
1099
- compatDetails: { behavior: "Ignore" },
1098
+ compatDetails: { behavior: "Ignore" }, // DEPRECATED: For temporary back compat only
1100
1099
  };
1101
1100
  this.submitMessage(containerGCMessage);
1102
1101
  }
@@ -122,7 +122,7 @@ export function generateGCConfigs(
122
122
  !gcEnabled || tombstoneTimeoutMs === undefined
123
123
  ? false
124
124
  : mc.config.getBoolean(runSweepKey) ??
125
- (sweepAllowed && createParams.gcOptions.enableGCSweep === true);
125
+ (sweepAllowed && createParams.gcOptions.enableGCSweep === true);
126
126
  const disableDatastoreSweep =
127
127
  mc.config.getBoolean(disableDatastoreSweepKey) === true ||
128
128
  createParams.gcOptions[gcDisableDataStoreSweepOptionName] === true;
@@ -199,7 +199,11 @@ export function generateGCConfigs(
199
199
  *
200
200
  * If there is no Session Expiry timeout, GC can never guarantee an object won't be revived, so return undefined.
201
201
  */
202
- function computeTombstoneTimeout(sessionExpiryTimeoutMs: number | undefined): number | undefined {
202
+ function computeTombstoneTimeout(
203
+ sessionExpiryTimeoutMs: number | undefined,
204
+ ): number | undefined {
203
205
  const bufferMs = oneDayMs;
204
- return sessionExpiryTimeoutMs && sessionExpiryTimeoutMs + maxSnapshotCacheExpiryMs + bufferMs;
206
+ return (
207
+ sessionExpiryTimeoutMs && sessionExpiryTimeoutMs + maxSnapshotCacheExpiryMs + bufferMs
208
+ );
205
209
  }