@fluidframework/container-runtime 2.0.0-internal.4.3.0 → 2.0.0-internal.5.0.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 (311) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/batchTracker.d.ts +4 -4
  3. package/dist/batchTracker.d.ts.map +1 -1
  4. package/dist/batchTracker.js +2 -2
  5. package/dist/batchTracker.js.map +1 -1
  6. package/dist/blobManager.d.ts.map +1 -1
  7. package/dist/blobManager.js +3 -2
  8. package/dist/blobManager.js.map +1 -1
  9. package/dist/connectionTelemetry.d.ts +2 -2
  10. package/dist/connectionTelemetry.d.ts.map +1 -1
  11. package/dist/connectionTelemetry.js.map +1 -1
  12. package/dist/containerRuntime.d.ts +12 -11
  13. package/dist/containerRuntime.d.ts.map +1 -1
  14. package/dist/containerRuntime.js +46 -19
  15. package/dist/containerRuntime.js.map +1 -1
  16. package/dist/dataStore.d.ts +2 -2
  17. package/dist/dataStore.d.ts.map +1 -1
  18. package/dist/dataStore.js +1 -1
  19. package/dist/dataStore.js.map +1 -1
  20. package/dist/dataStoreContext.d.ts +3 -3
  21. package/dist/dataStoreContext.d.ts.map +1 -1
  22. package/dist/dataStoreContext.js +1 -2
  23. package/dist/dataStoreContext.js.map +1 -1
  24. package/dist/dataStoreContexts.d.ts.map +1 -1
  25. package/dist/dataStoreContexts.js.map +1 -1
  26. package/dist/deltaScheduler.d.ts +2 -2
  27. package/dist/deltaScheduler.d.ts.map +1 -1
  28. package/dist/deltaScheduler.js +1 -1
  29. package/dist/deltaScheduler.js.map +1 -1
  30. package/dist/gc/garbageCollection.d.ts +57 -45
  31. package/dist/gc/garbageCollection.d.ts.map +1 -1
  32. package/dist/gc/garbageCollection.js +219 -203
  33. package/dist/gc/garbageCollection.js.map +1 -1
  34. package/dist/gc/gcConfigs.d.ts.map +1 -1
  35. package/dist/gc/gcConfigs.js +8 -10
  36. package/dist/gc/gcConfigs.js.map +1 -1
  37. package/dist/gc/gcDefinitions.d.ts +5 -3
  38. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  39. package/dist/gc/gcDefinitions.js.map +1 -1
  40. package/dist/gc/gcHelpers.d.ts +11 -1
  41. package/dist/gc/gcHelpers.d.ts.map +1 -1
  42. package/dist/gc/gcHelpers.js +18 -3
  43. package/dist/gc/gcHelpers.js.map +1 -1
  44. package/dist/gc/gcSummaryStateTracker.d.ts +6 -2
  45. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  46. package/dist/gc/gcSummaryStateTracker.js +16 -6
  47. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  48. package/dist/gc/gcTelemetry.d.ts +7 -7
  49. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  50. package/dist/gc/gcTelemetry.js +42 -22
  51. package/dist/gc/gcTelemetry.js.map +1 -1
  52. package/dist/gc/index.d.ts +1 -2
  53. package/dist/gc/index.d.ts.map +1 -1
  54. package/dist/gc/index.js +2 -5
  55. package/dist/gc/index.js.map +1 -1
  56. package/dist/id-compressor/idCompressor.d.ts +2 -2
  57. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  58. package/dist/id-compressor/idCompressor.js.map +1 -1
  59. package/dist/opLifecycle/definitions.d.ts +2 -2
  60. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  61. package/dist/opLifecycle/definitions.js.map +1 -1
  62. package/dist/opLifecycle/opCompressor.d.ts +2 -2
  63. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  64. package/dist/opLifecycle/opCompressor.js +3 -6
  65. package/dist/opLifecycle/opCompressor.js.map +1 -1
  66. package/dist/opLifecycle/opDecompressor.d.ts +2 -2
  67. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  68. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  69. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  70. package/dist/opLifecycle/opGroupingManager.js +5 -6
  71. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  72. package/dist/opLifecycle/opSplitter.d.ts +2 -2
  73. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  74. package/dist/opLifecycle/opSplitter.js +3 -3
  75. package/dist/opLifecycle/opSplitter.js.map +1 -1
  76. package/dist/opLifecycle/outbox.d.ts +2 -2
  77. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  78. package/dist/opLifecycle/outbox.js +7 -3
  79. package/dist/opLifecycle/outbox.js.map +1 -1
  80. package/dist/packageVersion.d.ts +1 -1
  81. package/dist/packageVersion.js +1 -1
  82. package/dist/packageVersion.js.map +1 -1
  83. package/dist/pendingStateManager.d.ts +18 -14
  84. package/dist/pendingStateManager.d.ts.map +1 -1
  85. package/dist/pendingStateManager.js +35 -55
  86. package/dist/pendingStateManager.js.map +1 -1
  87. package/dist/scheduleManager.d.ts +2 -2
  88. package/dist/scheduleManager.d.ts.map +1 -1
  89. package/dist/scheduleManager.js +15 -4
  90. package/dist/scheduleManager.js.map +1 -1
  91. package/dist/summary/orderedClientElection.d.ts +4 -3
  92. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  93. package/dist/summary/orderedClientElection.js +1 -1
  94. package/dist/summary/orderedClientElection.js.map +1 -1
  95. package/dist/summary/runningSummarizer.d.ts +4 -3
  96. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  97. package/dist/summary/runningSummarizer.js +5 -6
  98. package/dist/summary/runningSummarizer.js.map +1 -1
  99. package/dist/summary/summarizer.d.ts +2 -3
  100. package/dist/summary/summarizer.d.ts.map +1 -1
  101. package/dist/summary/summarizer.js +2 -3
  102. package/dist/summary/summarizer.js.map +1 -1
  103. package/dist/summary/summarizerClientElection.d.ts +3 -2
  104. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  105. package/dist/summary/summarizerClientElection.js.map +1 -1
  106. package/dist/summary/summarizerHeuristics.d.ts +2 -2
  107. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  108. package/dist/summary/summarizerHeuristics.js.map +1 -1
  109. package/dist/summary/summarizerNode/summarizerNode.d.ts +10 -9
  110. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  111. package/dist/summary/summarizerNode/summarizerNode.js +1 -1
  112. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  113. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +3 -3
  114. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  115. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  116. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +6 -6
  117. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  118. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  119. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  120. package/dist/summary/summarizerTypes.d.ts +8 -8
  121. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  122. package/dist/summary/summarizerTypes.js.map +1 -1
  123. package/dist/summary/summaryCollection.d.ts +3 -2
  124. package/dist/summary/summaryCollection.d.ts.map +1 -1
  125. package/dist/summary/summaryCollection.js.map +1 -1
  126. package/dist/summary/summaryGenerator.d.ts +2 -2
  127. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  128. package/dist/summary/summaryGenerator.js +1 -1
  129. package/dist/summary/summaryGenerator.js.map +1 -1
  130. package/dist/summary/summaryManager.d.ts +3 -2
  131. package/dist/summary/summaryManager.d.ts.map +1 -1
  132. package/dist/summary/summaryManager.js.map +1 -1
  133. package/lib/batchTracker.d.ts +4 -4
  134. package/lib/batchTracker.d.ts.map +1 -1
  135. package/lib/batchTracker.js +2 -2
  136. package/lib/batchTracker.js.map +1 -1
  137. package/lib/blobManager.d.ts.map +1 -1
  138. package/lib/blobManager.js +3 -2
  139. package/lib/blobManager.js.map +1 -1
  140. package/lib/connectionTelemetry.d.ts +2 -2
  141. package/lib/connectionTelemetry.d.ts.map +1 -1
  142. package/lib/connectionTelemetry.js.map +1 -1
  143. package/lib/containerRuntime.d.ts +12 -11
  144. package/lib/containerRuntime.d.ts.map +1 -1
  145. package/lib/containerRuntime.js +46 -19
  146. package/lib/containerRuntime.js.map +1 -1
  147. package/lib/dataStore.d.ts +2 -2
  148. package/lib/dataStore.d.ts.map +1 -1
  149. package/lib/dataStore.js +1 -1
  150. package/lib/dataStore.js.map +1 -1
  151. package/lib/dataStoreContext.d.ts +3 -3
  152. package/lib/dataStoreContext.d.ts.map +1 -1
  153. package/lib/dataStoreContext.js +1 -2
  154. package/lib/dataStoreContext.js.map +1 -1
  155. package/lib/dataStoreContexts.d.ts.map +1 -1
  156. package/lib/dataStoreContexts.js.map +1 -1
  157. package/lib/deltaScheduler.d.ts +2 -2
  158. package/lib/deltaScheduler.d.ts.map +1 -1
  159. package/lib/deltaScheduler.js +1 -1
  160. package/lib/deltaScheduler.js.map +1 -1
  161. package/lib/gc/garbageCollection.d.ts +57 -45
  162. package/lib/gc/garbageCollection.d.ts.map +1 -1
  163. package/lib/gc/garbageCollection.js +219 -203
  164. package/lib/gc/garbageCollection.js.map +1 -1
  165. package/lib/gc/gcConfigs.d.ts.map +1 -1
  166. package/lib/gc/gcConfigs.js +8 -10
  167. package/lib/gc/gcConfigs.js.map +1 -1
  168. package/lib/gc/gcDefinitions.d.ts +5 -3
  169. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  170. package/lib/gc/gcDefinitions.js.map +1 -1
  171. package/lib/gc/gcHelpers.d.ts +11 -1
  172. package/lib/gc/gcHelpers.d.ts.map +1 -1
  173. package/lib/gc/gcHelpers.js +16 -2
  174. package/lib/gc/gcHelpers.js.map +1 -1
  175. package/lib/gc/gcSummaryStateTracker.d.ts +6 -2
  176. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  177. package/lib/gc/gcSummaryStateTracker.js +16 -6
  178. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  179. package/lib/gc/gcTelemetry.d.ts +7 -7
  180. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  181. package/lib/gc/gcTelemetry.js +43 -23
  182. package/lib/gc/gcTelemetry.js.map +1 -1
  183. package/lib/gc/index.d.ts +1 -2
  184. package/lib/gc/index.d.ts.map +1 -1
  185. package/lib/gc/index.js +1 -2
  186. package/lib/gc/index.js.map +1 -1
  187. package/lib/id-compressor/idCompressor.d.ts +2 -2
  188. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  189. package/lib/id-compressor/idCompressor.js.map +1 -1
  190. package/lib/opLifecycle/definitions.d.ts +2 -2
  191. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  192. package/lib/opLifecycle/definitions.js.map +1 -1
  193. package/lib/opLifecycle/opCompressor.d.ts +2 -2
  194. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  195. package/lib/opLifecycle/opCompressor.js +3 -6
  196. package/lib/opLifecycle/opCompressor.js.map +1 -1
  197. package/lib/opLifecycle/opDecompressor.d.ts +2 -2
  198. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  199. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  200. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  201. package/lib/opLifecycle/opGroupingManager.js +5 -6
  202. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  203. package/lib/opLifecycle/opSplitter.d.ts +2 -2
  204. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  205. package/lib/opLifecycle/opSplitter.js +3 -3
  206. package/lib/opLifecycle/opSplitter.js.map +1 -1
  207. package/lib/opLifecycle/outbox.d.ts +2 -2
  208. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  209. package/lib/opLifecycle/outbox.js +7 -3
  210. package/lib/opLifecycle/outbox.js.map +1 -1
  211. package/lib/packageVersion.d.ts +1 -1
  212. package/lib/packageVersion.js +1 -1
  213. package/lib/packageVersion.js.map +1 -1
  214. package/lib/pendingStateManager.d.ts +18 -14
  215. package/lib/pendingStateManager.d.ts.map +1 -1
  216. package/lib/pendingStateManager.js +35 -55
  217. package/lib/pendingStateManager.js.map +1 -1
  218. package/lib/scheduleManager.d.ts +2 -2
  219. package/lib/scheduleManager.d.ts.map +1 -1
  220. package/lib/scheduleManager.js +15 -4
  221. package/lib/scheduleManager.js.map +1 -1
  222. package/lib/summary/orderedClientElection.d.ts +4 -3
  223. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  224. package/lib/summary/orderedClientElection.js +1 -1
  225. package/lib/summary/orderedClientElection.js.map +1 -1
  226. package/lib/summary/runningSummarizer.d.ts +4 -3
  227. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  228. package/lib/summary/runningSummarizer.js +5 -6
  229. package/lib/summary/runningSummarizer.js.map +1 -1
  230. package/lib/summary/summarizer.d.ts +2 -3
  231. package/lib/summary/summarizer.d.ts.map +1 -1
  232. package/lib/summary/summarizer.js +2 -3
  233. package/lib/summary/summarizer.js.map +1 -1
  234. package/lib/summary/summarizerClientElection.d.ts +3 -2
  235. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  236. package/lib/summary/summarizerClientElection.js.map +1 -1
  237. package/lib/summary/summarizerHeuristics.d.ts +2 -2
  238. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  239. package/lib/summary/summarizerHeuristics.js.map +1 -1
  240. package/lib/summary/summarizerNode/summarizerNode.d.ts +10 -9
  241. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  242. package/lib/summary/summarizerNode/summarizerNode.js +1 -1
  243. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  244. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +3 -3
  245. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  246. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  247. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +6 -6
  248. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  249. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  250. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  251. package/lib/summary/summarizerTypes.d.ts +8 -8
  252. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  253. package/lib/summary/summarizerTypes.js.map +1 -1
  254. package/lib/summary/summaryCollection.d.ts +3 -2
  255. package/lib/summary/summaryCollection.d.ts.map +1 -1
  256. package/lib/summary/summaryCollection.js.map +1 -1
  257. package/lib/summary/summaryGenerator.d.ts +2 -2
  258. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  259. package/lib/summary/summaryGenerator.js +1 -1
  260. package/lib/summary/summaryGenerator.js.map +1 -1
  261. package/lib/summary/summaryManager.d.ts +3 -2
  262. package/lib/summary/summaryManager.d.ts.map +1 -1
  263. package/lib/summary/summaryManager.js +1 -1
  264. package/lib/summary/summaryManager.js.map +1 -1
  265. package/package.json +18 -16
  266. package/src/batchTracker.ts +5 -6
  267. package/src/blobManager.ts +3 -2
  268. package/src/connectionTelemetry.ts +4 -5
  269. package/src/containerRuntime.ts +61 -32
  270. package/src/dataStore.ts +3 -4
  271. package/src/dataStoreContext.ts +4 -8
  272. package/src/dataStoreContexts.ts +3 -7
  273. package/src/deltaScheduler.ts +2 -3
  274. package/src/gc/garbageCollection.ts +276 -259
  275. package/src/gc/gcConfigs.ts +12 -11
  276. package/src/gc/gcDefinitions.ts +5 -3
  277. package/src/gc/gcHelpers.ts +20 -2
  278. package/src/gc/gcSummaryStateTracker.ts +19 -7
  279. package/src/gc/gcTelemetry.ts +56 -37
  280. package/src/gc/index.ts +1 -5
  281. package/src/id-compressor/idCompressor.ts +2 -2
  282. package/src/opLifecycle/definitions.ts +2 -2
  283. package/src/opLifecycle/opCompressor.ts +4 -8
  284. package/src/opLifecycle/opDecompressor.ts +2 -3
  285. package/src/opLifecycle/opGroupingManager.ts +6 -7
  286. package/src/opLifecycle/opSplitter.ts +4 -5
  287. package/src/opLifecycle/outbox.ts +10 -9
  288. package/src/packageVersion.ts +1 -1
  289. package/src/pendingStateManager.ts +60 -91
  290. package/src/scheduleManager.ts +22 -11
  291. package/src/summary/orderedClientElection.ts +5 -5
  292. package/src/summary/runningSummarizer.ts +11 -10
  293. package/src/summary/summarizer.ts +8 -8
  294. package/src/summary/summarizerClientElection.ts +3 -2
  295. package/src/summary/summarizerHeuristics.ts +2 -2
  296. package/src/summary/summarizerNode/summarizerNode.ts +15 -14
  297. package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -3
  298. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +10 -7
  299. package/src/summary/summarizerTypes.ts +8 -13
  300. package/src/summary/summaryCollection.ts +3 -2
  301. package/src/summary/summaryGenerator.ts +7 -3
  302. package/src/summary/summaryManager.ts +8 -9
  303. package/dist/gc/gcSweepReadyUsageDetection.d.ts +0 -53
  304. package/dist/gc/gcSweepReadyUsageDetection.d.ts.map +0 -1
  305. package/dist/gc/gcSweepReadyUsageDetection.js +0 -130
  306. package/dist/gc/gcSweepReadyUsageDetection.js.map +0 -1
  307. package/lib/gc/gcSweepReadyUsageDetection.d.ts +0 -53
  308. package/lib/gc/gcSweepReadyUsageDetection.d.ts.map +0 -1
  309. package/lib/gc/gcSweepReadyUsageDetection.js +0 -125
  310. package/lib/gc/gcSweepReadyUsageDetection.js.map +0 -1
  311. package/src/gc/gcSweepReadyUsageDetection.ts +0 -145
