@fluidframework/container-runtime 2.0.0-dev-rc.1.0.0.232845 → 2.0.0-dev-rc.2.0.0.245554

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 (694) hide show
  1. package/.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 +425 -33
  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.d.ts +0 -5
  13. package/dist/blobManager.d.ts.map +1 -1
  14. package/dist/blobManager.js +0 -12
  15. package/dist/blobManager.js.map +1 -1
  16. package/dist/channelCollection.d.ts +225 -0
  17. package/dist/channelCollection.d.ts.map +1 -0
  18. package/dist/{dataStores.js → channelCollection.js} +447 -147
  19. package/dist/channelCollection.js.map +1 -0
  20. package/dist/connectionTelemetry.d.ts +11 -1
  21. package/dist/connectionTelemetry.d.ts.map +1 -1
  22. package/dist/connectionTelemetry.js +42 -4
  23. package/dist/connectionTelemetry.js.map +1 -1
  24. package/dist/container-runtime-alpha.d.ts +129 -48
  25. package/dist/container-runtime-beta.d.ts +68 -9
  26. package/dist/container-runtime-public.d.ts +68 -9
  27. package/dist/container-runtime-untrimmed.d.ts +692 -49
  28. package/dist/containerHandleContext.d.ts +1 -1
  29. package/dist/containerHandleContext.d.ts.map +1 -1
  30. package/dist/containerHandleContext.js.map +1 -1
  31. package/dist/containerRuntime.d.ts +81 -64
  32. package/dist/containerRuntime.d.ts.map +1 -1
  33. package/dist/containerRuntime.js +503 -368
  34. package/dist/containerRuntime.js.map +1 -1
  35. package/dist/dataStore.d.ts +2 -3
  36. package/dist/dataStore.d.ts.map +1 -1
  37. package/dist/dataStore.js +12 -11
  38. package/dist/dataStore.js.map +1 -1
  39. package/dist/dataStoreContext.d.ts +118 -41
  40. package/dist/dataStoreContext.d.ts.map +1 -1
  41. package/dist/dataStoreContext.js +248 -159
  42. package/dist/dataStoreContext.js.map +1 -1
  43. package/dist/dataStoreContexts.d.ts +2 -1
  44. package/dist/dataStoreContexts.d.ts.map +1 -1
  45. package/dist/dataStoreContexts.js +1 -0
  46. package/dist/dataStoreContexts.js.map +1 -1
  47. package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
  48. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  49. package/dist/deltaManagerSummarizerProxy.js +91 -5
  50. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  51. package/dist/gc/garbageCollection.d.ts +12 -6
  52. package/dist/gc/garbageCollection.d.ts.map +1 -1
  53. package/dist/gc/garbageCollection.js +116 -78
  54. package/dist/gc/garbageCollection.js.map +1 -1
  55. package/dist/gc/gcConfigs.d.ts +2 -2
  56. package/dist/gc/gcConfigs.d.ts.map +1 -1
  57. package/dist/gc/gcConfigs.js +30 -23
  58. package/dist/gc/gcConfigs.js.map +1 -1
  59. package/dist/gc/gcDefinitions.d.ts +22 -13
  60. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  61. package/dist/gc/gcDefinitions.js +7 -4
  62. package/dist/gc/gcDefinitions.js.map +1 -1
  63. package/dist/gc/gcHelpers.d.ts +2 -2
  64. package/dist/gc/gcHelpers.d.ts.map +1 -1
  65. package/dist/gc/gcHelpers.js.map +1 -1
  66. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
  67. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
  68. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  69. package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
  70. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  71. package/dist/gc/gcSummaryStateTracker.js +18 -6
  72. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  73. package/dist/gc/gcTelemetry.d.ts +6 -7
  74. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  75. package/dist/gc/gcTelemetry.js +20 -18
  76. package/dist/gc/gcTelemetry.js.map +1 -1
  77. package/dist/gc/gcUnreferencedStateTracker.d.ts +1 -1
  78. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  79. package/dist/gc/gcUnreferencedStateTracker.js +10 -10
  80. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  81. package/dist/gc/index.d.ts +8 -8
  82. package/dist/gc/index.d.ts.map +1 -1
  83. package/dist/gc/index.js +40 -39
  84. package/dist/gc/index.js.map +1 -1
  85. package/dist/index.d.ts +11 -21
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +36 -42
  88. package/dist/index.js.map +1 -1
  89. package/dist/messageTypes.d.ts +3 -3
  90. package/dist/messageTypes.d.ts.map +1 -1
  91. package/dist/messageTypes.js.map +1 -1
  92. package/dist/opLifecycle/batchManager.d.ts +2 -2
  93. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  94. package/dist/opLifecycle/batchManager.js.map +1 -1
  95. package/dist/opLifecycle/definitions.d.ts +2 -2
  96. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  97. package/dist/opLifecycle/definitions.js.map +1 -1
  98. package/dist/opLifecycle/index.d.ts +8 -8
  99. package/dist/opLifecycle/index.d.ts.map +1 -1
  100. package/dist/opLifecycle/index.js +18 -18
  101. package/dist/opLifecycle/index.js.map +1 -1
  102. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  103. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  104. package/dist/opLifecycle/opCompressor.js +4 -4
  105. package/dist/opLifecycle/opCompressor.js.map +1 -1
  106. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  107. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  108. package/dist/opLifecycle/opDecompressor.js +3 -3
  109. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  110. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  111. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  112. package/dist/opLifecycle/opGroupingManager.js +1 -10
  113. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  114. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  115. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  116. package/dist/opLifecycle/opSplitter.js +5 -5
  117. package/dist/opLifecycle/opSplitter.js.map +1 -1
  118. package/dist/opLifecycle/outbox.d.ts +7 -7
  119. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  120. package/dist/opLifecycle/outbox.js +20 -12
  121. package/dist/opLifecycle/outbox.js.map +1 -1
  122. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  123. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  124. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  125. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  126. package/dist/package.json +3 -0
  127. package/dist/packageVersion.d.ts +1 -1
  128. package/dist/packageVersion.js +1 -1
  129. package/dist/packageVersion.js.map +1 -1
  130. package/dist/pendingStateManager.d.ts +2 -1
  131. package/dist/pendingStateManager.d.ts.map +1 -1
  132. package/dist/pendingStateManager.js +18 -10
  133. package/dist/pendingStateManager.js.map +1 -1
  134. package/dist/scheduleManager.d.ts +1 -2
  135. package/dist/scheduleManager.d.ts.map +1 -1
  136. package/dist/scheduleManager.js +5 -5
  137. package/dist/scheduleManager.js.map +1 -1
  138. package/dist/summary/index.d.ts +12 -12
  139. package/dist/summary/index.d.ts.map +1 -1
  140. package/dist/summary/index.js +43 -43
  141. package/dist/summary/index.js.map +1 -1
  142. package/dist/summary/orderedClientElection.js +8 -8
  143. package/dist/summary/orderedClientElection.js.map +1 -1
  144. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  145. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  146. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  147. package/dist/summary/runningSummarizer.d.ts +5 -4
  148. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  149. package/dist/summary/runningSummarizer.js +47 -32
  150. package/dist/summary/runningSummarizer.js.map +1 -1
  151. package/dist/summary/summarizer.d.ts +4 -4
  152. package/dist/summary/summarizer.d.ts.map +1 -1
  153. package/dist/summary/summarizer.js +6 -6
  154. package/dist/summary/summarizer.js.map +1 -1
  155. package/dist/summary/summarizerClientElection.d.ts +2 -2
  156. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  157. package/dist/summary/summarizerClientElection.js.map +1 -1
  158. package/dist/summary/summarizerHeuristics.d.ts +3 -3
  159. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  160. package/dist/summary/summarizerHeuristics.js.map +1 -1
  161. package/dist/summary/summarizerNode/index.d.ts +3 -3
  162. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  163. package/dist/summary/summarizerNode/index.js +4 -4
  164. package/dist/summary/summarizerNode/index.js.map +1 -1
  165. package/dist/summary/summarizerNode/summarizerNode.d.ts +16 -5
  166. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  167. package/dist/summary/summarizerNode/summarizerNode.js +40 -10
  168. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +9 -1
  170. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +3 -4
  173. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  174. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +12 -12
  175. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  176. package/dist/summary/summarizerTypes.d.ts +9 -20
  177. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  178. package/dist/summary/summarizerTypes.js.map +1 -1
  179. package/dist/summary/summaryFormat.d.ts +15 -2
  180. package/dist/summary/summaryFormat.d.ts.map +1 -1
  181. package/dist/summary/summaryFormat.js.map +1 -1
  182. package/dist/summary/summaryGenerator.d.ts +6 -5
  183. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  184. package/dist/summary/summaryGenerator.js +10 -1
  185. package/dist/summary/summaryGenerator.js.map +1 -1
  186. package/dist/summary/summaryManager.d.ts +5 -6
  187. package/dist/summary/summaryManager.d.ts.map +1 -1
  188. package/dist/summary/summaryManager.js +4 -5
  189. package/dist/summary/summaryManager.js.map +1 -1
  190. package/dist/tsdoc-metadata.json +1 -1
  191. package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
  192. package/lib/batchTracker.d.ts.map +1 -0
  193. package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
  194. package/lib/batchTracker.js.map +1 -0
  195. package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -6
  196. package/lib/blobManager.d.ts.map +1 -0
  197. package/lib/{blobManager.mjs → blobManager.js} +1 -13
  198. package/lib/blobManager.js.map +1 -0
  199. package/lib/channelCollection.d.ts +225 -0
  200. package/lib/channelCollection.d.ts.map +1 -0
  201. package/lib/{dataStores.mjs → channelCollection.js} +434 -137
  202. package/lib/channelCollection.js.map +1 -0
  203. package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
  204. package/lib/connectionTelemetry.d.ts.map +1 -0
  205. package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
  206. package/lib/connectionTelemetry.js.map +1 -0
  207. package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +129 -48
  208. package/lib/{container-runtime-beta.d.mts → container-runtime-beta.d.ts} +68 -9
  209. package/lib/{container-runtime-public.d.mts → container-runtime-public.d.ts} +68 -9
  210. package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +692 -49
  211. package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
  212. package/lib/containerHandleContext.d.ts.map +1 -0
  213. package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
  214. package/lib/containerHandleContext.js.map +1 -0
  215. package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +86 -65
  216. package/lib/containerRuntime.d.ts.map +1 -0
  217. package/lib/{containerRuntime.mjs → containerRuntime.js} +423 -290
  218. package/lib/containerRuntime.js.map +1 -0
  219. package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
  220. package/lib/dataStore.d.ts.map +1 -0
  221. package/lib/{dataStore.mjs → dataStore.js} +13 -12
  222. package/lib/dataStore.js.map +1 -0
  223. package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +119 -42
  224. package/lib/dataStoreContext.d.ts.map +1 -0
  225. package/lib/{dataStoreContext.mjs → dataStoreContext.js} +240 -151
  226. package/lib/dataStoreContext.js.map +1 -0
  227. package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +3 -2
  228. package/lib/dataStoreContexts.d.ts.map +1 -0
  229. package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +2 -1
  230. package/lib/dataStoreContexts.js.map +1 -0
  231. package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
  232. package/lib/dataStoreRegistry.d.ts.map +1 -0
  233. package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
  234. package/lib/dataStoreRegistry.js.map +1 -0
  235. package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
  236. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  237. package/lib/deltaManagerSummarizerProxy.js +124 -0
  238. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  239. package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
  240. package/lib/deltaScheduler.d.ts.map +1 -0
  241. package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
  242. package/lib/deltaScheduler.js.map +1 -0
  243. package/lib/{error.d.mts → error.d.ts} +1 -1
  244. package/lib/error.d.ts.map +1 -0
  245. package/lib/{error.mjs → error.js} +1 -1
  246. package/lib/error.js.map +1 -0
  247. package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +13 -7
  248. package/lib/gc/garbageCollection.d.ts.map +1 -0
  249. package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +79 -41
  250. package/lib/gc/garbageCollection.js.map +1 -0
  251. package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
  252. package/lib/gc/gcConfigs.d.ts.map +1 -0
  253. package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +14 -7
  254. package/lib/gc/gcConfigs.js.map +1 -0
  255. package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +23 -14
  256. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  257. package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +7 -4
  258. package/lib/gc/gcDefinitions.js.map +1 -0
  259. package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
  260. package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
  261. package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
  262. package/lib/gc/gcHelpers.js.map +1 -0
  263. package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
  264. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  265. package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
  266. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  267. package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
  268. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  269. package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
  270. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  271. package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
  272. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  273. package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
  274. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  275. package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +7 -8
  276. package/lib/gc/gcTelemetry.d.ts.map +1 -0
  277. package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -3
  278. package/lib/gc/gcTelemetry.js.map +1 -0
  279. package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +2 -2
  280. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  281. package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +2 -2
  282. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  283. package/lib/gc/index.d.ts +13 -0
  284. package/lib/gc/index.d.ts.map +1 -0
  285. package/lib/gc/{index.mjs → index.js} +8 -8
  286. package/lib/gc/index.js.map +1 -0
  287. package/lib/{index.d.mts → index.d.ts} +12 -22
  288. package/lib/index.d.ts.map +1 -0
  289. package/lib/index.js +15 -0
  290. package/lib/index.js.map +1 -0
  291. package/lib/{messageTypes.d.mts → messageTypes.d.ts} +4 -4
  292. package/lib/messageTypes.d.ts.map +1 -0
  293. package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
  294. package/lib/messageTypes.js.map +1 -0
  295. package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
  296. package/lib/metadata.d.ts.map +1 -0
  297. package/lib/{metadata.mjs → metadata.js} +1 -1
  298. package/lib/metadata.js.map +1 -0
  299. package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
  300. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  301. package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
  302. package/lib/opLifecycle/batchManager.js.map +1 -0
  303. package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
  304. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  305. package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
  306. package/lib/opLifecycle/definitions.js.map +1 -0
  307. package/lib/opLifecycle/index.d.ts +13 -0
  308. package/lib/opLifecycle/index.d.ts.map +1 -0
  309. package/lib/opLifecycle/index.js +12 -0
  310. package/lib/opLifecycle/index.js.map +1 -0
  311. package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
  312. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  313. package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
  314. package/lib/opLifecycle/opCompressor.js.map +1 -0
  315. package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
  316. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  317. package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
  318. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  319. package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
  320. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
  321. package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
  322. package/lib/opLifecycle/opGroupingManager.js.map +1 -0
  323. package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
  324. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  325. package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
  326. package/lib/opLifecycle/opSplitter.js.map +1 -0
  327. package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
  328. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  329. package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
  330. package/lib/opLifecycle/outbox.js.map +1 -0
  331. package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
  332. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  333. package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
  334. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  335. package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
  336. package/lib/opProperties.d.ts.map +1 -0
  337. package/lib/{opProperties.mjs → opProperties.js} +1 -1
  338. package/lib/opProperties.js.map +1 -0
  339. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  340. package/lib/packageVersion.d.ts.map +1 -0
  341. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  342. package/lib/packageVersion.js.map +1 -0
  343. package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
  344. package/lib/pendingStateManager.d.ts.map +1 -0
  345. package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
  346. package/lib/pendingStateManager.js.map +1 -0
  347. package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
  348. package/lib/scheduleManager.d.ts.map +1 -0
  349. package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
  350. package/lib/scheduleManager.js.map +1 -0
  351. package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
  352. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  353. package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
  354. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  355. package/lib/summary/{index.d.mts → index.d.ts} +13 -13
  356. package/lib/summary/index.d.ts.map +1 -0
  357. package/lib/summary/{index.mjs → index.js} +12 -12
  358. package/lib/summary/index.js.map +1 -0
  359. package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
  360. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  361. package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
  362. package/lib/summary/orderedClientElection.js.map +1 -0
  363. package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
  364. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  365. package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
  366. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  367. package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +6 -5
  368. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  369. package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +41 -26
  370. package/lib/summary/runningSummarizer.js.map +1 -0
  371. package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
  372. package/lib/summary/summarizer.d.ts.map +1 -0
  373. package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
  374. package/lib/summary/summarizer.js.map +1 -0
  375. package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
  376. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  377. package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
  378. package/lib/summary/summarizerClientElection.js.map +1 -0
  379. package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
  380. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  381. package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
  382. package/lib/summary/summarizerHeuristics.js.map +1 -0
  383. package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
  384. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  385. package/lib/summary/summarizerNode/index.js +7 -0
  386. package/lib/summary/summarizerNode/index.js.map +1 -0
  387. package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +17 -6
  388. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  389. package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +34 -4
  390. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  391. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +10 -2
  392. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  393. package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -1
  394. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  395. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +4 -5
  396. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  397. package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +7 -7
  398. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  399. package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +10 -21
  400. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  401. package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
  402. package/lib/summary/summarizerTypes.js.map +1 -0
  403. package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
  404. package/lib/summary/summaryCollection.d.ts.map +1 -0
  405. package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
  406. package/lib/summary/summaryCollection.js.map +1 -0
  407. package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
  408. package/lib/summary/summaryFormat.d.ts.map +1 -0
  409. package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
  410. package/lib/summary/summaryFormat.js.map +1 -0
  411. package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
  412. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  413. package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
  414. package/lib/summary/summaryGenerator.js.map +1 -0
  415. package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
  416. package/lib/summary/summaryManager.d.ts.map +1 -0
  417. package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
  418. package/lib/summary/summaryManager.js.map +1 -0
  419. package/lib/test/batchTracker.spec.js +88 -0
  420. package/lib/test/batchTracker.spec.js.map +1 -0
  421. package/lib/test/blobManager.spec.js +835 -0
  422. package/lib/test/blobManager.spec.js.map +1 -0
  423. package/lib/test/channelCollection.spec.js +138 -0
  424. package/lib/test/channelCollection.spec.js.map +1 -0
  425. package/lib/test/containerRuntime.spec.js +1748 -0
  426. package/lib/test/containerRuntime.spec.js.map +1 -0
  427. package/lib/test/dataStoreContext.spec.js +771 -0
  428. package/lib/test/dataStoreContext.spec.js.map +1 -0
  429. package/lib/test/dataStoreCreation.spec.js +303 -0
  430. package/lib/test/dataStoreCreation.spec.js.map +1 -0
  431. package/lib/test/dataStoreRegistry.spec.js +26 -0
  432. package/lib/test/dataStoreRegistry.spec.js.map +1 -0
  433. package/lib/test/fuzz/fuzzUtils.js +66 -0
  434. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  435. package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
  436. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
  437. package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
  438. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
  439. package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
  440. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
  441. package/lib/test/gc/garbageCollection.spec.js +1464 -0
  442. package/lib/test/gc/garbageCollection.spec.js.map +1 -0
  443. package/lib/test/gc/gcConfigs.spec.js +689 -0
  444. package/lib/test/gc/gcConfigs.spec.js.map +1 -0
  445. package/lib/test/gc/gcHelpers.spec.js +110 -0
  446. package/lib/test/gc/gcHelpers.spec.js.map +1 -0
  447. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
  448. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
  449. package/lib/test/gc/gcStats.spec.js +390 -0
  450. package/lib/test/gc/gcStats.spec.js.map +1 -0
  451. package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
  452. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
  453. package/lib/test/gc/gcTelemetry.spec.js +530 -0
  454. package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
  455. package/lib/test/gc/gcUnitTestHelpers.js +29 -0
  456. package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
  457. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
  458. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
  459. package/lib/test/getPendingBlobs.spec.js +193 -0
  460. package/lib/test/getPendingBlobs.spec.js.map +1 -0
  461. package/lib/test/hardwareStats.spec.js +93 -0
  462. package/lib/test/hardwareStats.spec.js.map +1 -0
  463. package/lib/test/index.js +6 -0
  464. package/lib/test/index.js.map +1 -0
  465. package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
  466. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
  467. package/lib/test/opLifecycle/batchManager.spec.js +189 -0
  468. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
  469. package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
  470. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
  471. package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
  472. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
  473. package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
  474. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
  475. package/lib/test/opLifecycle/outbox.spec.js +675 -0
  476. package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
  477. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
  478. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
  479. package/lib/test/pendingStateManager.spec.js +329 -0
  480. package/lib/test/pendingStateManager.spec.js.map +1 -0
  481. package/lib/test/scheduleManager.spec.js +270 -0
  482. package/lib/test/scheduleManager.spec.js.map +1 -0
  483. package/lib/test/summarizerNode.spec.js +326 -0
  484. package/lib/test/summarizerNode.spec.js.map +1 -0
  485. package/lib/test/summarizerNodeWithGc.spec.js +318 -0
  486. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
  487. package/lib/test/summary/orderedClientElection.spec.js +535 -0
  488. package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
  489. package/lib/test/summary/runningSummarizer.spec.js +1349 -0
  490. package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
  491. package/lib/test/summary/summarizer.spec.js +29 -0
  492. package/lib/test/summary/summarizer.spec.js.map +1 -0
  493. package/lib/test/summary/summarizerClientElection.spec.js +436 -0
  494. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
  495. package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
  496. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
  497. package/lib/test/summary/summaryCollection.spec.js +200 -0
  498. package/lib/test/summary/summaryCollection.spec.js.map +1 -0
  499. package/lib/test/summary/summaryManager.spec.js +430 -0
  500. package/lib/test/summary/summaryManager.spec.js.map +1 -0
  501. package/lib/test/summary/testQuorumClients.js +34 -0
  502. package/lib/test/summary/testQuorumClients.js.map +1 -0
  503. package/lib/test/throttler.spec.js +175 -0
  504. package/lib/test/throttler.spec.js.map +1 -0
  505. package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
  506. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
  507. package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
  508. package/lib/throttler.d.ts.map +1 -0
  509. package/lib/{throttler.mjs → throttler.js} +1 -1
  510. package/lib/throttler.js.map +1 -0
  511. package/package.json +101 -88
  512. package/src/batchTracker.ts +1 -1
  513. package/src/blobManager.ts +1 -15
  514. package/src/{dataStores.ts → channelCollection.ts} +620 -175
  515. package/src/connectionTelemetry.ts +42 -3
  516. package/src/containerHandleContext.ts +1 -1
  517. package/src/containerRuntime.ts +604 -415
  518. package/src/dataStore.ts +16 -15
  519. package/src/dataStoreContext.ts +376 -216
  520. package/src/dataStoreContexts.ts +2 -1
  521. package/src/deltaManagerSummarizerProxy.ts +132 -7
  522. package/src/gc/garbageCollection.ts +84 -44
  523. package/src/gc/gcConfigs.ts +17 -7
  524. package/src/gc/gcDefinitions.ts +23 -13
  525. package/src/gc/gcHelpers.ts +2 -2
  526. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  527. package/src/gc/gcSummaryStateTracker.ts +19 -7
  528. package/src/gc/gcTelemetry.ts +9 -7
  529. package/src/gc/gcUnreferencedStateTracker.ts +1 -1
  530. package/src/gc/index.ts +10 -9
  531. package/src/index.ts +28 -27
  532. package/src/messageTypes.ts +3 -3
  533. package/src/opLifecycle/README.md +2 -4
  534. package/src/opLifecycle/batchManager.ts +2 -2
  535. package/src/opLifecycle/definitions.ts +2 -2
  536. package/src/opLifecycle/index.ts +8 -8
  537. package/src/opLifecycle/opCompressor.ts +3 -3
  538. package/src/opLifecycle/opDecompressor.ts +3 -3
  539. package/src/opLifecycle/opGroupingManager.ts +3 -12
  540. package/src/opLifecycle/opSplitter.ts +3 -3
  541. package/src/opLifecycle/outbox.ts +29 -9
  542. package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
  543. package/src/packageVersion.ts +1 -1
  544. package/src/pendingStateManager.ts +19 -13
  545. package/src/scheduleManager.ts +4 -4
  546. package/src/summary/index.ts +13 -12
  547. package/src/summary/orderedClientElection.ts +1 -1
  548. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  549. package/src/summary/runningSummarizer.ts +52 -32
  550. package/src/summary/summarizer.ts +7 -7
  551. package/src/summary/summarizerClientElection.ts +2 -2
  552. package/src/summary/summarizerHeuristics.ts +3 -3
  553. package/src/summary/summarizerNode/index.ts +6 -3
  554. package/src/summary/summarizerNode/summarizerNode.ts +50 -5
  555. package/src/summary/summarizerNode/summarizerNodeUtils.ts +14 -1
  556. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -11
  557. package/src/summary/summarizerTypes.ts +11 -23
  558. package/src/summary/summaryFormat.ts +16 -2
  559. package/src/summary/summaryGenerator.ts +16 -4
  560. package/src/summary/summaryManager.ts +6 -7
  561. package/tsconfig.cjs.json +7 -0
  562. package/tsconfig.json +2 -5
  563. package/dist/dataStores.d.ts +0 -151
  564. package/dist/dataStores.d.ts.map +0 -1
  565. package/dist/dataStores.js.map +0 -1
  566. package/dist/deltaManagerProxyBase.d.ts.map +0 -1
  567. package/dist/deltaManagerProxyBase.js +0 -77
  568. package/dist/deltaManagerProxyBase.js.map +0 -1
  569. package/lib/batchTracker.d.mts.map +0 -1
  570. package/lib/batchTracker.mjs.map +0 -1
  571. package/lib/blobManager.d.mts.map +0 -1
  572. package/lib/blobManager.mjs.map +0 -1
  573. package/lib/connectionTelemetry.d.mts.map +0 -1
  574. package/lib/connectionTelemetry.mjs.map +0 -1
  575. package/lib/containerHandleContext.d.mts.map +0 -1
  576. package/lib/containerHandleContext.mjs.map +0 -1
  577. package/lib/containerRuntime.d.mts.map +0 -1
  578. package/lib/containerRuntime.mjs.map +0 -1
  579. package/lib/dataStore.d.mts.map +0 -1
  580. package/lib/dataStore.mjs.map +0 -1
  581. package/lib/dataStoreContext.d.mts.map +0 -1
  582. package/lib/dataStoreContext.mjs.map +0 -1
  583. package/lib/dataStoreContexts.d.mts.map +0 -1
  584. package/lib/dataStoreContexts.mjs.map +0 -1
  585. package/lib/dataStoreRegistry.d.mts.map +0 -1
  586. package/lib/dataStoreRegistry.mjs.map +0 -1
  587. package/lib/dataStores.d.mts +0 -151
  588. package/lib/dataStores.d.mts.map +0 -1
  589. package/lib/dataStores.mjs.map +0 -1
  590. package/lib/deltaManagerProxyBase.d.mts +0 -35
  591. package/lib/deltaManagerProxyBase.d.mts.map +0 -1
  592. package/lib/deltaManagerProxyBase.mjs +0 -73
  593. package/lib/deltaManagerProxyBase.mjs.map +0 -1
  594. package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
  595. package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
  596. package/lib/deltaManagerSummarizerProxy.mjs +0 -38
  597. package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
  598. package/lib/deltaScheduler.d.mts.map +0 -1
  599. package/lib/deltaScheduler.mjs.map +0 -1
  600. package/lib/error.d.mts.map +0 -1
  601. package/lib/error.mjs.map +0 -1
  602. package/lib/gc/garbageCollection.d.mts.map +0 -1
  603. package/lib/gc/garbageCollection.mjs.map +0 -1
  604. package/lib/gc/gcConfigs.d.mts.map +0 -1
  605. package/lib/gc/gcConfigs.mjs.map +0 -1
  606. package/lib/gc/gcDefinitions.d.mts.map +0 -1
  607. package/lib/gc/gcDefinitions.mjs.map +0 -1
  608. package/lib/gc/gcHelpers.mjs.map +0 -1
  609. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
  610. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
  611. package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
  612. package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
  613. package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
  614. package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
  615. package/lib/gc/gcTelemetry.d.mts.map +0 -1
  616. package/lib/gc/gcTelemetry.mjs.map +0 -1
  617. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
  618. package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
  619. package/lib/gc/index.d.mts +0 -13
  620. package/lib/gc/index.d.mts.map +0 -1
  621. package/lib/gc/index.mjs.map +0 -1
  622. package/lib/index.d.mts.map +0 -1
  623. package/lib/index.mjs +0 -25
  624. package/lib/index.mjs.map +0 -1
  625. package/lib/messageTypes.d.mts.map +0 -1
  626. package/lib/messageTypes.mjs.map +0 -1
  627. package/lib/metadata.d.mts.map +0 -1
  628. package/lib/metadata.mjs.map +0 -1
  629. package/lib/opLifecycle/batchManager.d.mts.map +0 -1
  630. package/lib/opLifecycle/batchManager.mjs.map +0 -1
  631. package/lib/opLifecycle/definitions.d.mts.map +0 -1
  632. package/lib/opLifecycle/definitions.mjs.map +0 -1
  633. package/lib/opLifecycle/index.d.mts +0 -13
  634. package/lib/opLifecycle/index.d.mts.map +0 -1
  635. package/lib/opLifecycle/index.mjs +0 -12
  636. package/lib/opLifecycle/index.mjs.map +0 -1
  637. package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
  638. package/lib/opLifecycle/opCompressor.mjs.map +0 -1
  639. package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
  640. package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
  641. package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
  642. package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
  643. package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
  644. package/lib/opLifecycle/opSplitter.mjs.map +0 -1
  645. package/lib/opLifecycle/outbox.d.mts.map +0 -1
  646. package/lib/opLifecycle/outbox.mjs.map +0 -1
  647. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
  648. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
  649. package/lib/opProperties.d.mts.map +0 -1
  650. package/lib/opProperties.mjs.map +0 -1
  651. package/lib/packageVersion.d.mts.map +0 -1
  652. package/lib/packageVersion.mjs.map +0 -1
  653. package/lib/pendingStateManager.d.mts.map +0 -1
  654. package/lib/pendingStateManager.mjs.map +0 -1
  655. package/lib/scheduleManager.d.mts.map +0 -1
  656. package/lib/scheduleManager.mjs.map +0 -1
  657. package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
  658. package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
  659. package/lib/summary/index.d.mts.map +0 -1
  660. package/lib/summary/index.mjs.map +0 -1
  661. package/lib/summary/orderedClientElection.d.mts.map +0 -1
  662. package/lib/summary/orderedClientElection.mjs.map +0 -1
  663. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
  664. package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
  665. package/lib/summary/runningSummarizer.d.mts.map +0 -1
  666. package/lib/summary/runningSummarizer.mjs.map +0 -1
  667. package/lib/summary/summarizer.d.mts.map +0 -1
  668. package/lib/summary/summarizer.mjs.map +0 -1
  669. package/lib/summary/summarizerClientElection.d.mts.map +0 -1
  670. package/lib/summary/summarizerClientElection.mjs.map +0 -1
  671. package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
  672. package/lib/summary/summarizerHeuristics.mjs.map +0 -1
  673. package/lib/summary/summarizerNode/index.d.mts.map +0 -1
  674. package/lib/summary/summarizerNode/index.mjs +0 -7
  675. package/lib/summary/summarizerNode/index.mjs.map +0 -1
  676. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
  677. package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
  678. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
  679. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
  680. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
  681. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
  682. package/lib/summary/summarizerTypes.d.mts.map +0 -1
  683. package/lib/summary/summarizerTypes.mjs.map +0 -1
  684. package/lib/summary/summaryCollection.d.mts.map +0 -1
  685. package/lib/summary/summaryCollection.mjs.map +0 -1
  686. package/lib/summary/summaryFormat.d.mts.map +0 -1
  687. package/lib/summary/summaryFormat.mjs.map +0 -1
  688. package/lib/summary/summaryGenerator.d.mts.map +0 -1
  689. package/lib/summary/summaryGenerator.mjs.map +0 -1
  690. package/lib/summary/summaryManager.d.mts.map +0 -1
  691. package/lib/summary/summaryManager.mjs.map +0 -1
  692. package/lib/throttler.d.mts.map +0 -1
  693. package/lib/throttler.mjs.map +0 -1
  694. package/src/deltaManagerProxyBase.ts +0 -111
