@fluidframework/container-runtime 2.0.0-rc.1.0.4 → 2.0.0-rc.2.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 (690) hide show
  1. package/{.eslintrc.js → .eslintrc.cjs} +5 -5
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +54 -0
  4. package/README.md +45 -0
  5. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  6. package/api-extractor-lint.json +1 -1
  7. package/api-extractor.json +1 -1
  8. package/api-report/container-runtime.api.md +68 -30
  9. package/dist/batchTracker.d.ts +1 -2
  10. package/dist/batchTracker.d.ts.map +1 -1
  11. package/dist/batchTracker.js.map +1 -1
  12. package/dist/blobManager.js.map +1 -1
  13. package/dist/channelCollection.d.ts +223 -0
  14. package/dist/channelCollection.d.ts.map +1 -0
  15. package/dist/{dataStores.js → channelCollection.js} +399 -83
  16. package/dist/channelCollection.js.map +1 -0
  17. package/dist/connectionTelemetry.d.ts +11 -1
  18. package/dist/connectionTelemetry.d.ts.map +1 -1
  19. package/dist/connectionTelemetry.js +42 -4
  20. package/dist/connectionTelemetry.js.map +1 -1
  21. package/dist/container-runtime-alpha.d.ts +98 -40
  22. package/dist/container-runtime-beta.d.ts +27 -9
  23. package/dist/container-runtime-public.d.ts +27 -9
  24. package/dist/container-runtime-untrimmed.d.ts +123 -40
  25. package/dist/containerHandleContext.d.ts +1 -1
  26. package/dist/containerHandleContext.d.ts.map +1 -1
  27. package/dist/containerHandleContext.js.map +1 -1
  28. package/dist/containerRuntime.d.ts +79 -55
  29. package/dist/containerRuntime.d.ts.map +1 -1
  30. package/dist/containerRuntime.js +541 -411
  31. package/dist/containerRuntime.js.map +1 -1
  32. package/dist/dataStore.d.ts +2 -3
  33. package/dist/dataStore.d.ts.map +1 -1
  34. package/dist/dataStore.js +12 -11
  35. package/dist/dataStore.js.map +1 -1
  36. package/dist/dataStoreContext.d.ts +71 -30
  37. package/dist/dataStoreContext.d.ts.map +1 -1
  38. package/dist/dataStoreContext.js +182 -141
  39. package/dist/dataStoreContext.js.map +1 -1
  40. package/dist/dataStoreContexts.d.ts +1 -1
  41. package/dist/dataStoreContexts.d.ts.map +1 -1
  42. package/dist/dataStoreContexts.js.map +1 -1
  43. package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
  44. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  45. package/dist/deltaManagerSummarizerProxy.js +91 -5
  46. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  47. package/dist/gc/garbageCollection.d.ts +22 -5
  48. package/dist/gc/garbageCollection.d.ts.map +1 -1
  49. package/dist/gc/garbageCollection.js +134 -75
  50. package/dist/gc/garbageCollection.js.map +1 -1
  51. package/dist/gc/gcConfigs.d.ts +2 -2
  52. package/dist/gc/gcConfigs.d.ts.map +1 -1
  53. package/dist/gc/gcConfigs.js +21 -21
  54. package/dist/gc/gcConfigs.js.map +1 -1
  55. package/dist/gc/gcDefinitions.d.ts +29 -6
  56. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  57. package/dist/gc/gcDefinitions.js +5 -1
  58. package/dist/gc/gcDefinitions.js.map +1 -1
  59. package/dist/gc/gcHelpers.d.ts +2 -2
  60. package/dist/gc/gcHelpers.d.ts.map +1 -1
  61. package/dist/gc/gcHelpers.js.map +1 -1
  62. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
  63. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
  64. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  65. package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
  66. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  67. package/dist/gc/gcSummaryStateTracker.js +18 -6
  68. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  69. package/dist/gc/gcTelemetry.d.ts +7 -7
  70. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  71. package/dist/gc/gcTelemetry.js +20 -20
  72. package/dist/gc/gcTelemetry.js.map +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.d.ts +6 -1
  74. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  75. package/dist/gc/gcUnreferencedStateTracker.js +22 -11
  76. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  77. package/dist/gc/index.d.ts +8 -8
  78. package/dist/gc/index.d.ts.map +1 -1
  79. package/dist/gc/index.js +40 -38
  80. package/dist/gc/index.js.map +1 -1
  81. package/dist/index.d.ts +8 -20
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +28 -40
  84. package/dist/index.js.map +1 -1
  85. package/dist/messageTypes.d.ts +4 -4
  86. package/dist/messageTypes.d.ts.map +1 -1
  87. package/dist/messageTypes.js.map +1 -1
  88. package/dist/opLifecycle/batchManager.d.ts +2 -2
  89. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  90. package/dist/opLifecycle/batchManager.js.map +1 -1
  91. package/dist/opLifecycle/definitions.d.ts +2 -2
  92. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  93. package/dist/opLifecycle/definitions.js.map +1 -1
  94. package/dist/opLifecycle/index.d.ts +8 -8
  95. package/dist/opLifecycle/index.d.ts.map +1 -1
  96. package/dist/opLifecycle/index.js +18 -18
  97. package/dist/opLifecycle/index.js.map +1 -1
  98. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  99. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  100. package/dist/opLifecycle/opCompressor.js +4 -4
  101. package/dist/opLifecycle/opCompressor.js.map +1 -1
  102. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  103. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  104. package/dist/opLifecycle/opDecompressor.js +3 -3
  105. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  106. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  107. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  108. package/dist/opLifecycle/opGroupingManager.js +1 -10
  109. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  110. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  111. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  112. package/dist/opLifecycle/opSplitter.js +5 -5
  113. package/dist/opLifecycle/opSplitter.js.map +1 -1
  114. package/dist/opLifecycle/outbox.d.ts +7 -7
  115. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  116. package/dist/opLifecycle/outbox.js +20 -12
  117. package/dist/opLifecycle/outbox.js.map +1 -1
  118. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  119. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  120. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  121. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  122. package/dist/package.json +3 -0
  123. package/dist/packageVersion.d.ts +1 -1
  124. package/dist/packageVersion.js +1 -1
  125. package/dist/packageVersion.js.map +1 -1
  126. package/dist/pendingStateManager.d.ts +2 -1
  127. package/dist/pendingStateManager.d.ts.map +1 -1
  128. package/dist/pendingStateManager.js +18 -10
  129. package/dist/pendingStateManager.js.map +1 -1
  130. package/dist/scheduleManager.d.ts +1 -2
  131. package/dist/scheduleManager.d.ts.map +1 -1
  132. package/dist/scheduleManager.js +5 -5
  133. package/dist/scheduleManager.js.map +1 -1
  134. package/dist/summary/index.d.ts +12 -12
  135. package/dist/summary/index.d.ts.map +1 -1
  136. package/dist/summary/index.js +43 -43
  137. package/dist/summary/index.js.map +1 -1
  138. package/dist/summary/orderedClientElection.js +8 -8
  139. package/dist/summary/orderedClientElection.js.map +1 -1
  140. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  141. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  142. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  143. package/dist/summary/runningSummarizer.d.ts +11 -10
  144. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  145. package/dist/summary/runningSummarizer.js +114 -81
  146. package/dist/summary/runningSummarizer.js.map +1 -1
  147. package/dist/summary/summarizer.d.ts +4 -4
  148. package/dist/summary/summarizer.d.ts.map +1 -1
  149. package/dist/summary/summarizer.js +6 -6
  150. package/dist/summary/summarizer.js.map +1 -1
  151. package/dist/summary/summarizerClientElection.d.ts +2 -2
  152. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  153. package/dist/summary/summarizerClientElection.js.map +1 -1
  154. package/dist/summary/summarizerHeuristics.d.ts +3 -3
  155. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  156. package/dist/summary/summarizerHeuristics.js.map +1 -1
  157. package/dist/summary/summarizerNode/index.d.ts +3 -3
  158. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  159. package/dist/summary/summarizerNode/index.js +4 -4
  160. package/dist/summary/summarizerNode/index.js.map +1 -1
  161. package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
  162. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  163. package/dist/summary/summarizerNode/summarizerNode.js +45 -57
  164. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  165. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
  166. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  167. package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
  168. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
  170. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  173. package/dist/summary/summarizerTypes.d.ts +10 -21
  174. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  175. package/dist/summary/summarizerTypes.js.map +1 -1
  176. package/dist/summary/summaryFormat.d.ts +15 -2
  177. package/dist/summary/summaryFormat.d.ts.map +1 -1
  178. package/dist/summary/summaryFormat.js.map +1 -1
  179. package/dist/summary/summaryGenerator.d.ts +6 -5
  180. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  181. package/dist/summary/summaryGenerator.js +10 -1
  182. package/dist/summary/summaryGenerator.js.map +1 -1
  183. package/dist/summary/summaryManager.d.ts +5 -6
  184. package/dist/summary/summaryManager.d.ts.map +1 -1
  185. package/dist/summary/summaryManager.js +4 -5
  186. package/dist/summary/summaryManager.js.map +1 -1
  187. package/dist/tsdoc-metadata.json +1 -1
  188. package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
  189. package/lib/batchTracker.d.ts.map +1 -0
  190. package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
  191. package/lib/batchTracker.js.map +1 -0
  192. package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
  193. package/lib/blobManager.d.ts.map +1 -0
  194. package/lib/{blobManager.mjs → blobManager.js} +1 -1
  195. package/lib/blobManager.js.map +1 -0
  196. package/lib/channelCollection.d.ts +223 -0
  197. package/lib/channelCollection.d.ts.map +1 -0
  198. package/lib/{dataStores.mjs → channelCollection.js} +384 -71
  199. package/lib/channelCollection.js.map +1 -0
  200. package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
  201. package/lib/connectionTelemetry.d.ts.map +1 -0
  202. package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
  203. package/lib/connectionTelemetry.js.map +1 -0
  204. package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +98 -40
  205. package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
  206. package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
  207. package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +123 -40
  208. package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
  209. package/lib/containerHandleContext.d.ts.map +1 -0
  210. package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
  211. package/lib/containerHandleContext.js.map +1 -0
  212. package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +84 -56
  213. package/lib/containerRuntime.d.ts.map +1 -0
  214. package/lib/{containerRuntime.mjs → containerRuntime.js} +460 -332
  215. package/lib/containerRuntime.js.map +1 -0
  216. package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
  217. package/lib/dataStore.d.ts.map +1 -0
  218. package/lib/{dataStore.mjs → dataStore.js} +13 -12
  219. package/lib/dataStore.js.map +1 -0
  220. package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +72 -31
  221. package/lib/dataStoreContext.d.ts.map +1 -0
  222. package/lib/{dataStoreContext.mjs → dataStoreContext.js} +174 -133
  223. package/lib/dataStoreContext.js.map +1 -0
  224. package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
  225. package/lib/dataStoreContexts.d.ts.map +1 -0
  226. package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
  227. package/lib/dataStoreContexts.js.map +1 -0
  228. package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
  229. package/lib/dataStoreRegistry.d.ts.map +1 -0
  230. package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
  231. package/lib/dataStoreRegistry.js.map +1 -0
  232. package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
  233. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  234. package/lib/deltaManagerSummarizerProxy.js +124 -0
  235. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  236. package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
  237. package/lib/deltaScheduler.d.ts.map +1 -0
  238. package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
  239. package/lib/deltaScheduler.js.map +1 -0
  240. package/lib/{error.d.mts → error.d.ts} +1 -1
  241. package/lib/error.d.ts.map +1 -0
  242. package/lib/{error.mjs → error.js} +1 -1
  243. package/lib/error.js.map +1 -0
  244. package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +23 -6
  245. package/lib/gc/garbageCollection.d.ts.map +1 -0
  246. package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +103 -44
  247. package/lib/gc/garbageCollection.js.map +1 -0
  248. package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
  249. package/lib/gc/gcConfigs.d.ts.map +1 -0
  250. package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
  251. package/lib/gc/gcConfigs.js.map +1 -0
  252. package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +30 -7
  253. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  254. package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +5 -1
  255. package/lib/gc/gcDefinitions.js.map +1 -0
  256. package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
  257. package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
  258. package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
  259. package/lib/gc/gcHelpers.js.map +1 -0
  260. package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
  261. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  262. package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
  263. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  264. package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
  265. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  266. package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
  267. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  268. package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
  269. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  270. package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
  271. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  272. package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +8 -8
  273. package/lib/gc/gcTelemetry.d.ts.map +1 -0
  274. package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -5
  275. package/lib/gc/gcTelemetry.js.map +1 -0
  276. package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +7 -2
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  278. package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +12 -2
  279. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  280. package/lib/gc/{index.d.mts → index.d.ts} +9 -9
  281. package/lib/gc/index.d.ts.map +1 -0
  282. package/lib/gc/{index.mjs → index.js} +8 -8
  283. package/lib/gc/index.js.map +1 -0
  284. package/lib/{index.d.mts → index.d.ts} +9 -21
  285. package/lib/index.d.ts.map +1 -0
  286. package/lib/index.js +12 -0
  287. package/lib/index.js.map +1 -0
  288. package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
  289. package/lib/messageTypes.d.ts.map +1 -0
  290. package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
  291. package/lib/messageTypes.js.map +1 -0
  292. package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
  293. package/lib/metadata.d.ts.map +1 -0
  294. package/lib/{metadata.mjs → metadata.js} +1 -1
  295. package/lib/metadata.js.map +1 -0
  296. package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
  297. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  298. package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
  299. package/lib/opLifecycle/batchManager.js.map +1 -0
  300. package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
  301. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  302. package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
  303. package/lib/opLifecycle/definitions.js.map +1 -0
  304. package/lib/opLifecycle/index.d.ts +13 -0
  305. package/lib/opLifecycle/index.d.ts.map +1 -0
  306. package/lib/opLifecycle/index.js +12 -0
  307. package/lib/opLifecycle/index.js.map +1 -0
  308. package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
  309. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  310. package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
  311. package/lib/opLifecycle/opCompressor.js.map +1 -0
  312. package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
  313. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  314. package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
  315. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  316. package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
  317. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
  318. package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
  319. package/lib/opLifecycle/opGroupingManager.js.map +1 -0
  320. package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
  321. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  322. package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
  323. package/lib/opLifecycle/opSplitter.js.map +1 -0
  324. package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
  325. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  326. package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
  327. package/lib/opLifecycle/outbox.js.map +1 -0
  328. package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
  329. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  330. package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
  331. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  332. package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
  333. package/lib/opProperties.d.ts.map +1 -0
  334. package/lib/{opProperties.mjs → opProperties.js} +1 -1
  335. package/lib/opProperties.js.map +1 -0
  336. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  337. package/lib/packageVersion.d.ts.map +1 -0
  338. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  339. package/lib/packageVersion.js.map +1 -0
  340. package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
  341. package/lib/pendingStateManager.d.ts.map +1 -0
  342. package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
  343. package/lib/pendingStateManager.js.map +1 -0
  344. package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
  345. package/lib/scheduleManager.d.ts.map +1 -0
  346. package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
  347. package/lib/scheduleManager.js.map +1 -0
  348. package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
  349. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  350. package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
  351. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  352. package/lib/summary/{index.d.mts → index.d.ts} +13 -13
  353. package/lib/summary/index.d.ts.map +1 -0
  354. package/lib/summary/{index.mjs → index.js} +12 -12
  355. package/lib/summary/index.js.map +1 -0
  356. package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
  357. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  358. package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
  359. package/lib/summary/orderedClientElection.js.map +1 -0
  360. package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
  361. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  362. package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
  363. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  364. package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
  365. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  366. package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
  367. package/lib/summary/runningSummarizer.js.map +1 -0
  368. package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
  369. package/lib/summary/summarizer.d.ts.map +1 -0
  370. package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
  371. package/lib/summary/summarizer.js.map +1 -0
  372. package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
  373. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  374. package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
  375. package/lib/summary/summarizerClientElection.js.map +1 -0
  376. package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
  377. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  378. package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
  379. package/lib/summary/summarizerHeuristics.js.map +1 -0
  380. package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
  381. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  382. package/lib/summary/summarizerNode/index.js +7 -0
  383. package/lib/summary/summarizerNode/index.js.map +1 -0
  384. package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
  385. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  386. package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
  387. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  388. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
  389. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  390. package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
  391. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  392. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
  393. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  394. package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
  395. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  396. package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
  397. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  398. package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
  399. package/lib/summary/summarizerTypes.js.map +1 -0
  400. package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
  401. package/lib/summary/summaryCollection.d.ts.map +1 -0
  402. package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
  403. package/lib/summary/summaryCollection.js.map +1 -0
  404. package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
  405. package/lib/summary/summaryFormat.d.ts.map +1 -0
  406. package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
  407. package/lib/summary/summaryFormat.js.map +1 -0
  408. package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
  409. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  410. package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
  411. package/lib/summary/summaryGenerator.js.map +1 -0
  412. package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
  413. package/lib/summary/summaryManager.d.ts.map +1 -0
  414. package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
  415. package/lib/summary/summaryManager.js.map +1 -0
  416. package/lib/test/batchTracker.spec.js +88 -0
  417. package/lib/test/batchTracker.spec.js.map +1 -0
  418. package/lib/test/blobManager.spec.js +835 -0
  419. package/lib/test/blobManager.spec.js.map +1 -0
  420. package/lib/test/channelCollection.spec.js +141 -0
  421. package/lib/test/channelCollection.spec.js.map +1 -0
  422. package/lib/test/containerRuntime.spec.js +1748 -0
  423. package/lib/test/containerRuntime.spec.js.map +1 -0
  424. package/lib/test/dataStoreContext.spec.js +801 -0
  425. package/lib/test/dataStoreContext.spec.js.map +1 -0
  426. package/lib/test/dataStoreCreation.spec.js +312 -0
  427. package/lib/test/dataStoreCreation.spec.js.map +1 -0
  428. package/lib/test/dataStoreRegistry.spec.js +26 -0
  429. package/lib/test/dataStoreRegistry.spec.js.map +1 -0
  430. package/lib/test/fuzz/fuzzUtils.js +66 -0
  431. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  432. package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
  433. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
  434. package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
  435. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
  436. package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
  437. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
  438. package/lib/test/gc/garbageCollection.spec.js +1465 -0
  439. package/lib/test/gc/garbageCollection.spec.js.map +1 -0
  440. package/lib/test/gc/gcConfigs.spec.js +690 -0
  441. package/lib/test/gc/gcConfigs.spec.js.map +1 -0
  442. package/lib/test/gc/gcHelpers.spec.js +110 -0
  443. package/lib/test/gc/gcHelpers.spec.js.map +1 -0
  444. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
  445. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
  446. package/lib/test/gc/gcStats.spec.js +391 -0
  447. package/lib/test/gc/gcStats.spec.js.map +1 -0
  448. package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
  449. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
  450. package/lib/test/gc/gcTelemetry.spec.js +530 -0
  451. package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
  452. package/lib/test/gc/gcUnitTestHelpers.js +29 -0
  453. package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
  454. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
  455. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
  456. package/lib/test/getPendingBlobs.spec.js +193 -0
  457. package/lib/test/getPendingBlobs.spec.js.map +1 -0
  458. package/lib/test/hardwareStats.spec.js +93 -0
  459. package/lib/test/hardwareStats.spec.js.map +1 -0
  460. package/lib/test/index.js +6 -0
  461. package/lib/test/index.js.map +1 -0
  462. package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
  463. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
  464. package/lib/test/opLifecycle/batchManager.spec.js +189 -0
  465. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
  466. package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
  467. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
  468. package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
  469. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
  470. package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
  471. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
  472. package/lib/test/opLifecycle/outbox.spec.js +675 -0
  473. package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
  474. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
  475. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
  476. package/lib/test/pendingStateManager.spec.js +329 -0
  477. package/lib/test/pendingStateManager.spec.js.map +1 -0
  478. package/lib/test/scheduleManager.spec.js +270 -0
  479. package/lib/test/scheduleManager.spec.js.map +1 -0
  480. package/lib/test/summarizerNode.spec.js +326 -0
  481. package/lib/test/summarizerNode.spec.js.map +1 -0
  482. package/lib/test/summarizerNodeWithGc.spec.js +318 -0
  483. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
  484. package/lib/test/summary/orderedClientElection.spec.js +535 -0
  485. package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
  486. package/lib/test/summary/runningSummarizer.spec.js +1349 -0
  487. package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
  488. package/lib/test/summary/summarizer.spec.js +29 -0
  489. package/lib/test/summary/summarizer.spec.js.map +1 -0
  490. package/lib/test/summary/summarizerClientElection.spec.js +436 -0
  491. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
  492. package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
  493. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
  494. package/lib/test/summary/summaryCollection.spec.js +200 -0
  495. package/lib/test/summary/summaryCollection.spec.js.map +1 -0
  496. package/lib/test/summary/summaryManager.spec.js +430 -0
  497. package/lib/test/summary/summaryManager.spec.js.map +1 -0
  498. package/lib/test/summary/testQuorumClients.js +34 -0
  499. package/lib/test/summary/testQuorumClients.js.map +1 -0
  500. package/lib/test/throttler.spec.js +175 -0
  501. package/lib/test/throttler.spec.js.map +1 -0
  502. package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
  503. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
  504. package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
  505. package/lib/throttler.d.ts.map +1 -0
  506. package/lib/{throttler.mjs → throttler.js} +1 -1
  507. package/lib/throttler.js.map +1 -0
  508. package/package.json +99 -88
  509. package/src/batchTracker.ts +1 -1
  510. package/src/blobManager.ts +1 -1
  511. package/src/{dataStores.ts → channelCollection.ts} +520 -84
  512. package/src/connectionTelemetry.ts +42 -3
  513. package/src/containerHandleContext.ts +1 -1
  514. package/src/containerRuntime.ts +661 -464
  515. package/src/dataStore.ts +13 -15
  516. package/src/dataStoreContext.ts +257 -184
  517. package/src/dataStoreContexts.ts +1 -1
  518. package/src/deltaManagerSummarizerProxy.ts +132 -7
  519. package/src/gc/garbageCollection.ts +121 -46
  520. package/src/gc/gcConfigs.ts +3 -3
  521. package/src/gc/gcDefinitions.ts +30 -7
  522. package/src/gc/gcHelpers.ts +2 -2
  523. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  524. package/src/gc/gcSummaryStateTracker.ts +19 -7
  525. package/src/gc/gcTelemetry.ts +10 -9
  526. package/src/gc/gcUnreferencedStateTracker.ts +12 -1
  527. package/src/gc/index.ts +10 -8
  528. package/src/index.ts +16 -27
  529. package/src/messageTypes.ts +4 -4
  530. package/src/opLifecycle/README.md +2 -4
  531. package/src/opLifecycle/batchManager.ts +2 -2
  532. package/src/opLifecycle/definitions.ts +2 -2
  533. package/src/opLifecycle/index.ts +8 -8
  534. package/src/opLifecycle/opCompressor.ts +3 -3
  535. package/src/opLifecycle/opDecompressor.ts +3 -3
  536. package/src/opLifecycle/opGroupingManager.ts +3 -12
  537. package/src/opLifecycle/opSplitter.ts +3 -3
  538. package/src/opLifecycle/outbox.ts +29 -9
  539. package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
  540. package/src/packageVersion.ts +1 -1
  541. package/src/pendingStateManager.ts +19 -13
  542. package/src/scheduleManager.ts +4 -4
  543. package/src/summary/index.ts +13 -12
  544. package/src/summary/orderedClientElection.ts +1 -1
  545. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  546. package/src/summary/runningSummarizer.ts +141 -93
  547. package/src/summary/summarizer.ts +7 -7
  548. package/src/summary/summarizerClientElection.ts +2 -2
  549. package/src/summary/summarizerHeuristics.ts +3 -3
  550. package/src/summary/summarizerNode/index.ts +6 -3
  551. package/src/summary/summarizerNode/summarizerNode.ts +54 -69
  552. package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
  553. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
  554. package/src/summary/summarizerTypes.ts +12 -24
  555. package/src/summary/summaryFormat.ts +16 -2
  556. package/src/summary/summaryGenerator.ts +16 -4
  557. package/src/summary/summaryManager.ts +6 -7
  558. package/tsconfig.cjs.json +7 -0
  559. package/tsconfig.json +2 -5
  560. package/dist/dataStores.d.ts +0 -149
  561. package/dist/dataStores.d.ts.map +0 -1
  562. package/dist/dataStores.js.map +0 -1
  563. package/dist/deltaManagerProxyBase.d.ts.map +0 -1
  564. package/dist/deltaManagerProxyBase.js +0 -77
  565. package/dist/deltaManagerProxyBase.js.map +0 -1
  566. package/lib/batchTracker.d.mts.map +0 -1
  567. package/lib/batchTracker.mjs.map +0 -1
  568. package/lib/blobManager.d.mts.map +0 -1
  569. package/lib/blobManager.mjs.map +0 -1
  570. package/lib/connectionTelemetry.d.mts.map +0 -1
  571. package/lib/connectionTelemetry.mjs.map +0 -1
  572. package/lib/containerHandleContext.d.mts.map +0 -1
  573. package/lib/containerHandleContext.mjs.map +0 -1
  574. package/lib/containerRuntime.d.mts.map +0 -1
  575. package/lib/containerRuntime.mjs.map +0 -1
  576. package/lib/dataStore.d.mts.map +0 -1
  577. package/lib/dataStore.mjs.map +0 -1
  578. package/lib/dataStoreContext.d.mts.map +0 -1
  579. package/lib/dataStoreContext.mjs.map +0 -1
  580. package/lib/dataStoreContexts.d.mts.map +0 -1
  581. package/lib/dataStoreContexts.mjs.map +0 -1
  582. package/lib/dataStoreRegistry.d.mts.map +0 -1
  583. package/lib/dataStoreRegistry.mjs.map +0 -1
  584. package/lib/dataStores.d.mts +0 -149
  585. package/lib/dataStores.d.mts.map +0 -1
  586. package/lib/dataStores.mjs.map +0 -1
  587. package/lib/deltaManagerProxyBase.d.mts +0 -35
  588. package/lib/deltaManagerProxyBase.d.mts.map +0 -1
  589. package/lib/deltaManagerProxyBase.mjs +0 -73
  590. package/lib/deltaManagerProxyBase.mjs.map +0 -1
  591. package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
  592. package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
  593. package/lib/deltaManagerSummarizerProxy.mjs +0 -38
  594. package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
  595. package/lib/deltaScheduler.d.mts.map +0 -1
  596. package/lib/deltaScheduler.mjs.map +0 -1
  597. package/lib/error.d.mts.map +0 -1
  598. package/lib/error.mjs.map +0 -1
  599. package/lib/gc/garbageCollection.d.mts.map +0 -1
  600. package/lib/gc/garbageCollection.mjs.map +0 -1
  601. package/lib/gc/gcConfigs.d.mts.map +0 -1
  602. package/lib/gc/gcConfigs.mjs.map +0 -1
  603. package/lib/gc/gcDefinitions.d.mts.map +0 -1
  604. package/lib/gc/gcDefinitions.mjs.map +0 -1
  605. package/lib/gc/gcHelpers.mjs.map +0 -1
  606. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
  607. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
  608. package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
  609. package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
  610. package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
  611. package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
  612. package/lib/gc/gcTelemetry.d.mts.map +0 -1
  613. package/lib/gc/gcTelemetry.mjs.map +0 -1
  614. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
  615. package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
  616. package/lib/gc/index.d.mts.map +0 -1
  617. package/lib/gc/index.mjs.map +0 -1
  618. package/lib/index.d.mts.map +0 -1
  619. package/lib/index.mjs +0 -24
  620. package/lib/index.mjs.map +0 -1
  621. package/lib/messageTypes.d.mts.map +0 -1
  622. package/lib/messageTypes.mjs.map +0 -1
  623. package/lib/metadata.d.mts.map +0 -1
  624. package/lib/metadata.mjs.map +0 -1
  625. package/lib/opLifecycle/batchManager.d.mts.map +0 -1
  626. package/lib/opLifecycle/batchManager.mjs.map +0 -1
  627. package/lib/opLifecycle/definitions.d.mts.map +0 -1
  628. package/lib/opLifecycle/definitions.mjs.map +0 -1
  629. package/lib/opLifecycle/index.d.mts +0 -13
  630. package/lib/opLifecycle/index.d.mts.map +0 -1
  631. package/lib/opLifecycle/index.mjs +0 -12
  632. package/lib/opLifecycle/index.mjs.map +0 -1
  633. package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
  634. package/lib/opLifecycle/opCompressor.mjs.map +0 -1
  635. package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
  636. package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
  637. package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
  638. package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
  639. package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
  640. package/lib/opLifecycle/opSplitter.mjs.map +0 -1
  641. package/lib/opLifecycle/outbox.d.mts.map +0 -1
  642. package/lib/opLifecycle/outbox.mjs.map +0 -1
  643. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
  644. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
  645. package/lib/opProperties.d.mts.map +0 -1
  646. package/lib/opProperties.mjs.map +0 -1
  647. package/lib/packageVersion.d.mts.map +0 -1
  648. package/lib/packageVersion.mjs.map +0 -1
  649. package/lib/pendingStateManager.d.mts.map +0 -1
  650. package/lib/pendingStateManager.mjs.map +0 -1
  651. package/lib/scheduleManager.d.mts.map +0 -1
  652. package/lib/scheduleManager.mjs.map +0 -1
  653. package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
  654. package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
  655. package/lib/summary/index.d.mts.map +0 -1
  656. package/lib/summary/index.mjs.map +0 -1
  657. package/lib/summary/orderedClientElection.d.mts.map +0 -1
  658. package/lib/summary/orderedClientElection.mjs.map +0 -1
  659. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
  660. package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
  661. package/lib/summary/runningSummarizer.d.mts.map +0 -1
  662. package/lib/summary/runningSummarizer.mjs.map +0 -1
  663. package/lib/summary/summarizer.d.mts.map +0 -1
  664. package/lib/summary/summarizer.mjs.map +0 -1
  665. package/lib/summary/summarizerClientElection.d.mts.map +0 -1
  666. package/lib/summary/summarizerClientElection.mjs.map +0 -1
  667. package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
  668. package/lib/summary/summarizerHeuristics.mjs.map +0 -1
  669. package/lib/summary/summarizerNode/index.d.mts.map +0 -1
  670. package/lib/summary/summarizerNode/index.mjs +0 -7
  671. package/lib/summary/summarizerNode/index.mjs.map +0 -1
  672. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
  673. package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
  674. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
  675. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
  676. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
  677. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
  678. package/lib/summary/summarizerTypes.d.mts.map +0 -1
  679. package/lib/summary/summarizerTypes.mjs.map +0 -1
  680. package/lib/summary/summaryCollection.d.mts.map +0 -1
  681. package/lib/summary/summaryCollection.mjs.map +0 -1
  682. package/lib/summary/summaryFormat.d.mts.map +0 -1
  683. package/lib/summary/summaryFormat.mjs.map +0 -1
  684. package/lib/summary/summaryGenerator.d.mts.map +0 -1
  685. package/lib/summary/summaryGenerator.mjs.map +0 -1
  686. package/lib/summary/summaryManager.d.mts.map +0 -1
  687. package/lib/summary/summaryManager.mjs.map +0 -1
  688. package/lib/throttler.d.mts.map +0 -1
  689. package/lib/throttler.mjs.map +0 -1
  690. package/src/deltaManagerProxyBase.ts +0 -111