@@ -470,9 +470,10 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
470
470
 
471
471
  private onUploadResolve(localId: string, response: ICreateBlobResponseWithTTL) {
472
472
  const entry = this.pendingBlobs.get(localId);
473
+ assert(entry !== undefined, 0x6c8 /* pending blob entry not found for uploaded blob */);
473
474
  assert(
474
- entry?.status === PendingBlobStatus.OnlinePendingUpload ||
475
- entry?.status === PendingBlobStatus.OfflinePendingUpload,
475
+ entry.status === PendingBlobStatus.OnlinePendingUpload ||
476
+ entry.status === PendingBlobStatus.OfflinePendingUpload,
476
477
  0x386 /* Must have pending blob entry for uploaded blob */,
477
478
  );
478
479
  entry.storageId = response.id;
@@ -3,8 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { ChildLogger, TelemetryLogger } from "@fluidframework/telemetry-utils";
6
+ import { ITelemetryLoggerExt, ChildLogger, TelemetryLogger } from "@fluidframework/telemetry-utils";
8
7
  import { IDeltaManager } from "@fluidframework/container-definitions";
9
8
  import {
10
9
  IDocumentMessage,
@@ -69,12 +68,12 @@ class OpPerfTelemetry {
69
68
  private connectionStartTime = 0;
70
69
  private gap = 0;
71
70
 
72
- private readonly logger: ITelemetryLogger;
71
+ private readonly logger: ITelemetryLoggerExt;
73
72
 
74
73
  public constructor(
75
74
  private clientId: string | undefined,
76
75
  private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
77
- logger: ITelemetryLogger,
76
+ logger: ITelemetryLoggerExt,
78
77
  ) {
79
78
  this.logger = ChildLogger.create(logger, "OpPerf");
80
79
 
@@ -314,7 +313,7 @@ export interface IPerfSignalReport {
314
313
  export function ReportOpPerfTelemetry(
315
314
  clientId: string | undefined,
316
315
  deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
317
- logger: ITelemetryLogger,
316
+ logger: ITelemetryLoggerExt,
318
317
  ) {
319
318
  new OpPerfTelemetry(clientId, deltaManager, logger);
320
319
  }
@@ -2,11 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import {
6
- ITelemetryBaseLogger,
7
- ITelemetryGenericEvent,
8
- ITelemetryLogger,
9
- } from "@fluidframework/common-definitions";
5
+ import { ITelemetryBaseLogger, ITelemetryGenericEvent } from "@fluidframework/common-definitions";
10
6
  import {
11
7
  FluidObject,
12
8
  IFluidHandle,
@@ -45,6 +41,7 @@ import {
45
41
  MonitoringContext,
46
42
  loggerToMonitoringContext,
47
43
  wrapError,
44
+ ITelemetryLoggerExt,
48
45
  } from "@fluidframework/telemetry-utils";
49
46
  import {
50
47
  DriverHeader,
@@ -584,9 +581,6 @@ export class ContainerRuntime
584
581
  extends TypedEventEmitter<IContainerRuntimeEvents>
585
582
  implements IContainerRuntime, IRuntime, ISummarizerRuntime, ISummarizerInternalsProvider
586
583
  {
587
- public get IContainerRuntime() {
588
- return this;
589
- }
590
584
  public get IFluidRouter() {
591
585
  return this;
592
586
  }
@@ -828,7 +822,7 @@ export class ContainerRuntime
828
822
  opMetadata: Record<string, unknown> | undefined,
829
823
  ) => void {
830
824
  // eslint-disable-next-line @typescript-eslint/unbound-method
831
- return this.reSubmit;
825
+ return this.reSubmitCore;
832
826
  }
833
827
 
834
828
  public get disposeFn(): (error?: ICriticalContainerError) => void {
@@ -1054,7 +1048,7 @@ export class ContainerRuntime
1054
1048
  dataStoreAliasMap: [string, string][],
1055
1049
  private readonly runtimeOptions: Readonly<Required<IContainerRuntimeOptions>>,
1056
1050
  private readonly containerScope: FluidObject,
1057
- public readonly logger: ITelemetryLogger,
1051
+ public readonly logger: ITelemetryLoggerExt,
1058
1052
  existing: boolean,
1059
1053
  blobManagerSnapshot: IBlobManagerLoadInfo,
1060
1054
  private readonly _storage: IDocumentStorageService,
@@ -1305,7 +1299,6 @@ export class ContainerRuntime
1305
1299
  close: this.closeFn,
1306
1300
  connected: () => this.connected,
1307
1301
  reSubmit: this.reSubmit.bind(this),
1308
- rollback: this.rollback.bind(this),
1309
1302
  orderSequentially: this.orderSequentially.bind(this),
1310
1303
  },
1311
1304
  pendingRuntimeState?.pending,
@@ -1762,8 +1755,14 @@ export class ContainerRuntime
1762
1755
  return this.consecutiveReconnects < this.maxConsecutiveReconnects;
1763
1756
  }
1764
1757
 
1765
- private resetReconnectCount() {
1766
- this.consecutiveReconnects = 0;
1758
+ private resetReconnectCount(message?: ISequencedDocumentMessage) {
1759
+ // Chunked ops don't count towards making progress as they are sent
1760
+ // in their own batches before the originating batch is sent.
1761
+ // Therefore, receiving them while attempting to send the originating batch
1762
+ // does not mean that the container is making any progress.
1763
+ if (message?.type !== ContainerMessageType.ChunkedOp) {
1764
+ this.consecutiveReconnects = 0;
1765
+ }
1767
1766
  }
1768
1767
 
1769
1768
  private replayPendingStates() {
@@ -1812,7 +1811,23 @@ export class ContainerRuntime
1812
1811
  this.idCompressor = IdCompressor.deserialize(op.stashedState);
1813
1812
  }
1814
1813
 
1815
- private async applyStashedOp(type: ContainerMessageType, contents: unknown): Promise<unknown> {
1814
+ /**
1815
+ * Parse an op's type and actual content from given serialized content
1816
+ * ! Note: this format needs to be in-line with what is set in the "ContainerRuntime.submit(...)" method
1817
+ */
1818
+ private parseOpContent(serializedContent?: string): {
1819
+ type: ContainerMessageType;
1820
+ contents: unknown;
1821
+ } {
1822
+ assert(serializedContent !== undefined, "content must be defined");
1823
+ const parsed = JSON.parse(serializedContent);
1824
+ assert(parsed.type !== undefined, "incorrect op content format");
1825
+ return { type: parsed.type as ContainerMessageType, contents: parsed.contents };
1826
+ }
1827
+
1828
+ private async applyStashedOp(op: string): Promise<unknown> {
1829
+ // Need to parse from string for back-compat
1830
+ const { type, contents } = this.parseOpContent(op);
1816
1831
  switch (type) {
1817
1832
  case ContainerMessageType.FluidDataStoreOp:
1818
1833
  return this.dataStores.applyStashedOp(contents as IEnvelope);
@@ -2028,7 +2043,7 @@ export class ContainerRuntime
2028
2043
  // If we have processed a local op, this means that the container is
2029
2044
  // making progress and we can reset the counter for how many times
2030
2045
  // we have consecutively replayed the pending states
2031
- this.resetReconnectCount();
2046
+ this.resetReconnectCount(message);
2032
2047
  }
2033
2048
  } catch (e) {
2034
2049
  this.scheduleManager.afterOpProcessing(e, message);
@@ -2152,11 +2167,7 @@ export class ContainerRuntime
2152
2167
  // This will throw and close the container if rollback fails
2153
2168
  try {
2154
2169
  checkpoint.rollback((message: BatchMessage) =>
2155
- this.rollback(
2156
- message.deserializedContent.type,
2157
- message.deserializedContent.contents,
2158
- message.localOpMetadata,
2159
- ),
2170
+ this.rollback(message.contents, message.localOpMetadata),
2160
2171
  );
2161
2172
  } catch (err) {
2162
2173
  const error2 = wrapError(err, (message) => {
@@ -2409,7 +2420,7 @@ export class ContainerRuntime
2409
2420
  /** True to track the state for this summary in the SummarizerNodes; defaults to true */
2410
2421
  trackState?: boolean;
2411
2422
  /** Logger to use for correlated summary events */
2412
- summaryLogger?: ITelemetryLogger;
2423
+ summaryLogger?: ITelemetryLoggerExt;
2413
2424
  /** True to run garbage collection before summarizing; defaults to true */
2414
2425
  runGC?: boolean;
2415
2426
  /** True to generate full GC data */
@@ -2626,7 +2637,7 @@ export class ContainerRuntime
2626
2637
  public async collectGarbage(
2627
2638
  options: {
2628
2639
  /** Logger to use for logging GC events */
2629
- logger?: ITelemetryLogger;
2640
+ logger?: ITelemetryLoggerExt;
2630
2641
  /** True to run GC sweep phase after the mark phase */
2631
2642
  runSweep?: boolean;
2632
2643
  /** True to generate full GC data */
@@ -2791,7 +2802,7 @@ export class ContainerRuntime
2791
2802
  const summaryStats: IGeneratedSummaryStats = {
2792
2803
  dataStoreCount: this.dataStores.size,
2793
2804
  summarizedDataStoreCount: this.dataStores.size - handleCount,
2794
- gcStateUpdatedDataStoreCount: summarizeResult.gcStats?.updatedDataStoreCount,
2805
+ gcStateUpdatedDataStoreCount: this.garbageCollector.updatedDSCountSinceLastSummary,
2795
2806
  gcBlobNodeCount: gcSummaryTreeStats?.blobNodeCount,
2796
2807
  gcTotalBlobsSize: gcSummaryTreeStats?.totalBlobSize,
2797
2808
  summaryNumber,
@@ -2973,10 +2984,10 @@ export class ContainerRuntime
2973
2984
  };
2974
2985
  idAllocationBatchMessage = {
2975
2986
  contents: JSON.stringify(idAllocationMessage),
2976
- deserializedContent: idAllocationMessage,
2977
2987
  referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
2978
2988
  metadata: undefined,
2979
2989
  localOpMetadata: this.idCompressor?.serialize(true),
2990
+ type: ContainerMessageType.IdAllocation,
2980
2991
  };
2981
2992
  }
2982
2993
 
@@ -3014,7 +3025,7 @@ export class ContainerRuntime
3014
3025
 
3015
3026
  const message: BatchMessage = {
3016
3027
  contents: serializedContent,
3017
- deserializedContent: JSON.parse(serializedContent), // Deep copy in case caller changes reference object
3028
+ type,
3018
3029
  metadata,
3019
3030
  localOpMetadata,
3020
3031
  referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
@@ -3169,13 +3180,23 @@ export class ContainerRuntime
3169
3180
  }
3170
3181
  }
3171
3182
 
3183
+ private reSubmit(
3184
+ content: string,
3185
+ localOpMetadata: unknown,
3186
+ opMetadata: Record<string, unknown> | undefined,
3187
+ ) {
3188
+ // Need to parse from string for back-compat
3189
+ const { contents, type } = this.parseOpContent(content);
3190
+ this.reSubmitCore(type, contents, localOpMetadata, opMetadata);
3191
+ }
3192
+
3172
3193
  /**
3173
3194
  * Finds the right store and asks it to resubmit the message. This typically happens when we
3174
3195
  * reconnect and there are pending messages.
3175
3196
  * @param content - The content of the original message.
3176
3197
  * @param localOpMetadata - The local metadata associated with the original message.
3177
3198
  */
3178
- private reSubmit(
3199
+ private reSubmitCore(
3179
3200
  type: ContainerMessageType,
3180
3201
  content: any,
3181
3202
  localOpMetadata: unknown,
@@ -3189,7 +3210,13 @@ export class ContainerRuntime
3189
3210
  break;
3190
3211
  case ContainerMessageType.Attach:
3191
3212
  case ContainerMessageType.Alias:
3213
+ this.submit(type, content, localOpMetadata);
3214
+ break;
3192
3215
  case ContainerMessageType.IdAllocation:
3216
+ // Remove the stashedState from the op if it's a stashed op
3217
+ if (content.stashedState !== undefined) {
3218
+ delete content.stashedState;
3219
+ }
3193
3220
  this.submit(type, content, localOpMetadata);
3194
3221
  break;
3195
3222
  case ContainerMessageType.ChunkedOp:
@@ -3205,12 +3232,14 @@ export class ContainerRuntime
3205
3232
  }
3206
3233
  }
3207
3234
 
3208
- private rollback(type: ContainerMessageType, content: any, localOpMetadata: unknown) {
3235
+ private rollback(content: string | undefined, localOpMetadata: unknown) {
3236
+ // Need to parse from string for back-compat
3237
+ const { type, contents } = this.parseOpContent(content);
3209
3238
  switch (type) {
3210
3239
  case ContainerMessageType.FluidDataStoreOp:
3211
3240
  // For operations, call rollbackDataStoreOp which will find the right store
3212
3241
  // and trigger rollback on it.
3213
- this.dataStores.rollbackDataStoreOp(content, localOpMetadata);
3242
+ this.dataStores.rollbackDataStoreOp(contents as IEnvelope, localOpMetadata);
3214
3243
  break;
3215
3244
  default:
3216
3245
  throw new Error(`Can't rollback ${type}`);
@@ -3219,7 +3248,7 @@ export class ContainerRuntime
3219
3248
 
3220
3249
  private async waitForDeltaManagerToCatchup(
3221
3250
  latestSnapshotRefSeq: number,
3222
- summaryLogger: ITelemetryLogger,
3251
+ summaryLogger: ITelemetryLoggerExt,
3223
3252
  ): Promise<void> {
3224
3253
  if (latestSnapshotRefSeq > this.deltaManager.lastSequenceNumber) {
3225
3254
  // We need to catch up to the latest summary's reference sequence number before proceeding.
@@ -3331,7 +3360,7 @@ export class ContainerRuntime
3331
3360
  * @returns downloaded snapshot's reference sequence number
3332
3361
  */
3333
3362
  private async refreshLatestSummaryAckFromServer(
3334
- summaryLogger: ITelemetryLogger,
3363
+ summaryLogger: ITelemetryLoggerExt,
3335
3364
  ): Promise<{ latestSnapshotRefSeq: number; latestSnapshotVersionId: string | undefined }> {
3336
3365
  const readAndParseBlob = async <T>(id: string) => readAndParse<T>(this.storage, id);
3337
3366
  const { snapshotTree, versionId, latestSnapshotRefSeq } =
@@ -3365,7 +3394,7 @@ export class ContainerRuntime
3365
3394
  }
3366
3395
 
3367
3396
  private async fetchLatestSnapshotFromStorage(
3368
- logger: ITelemetryLogger,
3397
+ logger: ITelemetryLoggerExt,
3369
3398
  event: ITelemetryGenericEvent,
3370
3399
  readAndParseBlob: ReadAndParseBlob,
3371
3400
  ): Promise<{ snapshotTree: ISnapshotTree; versionId: string; latestSnapshotRefSeq: number }> {
@@ -3373,7 +3402,7 @@ export class ContainerRuntime
3373
3402
  }
3374
3403
 
3375
3404
  private async fetchSnapshotFromStorage(
3376
- logger: ITelemetryLogger,
3405
+ logger: ITelemetryLoggerExt,
3377
3406
  event: ITelemetryGenericEvent,
3378
3407
  readAndParseBlob: ReadAndParseBlob,
3379
3408
  versionId: string | null,
package/src/dataStore.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
6
+ import { ITelemetryLoggerExt, TelemetryDataTag } from "@fluidframework/telemetry-utils";
7
7
  import { assert, unreachableCase } from "@fluidframework/common-utils";
8
8
  import { AttachState } from "@fluidframework/container-definitions";
9
9
  import { UsageError } from "@fluidframework/container-utils";
@@ -13,7 +13,6 @@ import {
13
13
  IDataStore,
14
14
  IFluidDataStoreChannel,
15
15
  } from "@fluidframework/runtime-definitions";
16
- import { TelemetryDataTag } from "@fluidframework/telemetry-utils";
17
16
  import { ContainerRuntime } from "./containerRuntime";
18
17
  import { DataStores } from "./dataStores";
19
18
 
@@ -48,7 +47,7 @@ export const channelToDataStore = (
48
47
  internalId: string,
49
48
  runtime: ContainerRuntime,
50
49
  datastores: DataStores,
51
- logger: ITelemetryLogger,
50
+ logger: ITelemetryLoggerExt,
52
51
  ): IDataStore => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);
53
52
 
54
53
  enum AliasState {
@@ -175,7 +174,7 @@ class DataStore implements IDataStore {
175
174
  private readonly internalId: string,
176
175
  private readonly runtime: ContainerRuntime,
177
176
  private readonly datastores: DataStores,
178
- private readonly logger: ITelemetryLogger,
177
+ private readonly logger: ITelemetryLoggerExt,
179
178
  ) {
180
179
  this.pendingAliases = datastores.pendingAliases;
181
180
  }
@@ -3,11 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import {
7
- IDisposable,
8
- ITelemetryLogger,
9
- ITelemetryProperties,
10
- } from "@fluidframework/common-definitions";
6
+ import { IDisposable, ITelemetryProperties } from "@fluidframework/common-definitions";
11
7
  import { FluidObject, IRequest, IResponse, IFluidHandle } from "@fluidframework/core-interfaces";
12
8
  import {
13
9
  IAudience,
@@ -17,8 +13,7 @@ import {
17
13
  } from "@fluidframework/container-definitions";
18
14
  import { assert, Deferred, LazyPromise, TypedEventEmitter } from "@fluidframework/common-utils";
19
15
  import { IDocumentStorageService } from "@fluidframework/driver-definitions";
20
- import { readAndParse } from "@fluidframework/driver-utils";
21
- import { BlobTreeEntry } from "@fluidframework/protocol-base";
16
+ import { BlobTreeEntry, readAndParse } from "@fluidframework/driver-utils";
22
17
  import {
23
18
  IClientDetails,
24
19
  IDocumentMessage,
@@ -60,6 +55,7 @@ import {
60
55
  import {
61
56
  ChildLogger,
62
57
  generateStack,
58
+ ITelemetryLoggerExt,
63
59
  loggerToMonitoringContext,
64
60
  LoggingError,
65
61
  MonitoringContext,
@@ -163,7 +159,7 @@ export abstract class FluidDataStoreContext
163
159
  return this._containerRuntime.clientDetails;
164
160
  }
165
161
 
166
- public get logger(): ITelemetryLogger {
162
+ public get logger(): ITelemetryLoggerExt {
167
163
  return this._containerRuntime.logger;
168
164
  }
169
165
 
@@ -3,13 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import {
7
- IDisposable,
8
- ITelemetryBaseLogger,
9
- ITelemetryLogger,
10
- } from "@fluidframework/common-definitions";
6
+ import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/common-definitions";
11
7
  import { assert, Deferred, Lazy } from "@fluidframework/common-utils";
12
- import { ChildLogger } from "@fluidframework/telemetry-utils";
8
+ import { ChildLogger, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
13
9
  import { FluidDataStoreContext, LocalFluidDataStoreContext } from "./dataStoreContext";
14
10
 
15
11
  export class DataStoreContexts implements Iterable<[string, FluidDataStoreContext]>, IDisposable {
@@ -46,7 +42,7 @@ export class DataStoreContexts implements Iterable<[string, FluidDataStoreContex
46
42
  }
47
43
  });
48
44
 
49
- private readonly _logger: ITelemetryLogger;
45
+ private readonly _logger: ITelemetryLoggerExt;
50
46
 
51
47
  constructor(baseLogger: ITelemetryBaseLogger) {
52
48
  this._logger = ChildLogger.create(baseLogger);
@@ -3,12 +3,11 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
6
+ import { ITelemetryLoggerExt, TelemetryLogger } from "@fluidframework/telemetry-utils";
7
7
  import { performance } from "@fluidframework/common-utils";
8
8
  import { IDeltaManager } from "@fluidframework/container-definitions";
9
9
  import { IDocumentMessage, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
10
10
 
11
- import { TelemetryLogger } from "@fluidframework/telemetry-utils";
12
11
  /**
13
12
  * DeltaScheduler is responsible for the scheduling of inbound delta queue in cases where there
14
13
  * is more than one op a particular run of the queue. It does not schedule if there is just one
@@ -52,7 +51,7 @@ export class DeltaScheduler {
52
51
 
53
52
  constructor(
54
53
  deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
55
- private readonly logger: ITelemetryLogger,
54
+ private readonly logger: ITelemetryLoggerExt,
56
55
  ) {
57
56
  this.deltaManager = deltaManager;
58
57
  this.deltaManager.inbound.on("idle", () => {