@@ -6,8 +6,9 @@
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
+ /** @internal */
11
12
  export class DataStoreContexts implements Iterable<[string, FluidDataStoreContext]>, IDisposable {
12
13
  private readonly notBoundContexts = new Set<string>();
13
14
 
@@ -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,
@@ -47,21 +47,21 @@ import {
47
47
  GarbageCollectionMessage,
48
48
  GarbageCollectionMessageType,
49
49
  disableAutoRecoveryKey,
50
- } from "./gcDefinitions";
50
+ } from "./gcDefinitions.js";
51
51
  import {
52
52
  cloneGCData,
53
53
  compatBehaviorAllowsGCMessageType,
54
54
  concatGarbageCollectionData,
55
55
  getGCDataFromSnapshot,
56
- } from "./gcHelpers";
57
- import { runGarbageCollection } from "./gcReferenceGraphAlgorithm";
58
- import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions";
59
- import { GCSummaryStateTracker } from "./gcSummaryStateTracker";
56
+ } from "./gcHelpers.js";
57
+ import { runGarbageCollection } from "./gcReferenceGraphAlgorithm.js";
58
+ import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions.js";
59
+ import { GCSummaryStateTracker } from "./gcSummaryStateTracker.js";
60
60
  import {
61
61
  UnreferencedStateTracker,
62
62
  UnreferencedStateTrackerMap,
63
- } from "./gcUnreferencedStateTracker";
64
- import { GCTelemetryTracker } from "./gcTelemetry";
63
+ } from "./gcUnreferencedStateTracker.js";
64
+ import { GCTelemetryTracker } from "./gcTelemetry.js";
65
65
 