@@ -6,7 +6,7 @@
6
6
  import { assert, Deferred, Lazy } from "@fluidframework/core-utils";
7
7
  import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
8
8
  import { createChildLogger, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
9
- import { FluidDataStoreContext, LocalFluidDataStoreContext } from "./dataStoreContext";
9
+ import { FluidDataStoreContext, LocalFluidDataStoreContext } from "./dataStoreContext.js";
10
10
 
11
11
  export class DataStoreContexts implements Iterable<[string, FluidDataStoreContext]>, IDisposable {
12
12
  private readonly notBoundContexts = new Set<string>();
@@ -3,11 +3,26 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IDeltaManager, ReadOnlyInfo } from "@fluidframework/container-definitions";
7
- import { IDocumentMessage, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
6
+ import { TypedEventEmitter } from "@fluid-internal/client-utils";
7
+ import type {
8
+ IConnectionDetails,
9
+ IDeltaManager,
10
+ IDeltaManagerEvents,
11
+ IDeltaQueue,
12
+ IDeltaSender,
13
+ ReadOnlyInfo,
14
+ } from "@fluidframework/container-definitions";
15
+ import type { IErrorBase } from "@fluidframework/core-interfaces";
16
+ import type { IAnyDriverError } from "@fluidframework/driver-definitions";
17
+ import {
18
+ IClientConfiguration,
19
+ IClientDetails,
20
+ IDocumentMessage,
21
+ ISequencedDocumentMessage,
22
+ ISignalMessage,
23
+ } from "@fluidframework/protocol-definitions";
8
24
 
9
- import { DeltaManagerProxyBase } from "./deltaManagerProxyBase";
10
- import { summarizerClientType } from "./summary";
25
+ import { summarizerClientType } from "./summary/index.js";
11
26
 
12
27
  /**
13
28
  * Proxy to the real IDeltaManager for restricting certain access to layers below container runtime in summarizer clients:
@@ -15,9 +30,65 @@ import { summarizerClientType } from "./summary";
15
30
  * - Summarizer client should not be active to layers below the container runtime to restrict local changes.
16
31
  */
17
32
  export class DeltaManagerSummarizerProxy
18
- extends DeltaManagerProxyBase
33
+ extends TypedEventEmitter<IDeltaManagerEvents>
19
34
  implements IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>
20
35
  {
36
+ public get IDeltaSender(): IDeltaSender {
37
+ return this;
38
+ }
39
+
40
+ public get inbound(): IDeltaQueue<ISequencedDocumentMessage> {
41
+ return this.deltaManager.inbound;
42
+ }
43
+
44
+ public get outbound(): IDeltaQueue<IDocumentMessage[]> {
45
+ return this.deltaManager.outbound;
46
+ }
47
+
48
+ public get inboundSignal(): IDeltaQueue<ISignalMessage> {
49
+ return this.deltaManager.inboundSignal;
50
+ }
51
+
52
+ public get minimumSequenceNumber(): number {
53
+ return this.deltaManager.minimumSequenceNumber;
54
+ }
55
+
56
+ public get lastSequenceNumber(): number {
57
+ return this.deltaManager.lastSequenceNumber;
58
+ }
59
+
60
+ public get lastMessage() {
61
+ return this.deltaManager.lastMessage;
62
+ }
63
+
64
+ public get lastKnownSeqNumber() {
65
+ return this.deltaManager.lastKnownSeqNumber;
66
+ }
67
+
68
+ public get initialSequenceNumber(): number {
69
+ return this.deltaManager.initialSequenceNumber;
70
+ }
71
+
72
+ public get hasCheckpointSequenceNumber() {
73
+ return this.deltaManager.hasCheckpointSequenceNumber;
74
+ }
75
+
76
+ public get clientDetails(): IClientDetails {
77
+ return this.deltaManager.clientDetails;
78
+ }
79
+
80
+ public get version(): string {
81
+ return this.deltaManager.version;
82
+ }
83
+
84
+ public get maxMessageSize(): number {
85
+ return this.deltaManager.maxMessageSize;
86
+ }
87
+
88
+ public get serviceConfiguration(): IClientConfiguration | undefined {
89
+ return this.deltaManager.serviceConfiguration;
90
+ }
91
+
21
92
  public get active(): boolean {
22
93
  // Summarize clients should not be active. There shouldn't be any local changes (writes) in the summarizer
23
94
  // except for the SummarizeOp which is generated by the runtime.
@@ -40,10 +111,64 @@ export class DeltaManagerSummarizerProxy
40
111
 
41
112
  private readonly isSummarizerClient: boolean;
42
113
 
43
- constructor(deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>) {
44
- super(deltaManager);
114
+ constructor(
115
+ private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
116
+ ) {
117
+ super();
118
+
45
119
  // We are expecting this class to have many listeners, so we suppress noisy "MaxListenersExceededWarning" logging.
46
120
  super.setMaxListeners(0);
47
121
  this.isSummarizerClient = this.deltaManager.clientDetails.type === summarizerClientType;
122
+
123
+ this.deltaManager.on("prepareSend", this.onPrepareSend);
124
+ this.deltaManager.on("submitOp", this.onSubmitOp);
125
+ this.deltaManager.on("op", this.onOp);
126
+ this.deltaManager.on("pong", this.onPong);
127
+ this.deltaManager.on("connect", this.onConnect);
128
+ this.deltaManager.on("disconnect", this.onDisconnect);
129
+ this.deltaManager.on("readonly", this.onReadonly);
48
130
  }
131
+
132
+ public dispose(): void {
133
+ this.deltaManager.off("prepareSend", this.onPrepareSend);
134
+ this.deltaManager.off("submitOp", this.onSubmitOp);
135
+ this.deltaManager.off("op", this.onOp);
136
+ this.deltaManager.off("pong", this.onPong);
137
+ this.deltaManager.off("connect", this.onConnect);
138
+ this.deltaManager.off("disconnect", this.onDisconnect);
139
+ this.deltaManager.off("readonly", this.onReadonly);
140
+ }
141
+
142
+ public submitSignal(content: any, targetClientId?: string): void {
143
+ return this.deltaManager.submitSignal(content, targetClientId);
144
+ }
145
+
146
+ public flush(): void {
147
+ return this.deltaManager.flush();
148
+ }
149
+
150
+ private readonly onPrepareSend = (messageBuffer: any[]): void => {
151
+ this.emit("prepareSend", messageBuffer);
152
+ };
153
+ private readonly onSubmitOp = (message: IDocumentMessage): void => {
154
+ this.emit("submitOp", message);
155
+ };
156
+ private readonly onOp = (message: ISequencedDocumentMessage, processingTime: number): void => {
157
+ this.emit("op", message, processingTime);
158
+ };
159
+ private readonly onPong = (latency: number): void => {
160
+ this.emit("pong", latency);
161
+ };
162
+ private readonly onConnect = (details: IConnectionDetails, opsBehind?: number): void => {
163
+ this.emit("connect", details, opsBehind);
164
+ };
165
+ private readonly onDisconnect = (reason: string, error?: IAnyDriverError): void => {
166
+ this.emit("disconnect", reason, error);
167
+ };
168
+ private readonly onReadonly = (
169
+ readonly: boolean,
170
+ readonlyConnectionReason?: { reason: string; error?: IErrorBase },
171
+ ): void => {
172
+ this.emit("readonly", readonly, readonlyConnectionReason);
173
+ };
49
174
  }
@@ -22,16 +22,16 @@ import {
22
22
  PerformanceEvent,
23
23
  tagCodeArtifacts,
24
24
  } from "@fluidframework/telemetry-utils";
25
- import { BlobManager } from "../blobManager";
25
+ import { BlobManager } from "../blobManager.js";
26
26
  import {
27
27
  InactiveResponseHeaderKey,
28
28
  RuntimeHeaderData,
29
29
  TombstoneResponseHeaderKey,
30
- } from "../containerRuntime";
31
- import { ClientSessionExpiredError } from "../error";
32
- import { ContainerMessageType, ContainerRuntimeGCMessage } from "../messageTypes";
33
- import { IRefreshSummaryResult } from "../summary";
34
- import { generateGCConfigs } from "./gcConfigs";
30
+ } from "../containerRuntime.js";
31
+ import { ClientSessionExpiredError } from "../error.js";
32
+ import { ContainerMessageType, ContainerRuntimeGCMessage } from "../messageTypes.js";
33
+ import { IRefreshSummaryResult } from "../summary/index.js";
34
+ import { generateGCConfigs } from "./gcConfigs.js";
35
35
  import {
36
36
  GCNodeType,
37
37
  IGarbageCollector,
@@ -46,18 +46,22 @@ import {
46
46
  ISweepPhaseStats,
47
47
  GarbageCollectionMessage,
48
48
  GarbageCollectionMessageType,
49
- } from "./gcDefinitions";
49
+ disableAutoRecoveryKey,
50
+ } from "./gcDefinitions.js";
50
51
  import {
51
52
  cloneGCData,
52
53
  compatBehaviorAllowsGCMessageType,
53
54
  concatGarbageCollectionData,
54
55
  getGCDataFromSnapshot,
55
- } from "./gcHelpers";
56
- import { runGarbageCollection } from "./gcReferenceGraphAlgorithm";
57
- import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions";
58
- import { GCSummaryStateTracker } from "./gcSummaryStateTracker";
59
- import { UnreferencedStateTracker } from "./gcUnreferencedStateTracker";
60
- import { GCTelemetryTracker } from "./gcTelemetry";
56
+ } from "./gcHelpers.js";
57
+ import { runGarbageCollection } from "./gcReferenceGraphAlgorithm.js";
58
+ import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions.js";
59
+ import { GCSummaryStateTracker } from "./gcSummaryStateTracker.js";
60
+ import {
61
+ UnreferencedStateTracker,
62
+ UnreferencedStateTrackerMap,
63
+ } from "./gcUnreferencedStateTracker.js";
64
+ import { GCTelemetryTracker } from "./gcTelemetry.js";
61
65
 
62
66
  /**
63
67
  * The garbage collector for the container runtime. It consolidates the garbage collection functionality and maintains
@@ -94,6 +98,7 @@ export class GarbageCollector implements IGarbageCollector {
94
98
  return this.configs.shouldRunGC;
95
99
  }
96
100
 
101
+ public readonly sessionExpiryTimerStarted: number | undefined;
97
102
  // Keeps track of the GC state from the last run.
98
103
  private gcDataFromLastRun: IGarbageCollectionData | undefined;
99
104
  // Keeps a list of references (edges in the GC graph) between GC runs. Each entry has a node id and a list of
@@ -110,8 +115,15 @@ export class GarbageCollector implements IGarbageCollector {
110
115
  private readonly initializeGCStateFromBaseSnapshotP: Promise<void>;
111
116
  // The GC details generated from the base snapshot.
112
117
  private readonly baseGCDetailsP: Promise<IGarbageCollectionDetailsBase>;
113
- // Map of node ids to their unreferenced state tracker.
114
- private readonly unreferencedNodesState: Map<string, UnreferencedStateTracker> = new Map();
118
+
119
+ /**
120
+ * Map of node ids to their unreferenced state tracker
121
+ * NOTE: The set of keys in this map is considered as the set of unreferenced nodes
122
+ * as of the last GC run. So in between runs, nothing should be added or removed.
123
+ */
124
+ private readonly unreferencedNodesState: UnreferencedStateTrackerMap =
125
+ new UnreferencedStateTrackerMap();
126
+
115
127
  // The Timer responsible for closing the container when the session has expired
116
128
  private sessionExpiryTimer: Timer | undefined;
117
129
 
@@ -164,6 +176,7 @@ export class GarbageCollector implements IGarbageCollector {
164
176
 
165
177
  const baseSnapshot = createParams.baseSnapshot;
166
178
  const readAndParseBlob = createParams.readAndParseBlob;
179
+ const pendingSessionExpiryTimerStarted = createParams.sessionExpiryTimerStarted;
167
180
 
168
181
  this.mc = createChildMonitoringContext({
169
182
  logger: createParams.baseLogger,
@@ -181,14 +194,26 @@ export class GarbageCollector implements IGarbageCollector {
181
194
  const overrideSessionExpiryTimeoutMs = this.mc.config.getNumber(
182
195
  "Fluid.GarbageCollection.TestOverride.SessionExpiryMs",
183
196
  );
184
- const timeoutMs = overrideSessionExpiryTimeoutMs ?? this.configs.sessionExpiryTimeoutMs;
197
+ let timeoutMs = this.configs.sessionExpiryTimeoutMs;
185
198
 
199
+ if (pendingSessionExpiryTimerStarted) {
200
+ // NOTE: This assumes the client clock hasn't been tampered with since the original session
201
+ const timeLapsedSincePendingTimer = Date.now() - pendingSessionExpiryTimerStarted;
202
+ timeoutMs -= timeLapsedSincePendingTimer;
203
+ }
204
+ timeoutMs = overrideSessionExpiryTimeoutMs ?? timeoutMs;
205
+ if (timeoutMs <= 0) {
206
+ this.runtime.closeFn(
207
+ new ClientSessionExpiredError(`Client session expired.`, timeoutMs),
208
+ );
209
+ }
186
210
  this.sessionExpiryTimer = new Timer(timeoutMs, () => {
187
211
  this.runtime.closeFn(
188
212
  new ClientSessionExpiredError(`Client session expired.`, timeoutMs),
189
213
  );
190
214
  });
191
215
  this.sessionExpiryTimer.start();
216
+ this.sessionExpiryTimerStarted = Date.now();
192
217
  }
193
218
 
194
219
  this.summaryStateTracker = new GCSummaryStateTracker(
@@ -443,7 +468,9 @@ export class GarbageCollector implements IGarbageCollector {
443
468
  ): Promise<IGCStats | undefined> {
444
469
  const fullGC =
445
470
  options.fullGC ??
446
- (this.configs.runFullGC === true || this.summaryStateTracker.doesSummaryStateNeedReset);
471
+ (this.configs.runFullGC === true ||
472
+ this.summaryStateTracker.autoRecovery.fullGCRequested() ||
473
+ this.summaryStateTracker.doesSummaryStateNeedReset);
447
474
 
448
475
  // Add the options that are used to run GC to the telemetry context.
449
476
  telemetryContext?.setMultiple("fluid_GC", "Options", {
@@ -593,16 +620,10 @@ export class GarbageCollector implements IGarbageCollector {
593
620
  ): { tombstoneReadyNodeIds: Set<string>; sweepReadyNodeIds: Set<string> } {
594
621
  // 1. Marks all referenced nodes by clearing their unreferenced tracker, if any.
595
622
  for (const nodeId of allReferencedNodeIds) {
596
- const nodeStateTracker = this.unreferencedNodesState.get(nodeId);
597
- if (nodeStateTracker !== undefined) {
598
- // Stop tracking so as to clear out any running timers.
599
- nodeStateTracker.stopTracking();
600
- // Delete the node as we don't need to track it any more.
601
- this.unreferencedNodesState.delete(nodeId);
602
- }
623
+ this.unreferencedNodesState.delete(nodeId);
603
624
  }
604
625
 
605
- // 2. Mark unreferenced nodes in this run by starting unreferenced tracking for them.
626
+ // 2. Mark unreferenced nodes in this run by starting or updating unreferenced tracking for them.
606
627
  const tombstoneReadyNodeIds: Set<string> = new Set();
607
628
  const sweepReadyNodeIds: Set<string> = new Set();
608
629
  for (const nodeId of gcResult.deletedNodeIds) {
@@ -837,8 +858,7 @@ export class GarbageCollector implements IGarbageCollector {
837
858
  }
838
859
 
839
860
  return this.summaryStateTracker.summarize(
840
- fullTree,
841
- trackState,
861
+ trackState && !fullTree,
842
862
  gcState,
843
863
  this.deletedNodes,
844
864
  this.tombstones,
@@ -872,21 +892,37 @@ export class GarbageCollector implements IGarbageCollector {
872
892
  * @param local - Whether it was send by this client.
873
893
  */
874
894
  public processMessage(message: ContainerRuntimeGCMessage, local: boolean) {
875
- switch (message.contents.type) {
876
- case "Sweep": {
895
+ const gcMessageType = message.contents.type;
896
+ switch (gcMessageType) {
897
+ case GarbageCollectionMessageType.Sweep: {
877
898
  // Delete the nodes whose ids are present in the contents.
878
899
  this.deleteSweepReadyNodes(message.contents.deletedNodeIds);
879
900
  break;
880
901
  }
902
+ case GarbageCollectionMessageType.TombstoneLoaded: {
903
+ if (this.mc.config.getBoolean(disableAutoRecoveryKey) === true) {
904
+ break;
905
+ }
906
+
907
+ // Mark the node as referenced to ensure it isn't Swept
908
+ const tombstonedNodePath = message.contents.nodePath;
909
+ this.addedOutboundReference("/", tombstonedNodePath, true /* autorecovery */);
910
+
911
+ // In case the cause of the TombstoneLoaded event is incorrect GC Data (i.e. the object is actually reachable),
912
+ // do fullGC on the next run to get a chance to repair (in the likely case the bug is not deterministic)
913
+ this.summaryStateTracker.autoRecovery.requestFullGCOnNextRun();
914
+
915
+ break;
916
+ }
881
917
  default: {
882
918
  if (
883
919
  !compatBehaviorAllowsGCMessageType(
884
- message.contents.type,
920
+ gcMessageType,
885
921
  message.compatDetails?.behavior,
886
922
  )
887
923
  ) {
888
924
  const error = DataProcessingError.create(
889
- `Garbage collection message of unknown type ${message.contents.type}`,
925
+ `Garbage collection message of unknown type ${gcMessageType}`,
890
926
  "processMessage",
891
927
  );
892
928
  throw error;
@@ -931,13 +967,9 @@ export class GarbageCollector implements IGarbageCollector {
931
967
 
932
968
  // Clear unreferenced state tracking for deleted nodes.
933
969
  for (const nodeId of deletedNodeIds) {
934
- const nodeStateTracker = this.unreferencedNodesState.get(nodeId);
935
- if (nodeStateTracker !== undefined) {
936
- // Stop tracking so as to clear out any running timers.
937
- nodeStateTracker.stopTracking();
938
- // Delete the node as we don't need to track it any more.
939
- this.unreferencedNodesState.delete(nodeId);
940
- }
970
+ // Usually we avoid modifying the set of unreferencedNodesState keys in between GC runs,
971
+ // but this is ok since this node won't exist at all in the next GC run.
972
+ this.unreferencedNodesState.delete(nodeId);
941
973
  this.deletedNodes.add(nodeId);
942
974
  }
943
975
  }
@@ -979,6 +1011,15 @@ export class GarbageCollector implements IGarbageCollector {
979
1011
  headers: headerData,
980
1012
  });
981
1013
 
1014
+ // Any time we log a Tombstone Loaded error (via Telemetry Tracker),
1015
+ // we want to also trigger autorecovery to avoid the object being deleted
1016
+ // Note: We don't need to trigger on "Changed" because any change will cause the object
1017
+ // to be loaded by the Summarizer, and auto-recovery will be triggered then.
1018
+ if (isTombstoned && reason === "Loaded") {
1019
+ // Note that when a DataStore and its DDS are all loaded, each will trigger AutoRecovery for itself.
1020
+ this.triggerAutoRecovery(nodePath);
1021
+ }
1022
+
982
1023
  const nodeType = this.runtime.getNodeType(nodePath);
983
1024
 
984
1025
  // Unless this is a Loaded event for a Blob or DataStore, we're done after telemetry tracking
@@ -987,7 +1028,6 @@ export class GarbageCollector implements IGarbageCollector {
987
1028
  }
988
1029
 
989
1030
  const errorRequest: IRequest = request ?? { url: nodePath };
990
- // If the object is tombstoned and tombstone enforcement is configured, throw an error.
991
1031
  if (isTombstoned && this.throwOnTombstoneLoad && headerData?.allowTombstone !== true) {
992
1032
  // The requested data store is removed by gc. Create a 404 gc response exception.
993
1033
  throw responseToException(
@@ -1015,14 +1055,42 @@ export class GarbageCollector implements IGarbageCollector {
1015
1055
  }
1016
1056
  }
1017
1057
 
1058
+ /**
1059
+ * The given node should have its unreferenced state reset in the next GC,
1060
+ * even if the true GC graph shows it is unreferenced. This will
1061
+ * prevent it from being deleted by Sweep (after the Grace Period).
1062
+ *
1063
+ * Submit a GC op indicating that the Tombstone with the given path has been loaded.
1064
+ * Broadcasting this information in the op stream allows the Summarizer to reset unreferenced state
1065
+ * before runnint GC next.
1066
+ */
1067
+ private triggerAutoRecovery(nodePath: string) {
1068
+ if (this.mc.config.getBoolean(disableAutoRecoveryKey) === true) {
1069
+ return;
1070
+ }
1071
+
1072
+ // Use compat behavior "Ignore" since this is an optimization to opportunistically protect
1073
+ // objects from deletion, so it's fine for older clients to ignore this op.
1074
+ const containerGCMessage: ContainerRuntimeGCMessage = {
1075
+ type: ContainerMessageType.GC,
1076
+ contents: {
1077
+ type: GarbageCollectionMessageType.TombstoneLoaded,
1078
+ nodePath,
1079
+ },
1080
+ compatDetails: { behavior: "Ignore" },
1081
+ };
1082
+ this.submitMessage(containerGCMessage);
1083
+ }
1084
+
1018
1085
  /**
1019
1086
  * Called when an outbound reference is added to a node. This is used to identify all nodes that have been
1020
1087
  * referenced between summaries so that their unreferenced timestamp can be reset.
1021
1088
  *
1022
1089
  * @param fromNodePath - The node from which the reference is added.
1023
1090
  * @param toNodePath - The node to which the reference is added.
1091
+ * @param autorecovery - This reference is added artificially, for autorecovery. Used for logging.
1024
1092
  */
1025
- public addedOutboundReference(fromNodePath: string, toNodePath: string) {
1093
+ public addedOutboundReference(fromNodePath: string, toNodePath: string, autorecovery?: true) {
1026
1094
  if (!this.configs.shouldRunGC) {
1027
1095
  return;
1028
1096
  }
@@ -1052,7 +1120,14 @@ export class GarbageCollector implements IGarbageCollector {
1052
1120
  isTombstoned: this.tombstones.includes(toNodePath),
1053
1121
  lastSummaryTime: this.getLastSummaryTimestampMs(),
1054
1122
  fromId: fromNodePath,
1123
+ autorecovery,
1055
1124
  });
1125
+
1126
+ // This node is referenced - Clear its unreferenced state
1127
+ // But don't delete the node id from the map yet.
1128
+ // When generating GC stats, the set of nodes in here is used as the baseline for
1129
+ // what was unreferenced in the last GC run.
1130
+ this.unreferencedNodesState.get(toNodePath)?.stopTracking();
1056
1131
  }
1057
1132
 
1058
1133
  /**
@@ -1086,17 +1161,17 @@ export class GarbageCollector implements IGarbageCollector {
1086
1161
  updatedAttachmentBlobCount: 0,
1087
1162
  };
1088
1163
 
1089
- const updateNodeStats = (nodeId: string, referenced: boolean) => {
1164
+ const updateNodeStats = (nodeId: string, isReferenced: boolean) => {
1090
1165
  markPhaseStats.nodeCount++;
1091
1166
  // If there is no previous GC data, every node's state is generated and is considered as updated.
1092
1167
  // Otherwise, find out if any node went from referenced to unreferenced or vice-versa.
1168
+ const wasNotReferenced = this.unreferencedNodesState.has(nodeId);
1093
1169
  const stateUpdated =
1094
- this.gcDataFromLastRun === undefined ||
1095
- this.unreferencedNodesState.has(nodeId) === referenced;
1170
+ this.gcDataFromLastRun === undefined || wasNotReferenced === isReferenced;
1096
1171
  if (stateUpdated) {
1097
1172
  markPhaseStats.updatedNodeCount++;
1098
1173
  }
1099
- if (!referenced) {
1174
+ if (!isReferenced) {
1100
1175
  markPhaseStats.unrefNodeCount++;
1101
1176
  }
1102
1177
 
@@ -1105,7 +1180,7 @@ export class GarbageCollector implements IGarbageCollector {
1105
1180
  if (stateUpdated) {
1106
1181
  markPhaseStats.updatedDataStoreCount++;
1107
1182
  }
1108
- if (!referenced) {
1183
+ if (!isReferenced) {
1109
1184
  markPhaseStats.unrefDataStoreCount++;
1110
1185
  }
1111
1186
  }
@@ -1114,7 +1189,7 @@ export class GarbageCollector implements IGarbageCollector {
1114
1189
  if (stateUpdated) {
1115
1190
  markPhaseStats.updatedAttachmentBlobCount++;
1116
1191
  }
1117
- if (!referenced) {
1192
+ if (!isReferenced) {
1118
1193
  markPhaseStats.unrefAttachmentBlobCount++;
1119
1194
  }
1120
1195
  }
@@ -8,7 +8,7 @@ import {
8
8
  UsageError,
9
9
  validatePrecondition,
10
10
  } from "@fluidframework/telemetry-utils";
11
- import { IContainerRuntimeMetadata } from "../summary";
11
+ import { IContainerRuntimeMetadata } from "../summary/index.js";
12
12
  import {
13
13
  nextGCVersion,
14
14
  defaultInactiveTimeoutMs,
@@ -34,8 +34,8 @@ import {
34
34
  IGCMetadata_Deprecated,
35
35
  disableDatastoreSweepKey,
36
36
  gcDisableDataStoreSweepOptionName,
37
- } from "./gcDefinitions";
38
- import { getGCVersion, shouldAllowGcSweep } from "./gcHelpers";
37
+ } from "./gcDefinitions.js";
38
+ import { getGCVersion, shouldAllowGcSweep } from "./gcHelpers.js";
39
39
 
40
40
  /**
41
41
  * Generates configurations for the Garbage Collector that it uses to determine what to run and how.
@@ -18,9 +18,9 @@ import {
18
18
  IContainerRuntimeMetadata,
19
19
  ICreateContainerMetadata,
20
20
  IRefreshSummaryResult,
21
- } from "../summary";
22
- import { RuntimeHeaderData } from "../containerRuntime";
23
- import { ContainerRuntimeGCMessage } from "../messageTypes";
21
+ } from "../summary/index.js";
22
+ import { RuntimeHeaderData } from "../containerRuntime.js";
23
+ import { ContainerRuntimeGCMessage } from "../messageTypes.js";
24
24
 
25
25
  /**
26
26
  * @alpha
@@ -80,6 +80,8 @@ export const gcVersionUpgradeToV4Key = "Fluid.GarbageCollection.GCVersionUpgrade
80
80
  export const disableDatastoreSweepKey = "Fluid.GarbageCollection.DisableDataStoreSweep";
81
81
  /** Config key to revert new paradigm of detecting outbound routes in ContainerRuntime layer (use true) */
82
82
  export const detectOutboundRoutesViaDDSKey = "Fluid.GarbageCollection.DetectOutboundRoutesViaDDS";
83
+ /** Config key to disable auto-recovery mechanism that protects Tombstones that are loaded from being swept (use true) */
84
+ export const disableAutoRecoveryKey = "Fluid.GarbageCollection.DisableAutoRecovery";
83
85
 
84
86
  // One day in milliseconds.
85
87
  export const oneDayMs = 1 * 24 * 60 * 60 * 1000;
@@ -257,6 +259,8 @@ export type GCNodeType = (typeof GCNodeType)[keyof typeof GCNodeType];
257
259
  export const GarbageCollectionMessageType = {
258
260
  /** Message sent directing GC to delete the given nodes */
259
261
  Sweep: "Sweep",
262
+ /** Message sent notifying GC that a Tombstoned object was Loaded */
263
+ TombstoneLoaded: "TombstoneLoaded",
260
264
  } as const;
261
265
 
262
266
  /**
@@ -270,16 +274,28 @@ export type GarbageCollectionMessageType =
270
274
  * @internal
271
275
  */
272
276
  export interface ISweepMessage {
273
- type: "Sweep";
274
- // The ids of nodes that are deleted.
277
+ /** @see GarbageCollectionMessageType.Sweep */
278
+ type: typeof GarbageCollectionMessageType.Sweep;
279
+ /** The ids of nodes that are deleted. */
275
280
  deletedNodeIds: string[];
276
281
  }
277
282
 
283
+ /**
284
+ * The GC TombstoneLoaded message.
285
+ * @internal
286
+ */
287
+ export interface ITombstoneLoadedMessage {
288
+ /** @see GarbageCollectionMessageType.TombstoneLoaded */
289
+ type: typeof GarbageCollectionMessageType.TombstoneLoaded;
290
+ /** The id of Tombstoned node that was loaded. */
291
+ nodePath: string;
292
+ }
293
+
278
294
  /**
279
295
  * Type for a message to be used for sending / received garbage collection messages.
280
296
  * @internal
281
297
  */
282
- export type GarbageCollectionMessage = ISweepMessage;
298
+ export type GarbageCollectionMessage = ISweepMessage | ITombstoneLoadedMessage;
283
299
 
284
300
  /**
285
301
  * Defines the APIs for the runtime object to be passed to the garbage collector.
@@ -311,6 +327,12 @@ export interface IGarbageCollectionRuntime {
311
327
 
312
328
  /** Defines the contract for the garbage collector. */
313
329
  export interface IGarbageCollector {
330
+ /**
331
+ * Tells the time at which session expiry timer started in a previous container.
332
+ * This is only set when loading from a stashed container and will be equal to the
333
+ * original container's local client time when it was loaded (and started the session expiry timer).
334
+ */
335
+ readonly sessionExpiryTimerStarted: number | undefined;
314
336
  /** Tells whether GC should run or not. */
315
337
  readonly shouldRunGC: boolean;
316
338
  /** Tells whether the GC state in summary needs to be reset in the next summary. */
@@ -359,7 +381,7 @@ export interface IGarbageCollector {
359
381
  headerData?: RuntimeHeaderData,
360
382
  ): void;
361
383
  /** Called when a reference is added to a node. Used to identify nodes that were referenced between summaries. */
362
- addedOutboundReference(fromNodePath: string, toNodePath: string): void;
384
+ addedOutboundReference(fromNodePath: string, toNodePath: string, autorecovery?: true): void;
363
385
  /** Called to process a garbage collection message. */
364
386
  processMessage(message: ContainerRuntimeGCMessage, local: boolean): void;
365
387
  /** Returns true if this node has been deleted by GC during sweep phase. */
@@ -382,6 +404,7 @@ export interface IGarbageCollectorCreateParams {
382
404
  readonly getLastSummaryTimestampMs: () => number | undefined;
383
405
  readonly readAndParseBlob: ReadAndParseBlob;
384
406
  readonly submitMessage: (message: ContainerRuntimeGCMessage) => void;
407
+ readonly sessionExpiryTimerStarted?: number | undefined;
385
408
  }
386
409
 
387
410
  /**
@@ -12,12 +12,12 @@ import {
12
12
  IGarbageCollectionData,
13
13
  IGarbageCollectionDetailsBase,
14
14
  } from "@fluidframework/runtime-definitions";
15
- import { GCFeatureMatrix, GCVersion, IGCMetadata } from "./gcDefinitions";
15
+ import { GCFeatureMatrix, GCVersion, IGCMetadata } from "./gcDefinitions.js";
16
16
  import {
17
17
  IGarbageCollectionNodeData,
18
18
  IGarbageCollectionSnapshotData,
19
19
  IGarbageCollectionState,
20
- } from "./gcSummaryDefinitions";
20
+ } from "./gcSummaryDefinitions.js";
21
21
 
22
22
  export function getGCVersion(metadata?: IGCMetadata): GCVersion {
23
23
  if (!metadata) {
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IGCResult } from "./gcDefinitions";
6
+ import { IGCResult } from "./gcDefinitions.js";
7
7
 
8
8
  /**
9
9
  * Runs garbage collection on the given reference graph.