66
66
  /**
67
67
  * The garbage collector for the container runtime. It consolidates the garbage collection functionality and maintains
@@ -98,6 +98,7 @@ export class GarbageCollector implements IGarbageCollector {
98
98
  return this.configs.shouldRunGC;
99
99
  }
100
100
 
101
+ public readonly sessionExpiryTimerStarted: number | undefined;
101
102
  // Keeps track of the GC state from the last run.
102
103
  private gcDataFromLastRun: IGarbageCollectionData | undefined;
103
104
  // Keeps a list of references (edges in the GC graph) between GC runs. Each entry has a node id and a list of
@@ -175,6 +176,7 @@ export class GarbageCollector implements IGarbageCollector {
175
176
 
176
177
  const baseSnapshot = createParams.baseSnapshot;
177
178
  const readAndParseBlob = createParams.readAndParseBlob;
179
+ const pendingSessionExpiryTimerStarted = createParams.sessionExpiryTimerStarted;
178
180
 
179
181
  this.mc = createChildMonitoringContext({
180
182
  logger: createParams.baseLogger,
@@ -192,14 +194,26 @@ export class GarbageCollector implements IGarbageCollector {
192
194
  const overrideSessionExpiryTimeoutMs = this.mc.config.getNumber(
193
195
  "Fluid.GarbageCollection.TestOverride.SessionExpiryMs",
194
196
  );
195
- const timeoutMs = overrideSessionExpiryTimeoutMs ?? this.configs.sessionExpiryTimeoutMs;
197
+ let timeoutMs = this.configs.sessionExpiryTimeoutMs;
196
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
+ }
197
210
  this.sessionExpiryTimer = new Timer(timeoutMs, () => {
198
211
  this.runtime.closeFn(
199
212
  new ClientSessionExpiredError(`Client session expired.`, timeoutMs),
200
213
  );
201
214
  });
202
215
  this.sessionExpiryTimer.start();
216
+ this.sessionExpiryTimerStarted = Date.now();
203
217
  }
204
218
 
205
219
  this.summaryStateTracker = new GCSummaryStateTracker(
@@ -454,7 +468,9 @@ export class GarbageCollector implements IGarbageCollector {
454
468
  ): Promise<IGCStats | undefined> {
455
469
  const fullGC =
456
470
  options.fullGC ??
457
- (this.configs.runFullGC === true || this.summaryStateTracker.doesSummaryStateNeedReset);
471
+ (this.configs.runFullGC === true ||
472
+ this.summaryStateTracker.autoRecovery.fullGCRequested() ||
473
+ this.summaryStateTracker.doesSummaryStateNeedReset);
458
474
 
459
475
  // Add the options that are used to run GC to the telemetry context.
460
476
  telemetryContext?.setMultiple("fluid_GC", "Options", {
@@ -566,8 +582,9 @@ export class GarbageCollector implements IGarbageCollector {
566
582
  );
567
583
 
568
584
  // 4. Run the Sweep phase.
569
- // It will tombstone any tombstone-ready nodes, and initiate the deletion of sweep-ready nodes by sending a
570
- // sweep op. All clients, including this one, will delete these nodes once it processes the op.
585
+ // It will initiate the deletion (sending the GC Sweep op) of any sweep-ready nodes that are
586
+ // allowed to be deleted per config, and tombstone the rest along with the tombstone-ready nodes.
587
+ // Note that no nodes will be deleted until the GC Sweep op is processed.
571
588
  this.runSweepPhase(gcResult, tombstoneReadyNodeIds, sweepReadyNodeIds);
572
589
 
573
590
  this.gcDataFromLastRun = cloneGCData(gcData);
@@ -667,24 +684,39 @@ export class GarbageCollector implements IGarbageCollector {
667
684
  */
668
685
 
669
686
  if (this.configs.testMode) {
670
- // If we are running in GC test mode, unreferenced nodes (gcResult.deletedNodeIds) are deleted.
671
- this.runtime.updateUnusedRoutes(gcResult.deletedNodeIds);
687
+ // If we are running in GC test mode, unreferenced nodes (gcResult.deletedNodeIds) are deleted immediately.
688
+ this.runtime.deleteSweepReadyNodes(gcResult.deletedNodeIds);
672
689
  return;
673
690
  }
674
691
 
675
- // If sweep is disabled, we'll tombstone both tombstone-ready and sweep-ready nodes.
692
+ // We'll build up the lists of nodes to be either Tombstoned or Deleted
693
+ // based on the configuration and the nodes' current state.
694
+ // We must Tombstone any sweep-ready node that Sweep won't run for.
676
695
  // This is important because a container may never load during a node's Sweep Grace Period,
677
696
  // so that node would directly become sweep-ready skipping over tombstone-ready state,
678
697
  // but should be Tombstoned since Sweep is disabled.
679
- const { nodesToTombstone, nodesToDelete } = this.configs.shouldRunSweep
680
- ? {
681
- nodesToTombstone: [...tombstoneReadyNodes],
682
- nodesToDelete: [...sweepReadyNodes],
683
- }
684
- : {
685
- nodesToTombstone: [...tombstoneReadyNodes, ...sweepReadyNodes],
686
- nodesToDelete: [],
687
- };
698
+ const { nodesToTombstone, nodesToDelete } = {
699
+ nodesToTombstone: [...tombstoneReadyNodes],
700
+ nodesToDelete: [] as string[],
701
+ };
702
+ switch (this.configs.shouldRunSweep) {
703
+ case "YES":
704
+ nodesToDelete.push(...sweepReadyNodes);
705
+ break;
706
+ case "ONLY_BLOBS":
707
+ sweepReadyNodes.forEach((nodeId) => {
708
+ const nodeType = this.runtime.getNodeType(nodeId);
709
+ if (nodeType === GCNodeType.Blob) {
710
+ nodesToDelete.push(nodeId);
711
+ } else {
712
+ nodesToTombstone.push(nodeId);
713
+ }
714
+ });
715
+ break;
716
+ default: // case "NO":
717
+ nodesToTombstone.push(...sweepReadyNodes);
718
+ break;
719
+ }
688
720
 
689
721
  if (this.configs.tombstoneMode) {
690
722
  this.tombstones = nodesToTombstone;
@@ -692,7 +724,7 @@ export class GarbageCollector implements IGarbageCollector {
692
724
  this.runtime.updateTombstonedRoutes(this.tombstones);
693
725
  }
694
726
 
695
- if (this.configs.shouldRunSweep && nodesToDelete.length > 0) {
727
+ if (nodesToDelete.length > 0) {
696
728
  // Do not send DDS node ids in the GC op. This is an optimization to reduce its size. Since GC applies to
697
729
  // to data store only, all its DDSes are deleted along with it. The DDS ids will be retrieved from the
698
730
  // local state when processing the op.
@@ -826,8 +858,7 @@ export class GarbageCollector implements IGarbageCollector {
826
858
  }
827
859
 
828
860
  return this.summaryStateTracker.summarize(
829
- fullTree,
830
- trackState,
861
+ trackState && !fullTree,
831
862
  gcState,
832
863
  this.deletedNodes,
833
864
  this.tombstones,
@@ -875,7 +906,11 @@ export class GarbageCollector implements IGarbageCollector {
875
906
 
876
907
  // Mark the node as referenced to ensure it isn't Swept
877
908
  const tombstonedNodePath = message.contents.nodePath;
878
- this.addedOutboundReference("/", tombstonedNodePath);
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();
879
914
 
880
915
  break;
881
916
  }
@@ -900,6 +935,10 @@ export class GarbageCollector implements IGarbageCollector {
900
935
  /**
901
936
  * Delete nodes that are sweep-ready. Call the runtime to delete these nodes and clear the unreferenced state
902
937
  * tracking for nodes that are actually deleted by the runtime.
938
+ *
939
+ * Note that this doesn't check any configuration around whether Sweep is enabled.
940
+ * That happens before the op is submitted, and from that point, any client should execute the delete.
941
+ *
903
942
  * @param sweepReadyNodeIds - The ids of nodes that are ready to be deleted.
904
943
  */
905
944
  private deleteSweepReadyNodes(sweepReadyNodeIds: readonly string[]) {
@@ -1035,7 +1074,7 @@ export class GarbageCollector implements IGarbageCollector {
1035
1074
  const containerGCMessage: ContainerRuntimeGCMessage = {
1036
1075
  type: ContainerMessageType.GC,
1037
1076
  contents: {
1038
- type: "TombstoneLoaded",
1077
+ type: GarbageCollectionMessageType.TombstoneLoaded,
1039
1078
  nodePath,
1040
1079
  },
1041
1080
  compatDetails: { behavior: "Ignore" },
@@ -1169,8 +1208,9 @@ export class GarbageCollector implements IGarbageCollector {
1169
1208
 
1170
1209
  /**
1171
1210
  * Generates the stats of a garbage collection sweep phase run.
1172
- * @param deletedNodes - The nodes that have been deleted until this run.
1173
- * @param sweepReadyNodes - The nodes that are sweep-ready in this GC run.
1211
+ * @param deletedNodes - The nodes that have already been deleted even before this run.
1212
+ * @param sweepReadyNodes - The nodes that are sweep-ready in this GC run. These will be deleted but are not deleted yet,
1213
+ * due to either sweep not being enabled or the Sweep Op needing to roundtrip before the delete is executed.
1174
1214
  * @param markPhaseStats - The stats of the mark phase run.
1175
1215
  * @returns the stats of the sweep phase run.
1176
1216
  */
@@ -1216,19 +1256,18 @@ export class GarbageCollector implements IGarbageCollector {
1216
1256
  }
1217
1257
  }
1218
1258
 
1219
- // If sweep is enabled, the counts from the mark phase stats do not include nodes that have been
1259
+ // The counts from the mark phase stats do not include nodes that were
1220
1260
  // deleted in previous runs. So, add the deleted node counts to life time stats.
1221
1261
  sweepPhaseStats.lifetimeNodeCount += sweepPhaseStats.deletedNodeCount;
1222
1262
  sweepPhaseStats.lifetimeDataStoreCount += sweepPhaseStats.deletedDataStoreCount;
1223
1263
  sweepPhaseStats.lifetimeAttachmentBlobCount += sweepPhaseStats.deletedAttachmentBlobCount;
1224
1264
 
1225
- if (this.configs.shouldRunSweep) {
1226
- return sweepPhaseStats;
1227
- }
1228
-
1229
- // If sweep is not enabled, the current sweep-ready node stats should be added to deleted stats since this
1230
- // is the final state the node will be in.
1231
- // If sweep is enabled, this will happen in the run after the GC op round trips back.
1265
+ // These stats are used to estimate the impact of GC in terms of how much garbage is/will be cleaned up.
1266
+ // So we include the current sweep-ready node stats since these nodes will be deleted eventually.
1267
+ // - If sweep is enabled, this will happen in the run after the GC op round trips back
1268
+ // (they'll be in deletedNodes that time).
1269
+ // - If sweep is not enabled, we still want to include these nodes since they
1270
+ // _will be_ deleted once it is enabled.
1232
1271
  for (const nodeId of sweepReadyNodes) {
1233
1272
  sweepPhaseStats.deletedNodeCount++;
1234
1273
  const nodeType = this.runtime.getNodeType(nodeId);
@@ -1238,6 +1277,7 @@ export class GarbageCollector implements IGarbageCollector {
1238
1277
  sweepPhaseStats.deletedAttachmentBlobCount++;
1239
1278
  }
1240
1279
  }
1280
+
1241
1281
  return sweepPhaseStats;
1242
1282
  }
1243
1283
  }
@@ -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,
@@ -32,8 +32,10 @@ import {
32
32
  defaultSweepGracePeriodMs,
33
33
  gcGenerationOptionName,
34
34
  IGCMetadata_Deprecated,
35
- } from "./gcDefinitions";
36
- import { getGCVersion, shouldAllowGcSweep } from "./gcHelpers";
35
+ disableDatastoreSweepKey,
36
+ gcDisableDataStoreSweepOptionName,
37
+ } from "./gcDefinitions.js";
38
+ import { getGCVersion, shouldAllowGcSweep } from "./gcHelpers.js";
37
39
 
38
40
  /**
39
41
  * Generates configurations for the Garbage Collector that it uses to determine what to run and how.
@@ -137,18 +139,26 @@ export function generateGCConfigs(
137
139
  * Whether sweep should run or not. This refers to whether Tombstones should fail on load and whether
138
140
  * sweep-ready nodes should be deleted.
139
141
  *
140
- * Assuming overall GC is enabled and Tombstone timeout is present, the following conditions have to be met to run sweep:
142
+ * Assuming overall GC is enabled and tombstoneTimeout is provided, the following conditions have to be met to run sweep:
141
143
  *
142
- * 1. Sweep should be enabled for this container.
143
- * 2. Sweep should be enabled for this session.
144
+ * 1. Sweep should be allowed in this container.
145
+ * 2. Sweep should be enabled for this session, optionally restricted to attachment blobs only.
144
146
  *
145
147
  * These conditions can be overridden via the RunSweep feature flag.
146
148
  */
147
- const shouldRunSweep =
149
+ const sweepEnabled: boolean =
148
150
  !shouldRunGC || tombstoneTimeoutMs === undefined
149
151
  ? false
150
152
  : mc.config.getBoolean(runSweepKey) ??
151
153
  (sweepAllowed && createParams.gcOptions.enableGCSweep === true);
154
+ const disableDatastoreSweep =
155
+ mc.config.getBoolean(disableDatastoreSweepKey) === true ||
156
+ createParams.gcOptions[gcDisableDataStoreSweepOptionName] === true;
157
+ const shouldRunSweep: IGarbageCollectorConfigs["shouldRunSweep"] = sweepEnabled
158
+ ? disableDatastoreSweep
159
+ ? "ONLY_BLOBS"
160
+ : "YES"
161
+ : "NO";
152
162
 
153
163
  // Override inactive timeout if test config or gc options to override it is set.
154
164
  const inactiveTimeoutMs =
@@ -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
@@ -40,6 +40,12 @@ export const nextGCVersion: GCVersion = 4;
40
40
  */
41
41
  export const gcDisableThrowOnTombstoneLoadOptionName = "gcDisableThrowOnTombstoneLoad";
42
42
 
43
+ /**
44
+ * This undocumented GC Option (on ContainerRuntime Options) allows an app to enable Sweep for blobs only.
45
+ * Only applies if enableGCSweep option is set to true.
46
+ */
47
+ export const gcDisableDataStoreSweepOptionName = "disableDataStoreSweep";
48
+
43
49
  /**
44
50
  * This undocumented GC Option (on ContainerRuntime Options) allows configuring which documents can have Sweep enabled.
45
51
  * This provides a way to disable both Tombstone Enforcement and Sweep.
@@ -70,10 +76,8 @@ export const throwOnTombstoneLoadOverrideKey =
70
76
  export const throwOnTombstoneUsageKey = "Fluid.GarbageCollection.ThrowOnTombstoneUsage";
71
77
  /** Config key to enable GC version upgrade. */
72
78
  export const gcVersionUpgradeToV4Key = "Fluid.GarbageCollection.GCVersionUpgradeToV4";
73
- /** Config key to disable GC sweep for datastores. */
79
+ /** Config key to disable GC sweep for datastores. They'll merely be Tombstoned. */
74
80
  export const disableDatastoreSweepKey = "Fluid.GarbageCollection.DisableDataStoreSweep";
75
- /** Config key to disable GC sweep for attachment blobs. */
76
- export const disableAttachmentBlobSweepKey = "Fluid.GarbageCollection.DisableAttachmentBlobSweep";
77
81
  /** Config key to revert new paradigm of detecting outbound routes in ContainerRuntime layer (use true) */
78
82
  export const detectOutboundRoutesViaDDSKey = "Fluid.GarbageCollection.DetectOutboundRoutesViaDDS";
79
83
  /** Config key to disable auto-recovery mechanism that protects Tombstones that are loaded from being swept (use true) */
@@ -303,8 +307,6 @@ export interface IGarbageCollectionRuntime {
303
307
  getGCData(fullGC?: boolean): Promise<IGarbageCollectionData>;
304
308
  /** After GC has run, called to notify the runtime of routes that are used in it. */
305
309
  updateUsedRoutes(usedRoutes: readonly string[]): void;
306
- /** After GC has run, called to notify the runtime of routes that are unused in it. */
307
- updateUnusedRoutes(unusedRoutes: readonly string[]): void;
308
310
  /**
309
311
  * After GC has run and identified nodes that are sweep ready, called to delete the sweep ready nodes. The runtime
310
312
  * should return the routes of nodes that were deleted.
@@ -323,6 +325,12 @@ export interface IGarbageCollectionRuntime {
323
325
 
324
326
  /** Defines the contract for the garbage collector. */
325
327
  export interface IGarbageCollector {
328
+ /**
329
+ * Tells the time at which session expiry timer started in a previous container.
330
+ * This is only set when loading from a stashed container and will be equal to the
331
+ * original container's local client time when it was loaded (and started the session expiry timer).
332
+ */
333
+ readonly sessionExpiryTimerStarted: number | undefined;
326
334
  /** Tells whether GC should run or not. */
327
335
  readonly shouldRunGC: boolean;
328
336
  /** Tells whether the GC state in summary needs to be reset in the next summary. */
@@ -371,7 +379,7 @@ export interface IGarbageCollector {
371
379
  headerData?: RuntimeHeaderData,
372
380
  ): void;
373
381
  /** Called when a reference is added to a node. Used to identify nodes that were referenced between summaries. */
374
- addedOutboundReference(fromNodePath: string, toNodePath: string): void;
382
+ addedOutboundReference(fromNodePath: string, toNodePath: string, autorecovery?: true): void;
375
383
  /** Called to process a garbage collection message. */
376
384
  processMessage(message: ContainerRuntimeGCMessage, local: boolean): void;
377
385
  /** Returns true if this node has been deleted by GC during sweep phase. */
@@ -394,6 +402,7 @@ export interface IGarbageCollectorCreateParams {
394
402
  readonly getLastSummaryTimestampMs: () => number | undefined;
395
403
  readonly readAndParseBlob: ReadAndParseBlob;
396
404
  readonly submitMessage: (message: ContainerRuntimeGCMessage) => void;
405
+ readonly sessionExpiryTimerStarted?: number | undefined;
397
406
  }
398
407
 
399
408
  /**
@@ -465,7 +474,7 @@ export interface IGarbageCollectorConfigs {
465
474
  */
466
475
  readonly gcEnabled: boolean;
467
476
  /**
468
- * Tracks if sweep phase is enabled for this document. This is specified during document creation and doesn't change
477
+ * Tracks if sweep phase is allowed for this document. This is specified during document creation and doesn't change
469
478
  * throughout its lifetime.
470
479
  */
471
480
  readonly sweepEnabled: boolean;
@@ -475,10 +484,11 @@ export interface IGarbageCollectorConfigs {
475
484
  */
476
485
  readonly shouldRunGC: boolean;
477
486
  /**
478
- * Tracks if sweep phase should run or not. Even if the sweep phase is enabled for a document (see sweepEnabled), it
479
- * can be explicitly disabled via feature flags. It also won't run if session expiry is not enabled.
487
+ * Tracks if sweep phase should run or not, or if it should run only for attachment blobs.
488
+ * Even if the sweep phase is allowed for a document (see sweepEnabled), it may be disabled or partially enabled
489
+ * for the session, depending on a variety of other configurations present.
480
490
  */
481
- readonly shouldRunSweep: boolean;
491
+ readonly shouldRunSweep: "YES" | "ONLY_BLOBS" | "NO";
482
492
  /**
483
493
  * If true, bypass optimizations and generate GC data for all nodes irrespective of whether a node changed or not.
484
494
  */
@@ -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.