@fluidframework/container-runtime 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.225277

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 (705) hide show
  1. package/.eslintrc.js +19 -29
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +427 -0
  4. package/README.md +69 -0
  5. package/api-extractor-esm.json +4 -0
  6. package/api-extractor-lint.json +4 -0
  7. package/api-extractor.json +2 -2
  8. package/api-report/container-runtime.api.md +863 -0
  9. package/dist/{batchTracker.js → batchTracker.cjs} +9 -8
  10. package/dist/batchTracker.cjs.map +1 -0
  11. package/dist/batchTracker.d.ts +6 -5
  12. package/dist/batchTracker.d.ts.map +1 -1
  13. package/dist/blobManager.cjs +709 -0
  14. package/dist/blobManager.cjs.map +1 -0
  15. package/dist/blobManager.d.ts +140 -39
  16. package/dist/blobManager.d.ts.map +1 -1
  17. package/dist/connectionTelemetry.cjs +230 -0
  18. package/dist/connectionTelemetry.cjs.map +1 -0
  19. package/dist/connectionTelemetry.d.ts +2 -2
  20. package/dist/connectionTelemetry.d.ts.map +1 -1
  21. package/dist/container-runtime-alpha.d.ts +1690 -0
  22. package/dist/container-runtime-beta.d.ts +250 -0
  23. package/dist/container-runtime-public.d.ts +250 -0
  24. package/dist/container-runtime-untrimmed.d.ts +1805 -0
  25. package/dist/{containerHandleContext.js → containerHandleContext.cjs} +4 -2
  26. package/dist/containerHandleContext.cjs.map +1 -0
  27. package/dist/containerHandleContext.d.ts.map +1 -1
  28. package/dist/containerRuntime.cjs +2535 -0
  29. package/dist/containerRuntime.cjs.map +1 -0
  30. package/dist/containerRuntime.d.ts +458 -256
  31. package/dist/containerRuntime.d.ts.map +1 -1
  32. package/dist/{dataStore.js → dataStore.cjs} +54 -45
  33. package/dist/dataStore.cjs.map +1 -0
  34. package/dist/dataStore.d.ts +2 -2
  35. package/dist/dataStore.d.ts.map +1 -1
  36. package/dist/{dataStoreContext.js → dataStoreContext.cjs} +343 -247
  37. package/dist/dataStoreContext.cjs.map +1 -0
  38. package/dist/dataStoreContext.d.ts +73 -41
  39. package/dist/dataStoreContext.d.ts.map +1 -1
  40. package/dist/{dataStoreContexts.js → dataStoreContexts.cjs} +19 -15
  41. package/dist/dataStoreContexts.cjs.map +1 -0
  42. package/dist/dataStoreContexts.d.ts +1 -1
  43. package/dist/dataStoreContexts.d.ts.map +1 -1
  44. package/dist/{dataStoreRegistry.js → dataStoreRegistry.cjs} +9 -4
  45. package/dist/dataStoreRegistry.cjs.map +1 -0
  46. package/dist/dataStoreRegistry.d.ts +3 -0
  47. package/dist/dataStoreRegistry.d.ts.map +1 -1
  48. package/dist/{dataStores.js → dataStores.cjs} +276 -124
  49. package/dist/dataStores.cjs.map +1 -0
  50. package/dist/dataStores.d.ts +56 -23
  51. package/dist/dataStores.d.ts.map +1 -1
  52. package/dist/deltaManagerProxyBase.cjs +77 -0
  53. package/dist/deltaManagerProxyBase.cjs.map +1 -0
  54. package/dist/deltaManagerProxyBase.d.ts +35 -0
  55. package/dist/deltaManagerProxyBase.d.ts.map +1 -0
  56. package/dist/deltaManagerSummarizerProxy.cjs +42 -0
  57. package/dist/deltaManagerSummarizerProxy.cjs.map +1 -0
  58. package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
  59. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
  60. package/dist/{deltaScheduler.js → deltaScheduler.cjs} +25 -18
  61. package/dist/deltaScheduler.cjs.map +1 -0
  62. package/dist/deltaScheduler.d.ts +8 -6
  63. package/dist/deltaScheduler.d.ts.map +1 -1
  64. package/dist/error.cjs +21 -0
  65. package/dist/error.cjs.map +1 -0
  66. package/dist/error.d.ts +14 -0
  67. package/dist/error.d.ts.map +1 -0
  68. package/dist/gc/garbageCollection.cjs +865 -0
  69. package/dist/gc/garbageCollection.cjs.map +1 -0
  70. package/dist/gc/garbageCollection.d.ts +224 -0
  71. package/dist/gc/garbageCollection.d.ts.map +1 -0
  72. package/dist/gc/gcConfigs.cjs +160 -0
  73. package/dist/gc/gcConfigs.cjs.map +1 -0
  74. package/dist/gc/gcConfigs.d.ts +23 -0
  75. package/dist/gc/gcConfigs.d.ts.map +1 -0
  76. package/dist/gc/gcDefinitions.cjs +96 -0
  77. package/dist/gc/gcDefinitions.cjs.map +1 -0
  78. package/dist/gc/gcDefinitions.d.ts +458 -0
  79. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  80. package/dist/gc/gcHelpers.cjs +235 -0
  81. package/dist/gc/gcHelpers.cjs.map +1 -0
  82. package/dist/gc/gcHelpers.d.ts +71 -0
  83. package/dist/gc/gcHelpers.d.ts.map +1 -0
  84. package/dist/gc/gcReferenceGraphAlgorithm.cjs +49 -0
  85. package/dist/gc/gcReferenceGraphAlgorithm.cjs.map +1 -0
  86. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  87. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  88. package/dist/{summarizerTypes.js → gc/gcSummaryDefinitions.cjs} +1 -6
  89. package/dist/gc/gcSummaryDefinitions.cjs.map +1 -0
  90. package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
  91. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
  92. package/dist/gc/gcSummaryStateTracker.cjs +213 -0
  93. package/dist/gc/gcSummaryStateTracker.cjs.map +1 -0
  94. package/dist/gc/gcSummaryStateTracker.d.ts +94 -0
  95. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  96. package/dist/gc/gcTelemetry.cjs +307 -0
  97. package/dist/gc/gcTelemetry.cjs.map +1 -0
  98. package/dist/gc/gcTelemetry.d.ts +99 -0
  99. package/dist/gc/gcTelemetry.d.ts.map +1 -0
  100. package/dist/gc/gcUnreferencedStateTracker.cjs +118 -0
  101. package/dist/gc/gcUnreferencedStateTracker.cjs.map +1 -0
  102. package/dist/gc/gcUnreferencedStateTracker.d.ts +40 -0
  103. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  104. package/dist/gc/index.cjs +44 -0
  105. package/dist/gc/index.cjs.map +1 -0
  106. package/dist/gc/index.d.ts +13 -0
  107. package/dist/gc/index.d.ts.map +1 -0
  108. package/dist/index.cjs +47 -0
  109. package/dist/index.cjs.map +1 -0
  110. package/dist/index.d.ts +19 -8
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/messageTypes.cjs +37 -0
  113. package/dist/messageTypes.cjs.map +1 -0
  114. package/dist/messageTypes.d.ts +142 -0
  115. package/dist/messageTypes.d.ts.map +1 -0
  116. package/dist/metadata.cjs +7 -0
  117. package/dist/metadata.cjs.map +1 -0
  118. package/dist/metadata.d.ts +24 -0
  119. package/dist/metadata.d.ts.map +1 -0
  120. package/dist/opLifecycle/batchManager.cjs +139 -0
  121. package/dist/opLifecycle/batchManager.cjs.map +1 -0
  122. package/dist/opLifecycle/batchManager.d.ts +48 -0
  123. package/dist/opLifecycle/batchManager.d.ts.map +1 -0
  124. package/dist/opLifecycle/definitions.cjs +7 -0
  125. package/dist/opLifecycle/definitions.cjs.map +1 -0
  126. package/dist/opLifecycle/definitions.d.ts +83 -0
  127. package/dist/opLifecycle/definitions.d.ts.map +1 -0
  128. package/dist/opLifecycle/index.cjs +26 -0
  129. package/dist/opLifecycle/index.cjs.map +1 -0
  130. package/dist/opLifecycle/index.d.ts +13 -0
  131. package/dist/opLifecycle/index.d.ts.map +1 -0
  132. package/dist/opLifecycle/opCompressor.cjs +84 -0
  133. package/dist/opLifecycle/opCompressor.cjs.map +1 -0
  134. package/dist/opLifecycle/opCompressor.d.ts +18 -0
  135. package/dist/opLifecycle/opCompressor.d.ts.map +1 -0
  136. package/dist/opLifecycle/opDecompressor.cjs +132 -0
  137. package/dist/opLifecycle/opDecompressor.cjs.map +1 -0
  138. package/dist/opLifecycle/opDecompressor.d.ts +25 -0
  139. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -0
  140. package/dist/opLifecycle/opGroupingManager.cjs +95 -0
  141. package/dist/opLifecycle/opGroupingManager.cjs.map +1 -0
  142. package/dist/opLifecycle/opGroupingManager.d.ts +22 -0
  143. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -0
  144. package/dist/opLifecycle/opSplitter.cjs +202 -0
  145. package/dist/opLifecycle/opSplitter.cjs.map +1 -0
  146. package/dist/opLifecycle/opSplitter.d.ts +61 -0
  147. package/dist/opLifecycle/opSplitter.d.ts.map +1 -0
  148. package/dist/opLifecycle/outbox.cjs +326 -0
  149. package/dist/opLifecycle/outbox.cjs.map +1 -0
  150. package/dist/opLifecycle/outbox.d.ts +104 -0
  151. package/dist/opLifecycle/outbox.d.ts.map +1 -0
  152. package/dist/opLifecycle/remoteMessageProcessor.cjs +136 -0
  153. package/dist/opLifecycle/remoteMessageProcessor.cjs.map +1 -0
  154. package/dist/opLifecycle/remoteMessageProcessor.d.ts +47 -0
  155. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  156. package/dist/opProperties.cjs +17 -0
  157. package/dist/opProperties.cjs.map +1 -0
  158. package/dist/opProperties.d.ts +7 -0
  159. package/dist/opProperties.d.ts.map +1 -0
  160. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  161. package/dist/packageVersion.cjs.map +1 -0
  162. package/dist/packageVersion.d.ts +1 -1
  163. package/dist/packageVersion.d.ts.map +1 -1
  164. package/dist/pendingStateManager.cjs +282 -0
  165. package/dist/pendingStateManager.cjs.map +1 -0
  166. package/dist/pendingStateManager.d.ts +32 -69
  167. package/dist/pendingStateManager.d.ts.map +1 -1
  168. package/dist/scheduleManager.cjs +258 -0
  169. package/dist/scheduleManager.cjs.map +1 -0
  170. package/dist/scheduleManager.d.ts +31 -0
  171. package/dist/scheduleManager.d.ts.map +1 -0
  172. package/dist/storageServiceWithAttachBlobs.cjs +32 -0
  173. package/dist/storageServiceWithAttachBlobs.cjs.map +1 -0
  174. package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
  175. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
  176. package/dist/summary/index.cjs +51 -0
  177. package/dist/summary/index.cjs.map +1 -0
  178. package/dist/summary/index.d.ts +17 -0
  179. package/dist/summary/index.d.ts.map +1 -0
  180. package/dist/{orderedClientElection.js → summary/orderedClientElection.cjs} +100 -84
  181. package/dist/summary/orderedClientElection.cjs.map +1 -0
  182. package/{lib → dist/summary}/orderedClientElection.d.ts +41 -18
  183. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  184. package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.cjs} +12 -10
  185. package/dist/summary/runWhileConnectedCoordinator.cjs.map +1 -0
  186. package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +8 -2
  187. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  188. package/dist/summary/runningSummarizer.cjs +679 -0
  189. package/dist/summary/runningSummarizer.cjs.map +1 -0
  190. package/dist/summary/runningSummarizer.d.ts +128 -0
  191. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  192. package/dist/summary/summarizer.cjs +263 -0
  193. package/dist/summary/summarizer.cjs.map +1 -0
  194. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +18 -33
  195. package/dist/summary/summarizer.d.ts.map +1 -0
  196. package/dist/{summarizerClientElection.js → summary/summarizerClientElection.cjs} +15 -46
  197. package/dist/summary/summarizerClientElection.cjs.map +1 -0
  198. package/{lib → dist/summary}/summarizerClientElection.d.ts +4 -4
  199. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  200. package/dist/summary/summarizerHeuristics.cjs +156 -0
  201. package/dist/summary/summarizerHeuristics.cjs.map +1 -0
  202. package/{lib → dist/summary}/summarizerHeuristics.d.ts +28 -6
  203. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  204. package/dist/summary/summarizerNode/index.cjs +12 -0
  205. package/dist/summary/summarizerNode/index.cjs.map +1 -0
  206. package/dist/summary/summarizerNode/index.d.ts +8 -0
  207. package/dist/summary/summarizerNode/index.d.ts.map +1 -0
  208. package/dist/summary/summarizerNode/summarizerNode.cjs +526 -0
  209. package/dist/summary/summarizerNode/summarizerNode.cjs.map +1 -0
  210. package/dist/summary/summarizerNode/summarizerNode.d.ts +167 -0
  211. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  212. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs +130 -0
  213. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs.map +1 -0
  214. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +121 -0
  215. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  216. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs +375 -0
  217. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs.map +1 -0
  218. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +153 -0
  219. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  220. package/dist/summary/summarizerTypes.cjs +7 -0
  221. package/dist/summary/summarizerTypes.cjs.map +1 -0
  222. package/{lib → dist/summary}/summarizerTypes.d.ts +233 -83
  223. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  224. package/dist/{summaryCollection.js → summary/summaryCollection.cjs} +80 -49
  225. package/dist/summary/summaryCollection.cjs.map +1 -0
  226. package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +23 -5
  227. package/dist/summary/summaryCollection.d.ts.map +1 -0
  228. package/dist/{summaryFormat.js → summary/summaryFormat.cjs} +29 -26
  229. package/dist/summary/summaryFormat.cjs.map +1 -0
  230. package/{lib → dist/summary}/summaryFormat.d.ts +25 -30
  231. package/dist/summary/summaryFormat.d.ts.map +1 -0
  232. package/dist/{summaryGenerator.js → summary/summaryGenerator.cjs} +162 -74
  233. package/dist/summary/summaryGenerator.cjs.map +1 -0
  234. package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +53 -11
  235. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  236. package/dist/{summaryManager.js → summary/summaryManager.cjs} +98 -55
  237. package/dist/summary/summaryManager.cjs.map +1 -0
  238. package/{lib → dist/summary}/summaryManager.d.ts +13 -11
  239. package/dist/summary/summaryManager.d.ts.map +1 -0
  240. package/dist/{throttler.js → throttler.cjs} +21 -21
  241. package/dist/throttler.cjs.map +1 -0
  242. package/dist/throttler.d.ts +2 -2
  243. package/dist/throttler.d.ts.map +1 -1
  244. package/dist/tsdoc-metadata.json +11 -0
  245. package/lib/{batchTracker.d.ts → batchTracker.d.mts} +7 -6
  246. package/lib/batchTracker.d.mts.map +1 -0
  247. package/lib/{batchTracker.js → batchTracker.mjs} +9 -8
  248. package/lib/batchTracker.mjs.map +1 -0
  249. package/lib/blobManager.d.mts +196 -0
  250. package/lib/blobManager.d.mts.map +1 -0
  251. package/lib/blobManager.mjs +704 -0
  252. package/lib/blobManager.mjs.map +1 -0
  253. package/lib/{connectionTelemetry.d.ts → connectionTelemetry.d.mts} +3 -3
  254. package/lib/connectionTelemetry.d.mts.map +1 -0
  255. package/lib/connectionTelemetry.mjs +226 -0
  256. package/lib/connectionTelemetry.mjs.map +1 -0
  257. package/lib/container-runtime-alpha.d.mts +1690 -0
  258. package/lib/container-runtime-beta.d.mts +250 -0
  259. package/lib/container-runtime-public.d.mts +250 -0
  260. package/lib/container-runtime-untrimmed.d.mts +1805 -0
  261. package/lib/{containerHandleContext.d.ts → containerHandleContext.d.mts} +2 -2
  262. package/lib/containerHandleContext.d.mts.map +1 -0
  263. package/lib/{containerHandleContext.js → containerHandleContext.mjs} +4 -2
  264. package/lib/containerHandleContext.mjs.map +1 -0
  265. package/lib/containerRuntime.d.mts +813 -0
  266. package/lib/containerRuntime.d.mts.map +1 -0
  267. package/lib/containerRuntime.mjs +2530 -0
  268. package/lib/containerRuntime.mjs.map +1 -0
  269. package/lib/{dataStore.d.ts → dataStore.d.mts} +5 -5
  270. package/lib/dataStore.d.mts.map +1 -0
  271. package/lib/{dataStore.js → dataStore.mjs} +52 -43
  272. package/lib/dataStore.mjs.map +1 -0
  273. package/lib/{dataStoreContext.d.ts → dataStoreContext.d.mts} +75 -43
  274. package/lib/dataStoreContext.d.mts.map +1 -0
  275. package/lib/{dataStoreContext.js → dataStoreContext.mjs} +309 -213
  276. package/lib/dataStoreContext.mjs.map +1 -0
  277. package/lib/{dataStoreContexts.d.ts → dataStoreContexts.d.mts} +3 -3
  278. package/lib/dataStoreContexts.d.mts.map +1 -0
  279. package/lib/{dataStoreContexts.js → dataStoreContexts.mjs} +12 -8
  280. package/lib/dataStoreContexts.mjs.map +1 -0
  281. package/lib/{dataStoreRegistry.d.ts → dataStoreRegistry.d.mts} +4 -1
  282. package/lib/dataStoreRegistry.d.mts.map +1 -0
  283. package/lib/{dataStoreRegistry.js → dataStoreRegistry.mjs} +7 -6
  284. package/lib/dataStoreRegistry.mjs.map +1 -0
  285. package/lib/{dataStores.d.ts → dataStores.d.mts} +60 -27
  286. package/lib/dataStores.d.mts.map +1 -0
  287. package/lib/{dataStores.js → dataStores.mjs} +257 -105
  288. package/lib/dataStores.mjs.map +1 -0
  289. package/lib/deltaManagerProxyBase.d.mts +35 -0
  290. package/lib/deltaManagerProxyBase.d.mts.map +1 -0
  291. package/lib/deltaManagerProxyBase.mjs +73 -0
  292. package/lib/deltaManagerProxyBase.mjs.map +1 -0
  293. package/lib/deltaManagerSummarizerProxy.d.mts +19 -0
  294. package/lib/deltaManagerSummarizerProxy.d.mts.map +1 -0
  295. package/lib/deltaManagerSummarizerProxy.mjs +38 -0
  296. package/lib/deltaManagerSummarizerProxy.mjs.map +1 -0
  297. package/lib/{deltaScheduler.d.ts → deltaScheduler.d.mts} +9 -7
  298. package/lib/deltaScheduler.d.mts.map +1 -0
  299. package/lib/{deltaScheduler.js → deltaScheduler.mjs} +22 -15
  300. package/lib/deltaScheduler.mjs.map +1 -0
  301. package/lib/error.d.mts +14 -0
  302. package/lib/error.d.mts.map +1 -0
  303. package/lib/error.mjs +17 -0
  304. package/lib/error.mjs.map +1 -0
  305. package/lib/gc/garbageCollection.d.mts +224 -0
  306. package/lib/gc/garbageCollection.d.mts.map +1 -0
  307. package/lib/gc/garbageCollection.mjs +861 -0
  308. package/lib/gc/garbageCollection.mjs.map +1 -0
  309. package/lib/gc/gcConfigs.d.mts +23 -0
  310. package/lib/gc/gcConfigs.d.mts.map +1 -0
  311. package/lib/gc/gcConfigs.mjs +156 -0
  312. package/lib/gc/gcConfigs.mjs.map +1 -0
  313. package/lib/gc/gcDefinitions.d.mts +458 -0
  314. package/lib/gc/gcDefinitions.d.mts.map +1 -0
  315. package/lib/gc/gcDefinitions.mjs +93 -0
  316. package/lib/gc/gcDefinitions.mjs.map +1 -0
  317. package/lib/gc/gcHelpers.d.mts +71 -0
  318. package/lib/gc/gcHelpers.d.mts.map +1 -0
  319. package/lib/gc/gcHelpers.mjs +222 -0
  320. package/lib/gc/gcHelpers.mjs.map +1 -0
  321. package/lib/gc/gcReferenceGraphAlgorithm.d.mts +16 -0
  322. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +1 -0
  323. package/lib/gc/gcReferenceGraphAlgorithm.mjs +45 -0
  324. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +1 -0
  325. package/lib/gc/gcSummaryDefinitions.d.mts +52 -0
  326. package/lib/gc/gcSummaryDefinitions.d.mts.map +1 -0
  327. package/lib/gc/gcSummaryDefinitions.mjs +6 -0
  328. package/lib/gc/gcSummaryDefinitions.mjs.map +1 -0
  329. package/lib/gc/gcSummaryStateTracker.d.mts +94 -0
  330. package/lib/gc/gcSummaryStateTracker.d.mts.map +1 -0
  331. package/lib/gc/gcSummaryStateTracker.mjs +209 -0
  332. package/lib/gc/gcSummaryStateTracker.mjs.map +1 -0
  333. package/lib/gc/gcTelemetry.d.mts +99 -0
  334. package/lib/gc/gcTelemetry.d.mts.map +1 -0
  335. package/lib/gc/gcTelemetry.mjs +302 -0
  336. package/lib/gc/gcTelemetry.mjs.map +1 -0
  337. package/lib/gc/gcUnreferencedStateTracker.d.mts +40 -0
  338. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +1 -0
  339. package/lib/gc/gcUnreferencedStateTracker.mjs +114 -0
  340. package/lib/gc/gcUnreferencedStateTracker.mjs.map +1 -0
  341. package/lib/gc/index.d.mts +13 -0
  342. package/lib/gc/index.d.mts.map +1 -0
  343. package/lib/gc/index.mjs +12 -0
  344. package/lib/gc/index.mjs.map +1 -0
  345. package/lib/index.d.mts +25 -0
  346. package/lib/index.d.mts.map +1 -0
  347. package/lib/index.mjs +24 -0
  348. package/lib/index.mjs.map +1 -0
  349. package/lib/messageTypes.d.mts +142 -0
  350. package/lib/messageTypes.d.mts.map +1 -0
  351. package/lib/messageTypes.mjs +34 -0
  352. package/lib/messageTypes.mjs.map +1 -0
  353. package/lib/metadata.d.mts +24 -0
  354. package/lib/metadata.d.mts.map +1 -0
  355. package/lib/metadata.mjs +6 -0
  356. package/lib/metadata.mjs.map +1 -0
  357. package/lib/opLifecycle/batchManager.d.mts +48 -0
  358. package/lib/opLifecycle/batchManager.d.mts.map +1 -0
  359. package/lib/opLifecycle/batchManager.mjs +133 -0
  360. package/lib/opLifecycle/batchManager.mjs.map +1 -0
  361. package/lib/opLifecycle/definitions.d.mts +83 -0
  362. package/lib/opLifecycle/definitions.d.mts.map +1 -0
  363. package/lib/opLifecycle/definitions.mjs +6 -0
  364. package/lib/opLifecycle/definitions.mjs.map +1 -0
  365. package/lib/opLifecycle/index.d.mts +13 -0
  366. package/lib/opLifecycle/index.d.mts.map +1 -0
  367. package/lib/opLifecycle/index.mjs +12 -0
  368. package/lib/opLifecycle/index.mjs.map +1 -0
  369. package/lib/opLifecycle/opCompressor.d.mts +18 -0
  370. package/lib/opLifecycle/opCompressor.d.mts.map +1 -0
  371. package/lib/opLifecycle/opCompressor.mjs +80 -0
  372. package/lib/opLifecycle/opCompressor.mjs.map +1 -0
  373. package/lib/opLifecycle/opDecompressor.d.mts +25 -0
  374. package/lib/opLifecycle/opDecompressor.d.mts.map +1 -0
  375. package/lib/opLifecycle/opDecompressor.mjs +128 -0
  376. package/lib/opLifecycle/opDecompressor.mjs.map +1 -0
  377. package/lib/opLifecycle/opGroupingManager.d.mts +22 -0
  378. package/lib/opLifecycle/opGroupingManager.d.mts.map +1 -0
  379. package/lib/opLifecycle/opGroupingManager.mjs +91 -0
  380. package/lib/opLifecycle/opGroupingManager.mjs.map +1 -0
  381. package/lib/opLifecycle/opSplitter.d.mts +61 -0
  382. package/lib/opLifecycle/opSplitter.d.mts.map +1 -0
  383. package/lib/opLifecycle/opSplitter.mjs +197 -0
  384. package/lib/opLifecycle/opSplitter.mjs.map +1 -0
  385. package/lib/opLifecycle/outbox.d.mts +104 -0
  386. package/lib/opLifecycle/outbox.d.mts.map +1 -0
  387. package/lib/opLifecycle/outbox.mjs +321 -0
  388. package/lib/opLifecycle/outbox.mjs.map +1 -0
  389. package/lib/opLifecycle/remoteMessageProcessor.d.mts +47 -0
  390. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +1 -0
  391. package/lib/opLifecycle/remoteMessageProcessor.mjs +131 -0
  392. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +1 -0
  393. package/lib/opProperties.d.mts +7 -0
  394. package/lib/opProperties.d.mts.map +1 -0
  395. package/lib/opProperties.mjs +13 -0
  396. package/lib/opProperties.mjs.map +1 -0
  397. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +2 -2
  398. package/lib/packageVersion.d.mts.map +1 -0
  399. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  400. package/lib/packageVersion.mjs.map +1 -0
  401. package/lib/{pendingStateManager.d.ts → pendingStateManager.d.mts} +33 -70
  402. package/lib/pendingStateManager.d.mts.map +1 -0
  403. package/lib/pendingStateManager.mjs +275 -0
  404. package/lib/pendingStateManager.mjs.map +1 -0
  405. package/lib/scheduleManager.d.mts +27 -0
  406. package/lib/scheduleManager.d.mts.map +1 -0
  407. package/lib/scheduleManager.mjs +254 -0
  408. package/lib/scheduleManager.mjs.map +1 -0
  409. package/lib/storageServiceWithAttachBlobs.d.mts +17 -0
  410. package/lib/storageServiceWithAttachBlobs.d.mts.map +1 -0
  411. package/lib/storageServiceWithAttachBlobs.mjs +28 -0
  412. package/lib/storageServiceWithAttachBlobs.mjs.map +1 -0
  413. package/lib/summary/index.d.mts +17 -0
  414. package/lib/summary/index.d.mts.map +1 -0
  415. package/lib/summary/index.mjs +16 -0
  416. package/lib/summary/index.mjs.map +1 -0
  417. package/{dist/orderedClientElection.d.ts → lib/summary/orderedClientElection.d.mts} +42 -23
  418. package/lib/summary/orderedClientElection.d.mts.map +1 -0
  419. package/lib/{orderedClientElection.js → summary/orderedClientElection.mjs} +95 -79
  420. package/lib/summary/orderedClientElection.mjs.map +1 -0
  421. package/{dist/runWhileConnectedCoordinator.d.ts → lib/summary/runWhileConnectedCoordinator.d.mts} +10 -4
  422. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +1 -0
  423. package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.mjs} +12 -10
  424. package/lib/summary/runWhileConnectedCoordinator.mjs.map +1 -0
  425. package/lib/summary/runningSummarizer.d.mts +128 -0
  426. package/lib/summary/runningSummarizer.d.mts.map +1 -0
  427. package/lib/summary/runningSummarizer.mjs +675 -0
  428. package/lib/summary/runningSummarizer.mjs.map +1 -0
  429. package/lib/{summarizer.d.ts → summary/summarizer.d.mts} +21 -36
  430. package/lib/summary/summarizer.d.mts.map +1 -0
  431. package/lib/summary/summarizer.mjs +257 -0
  432. package/lib/summary/summarizer.mjs.map +1 -0
  433. package/{dist/summarizerClientElection.d.ts → lib/summary/summarizerClientElection.d.mts} +7 -7
  434. package/lib/summary/summarizerClientElection.d.mts.map +1 -0
  435. package/lib/{summarizerClientElection.js → summary/summarizerClientElection.mjs} +14 -45
  436. package/lib/summary/summarizerClientElection.mjs.map +1 -0
  437. package/{dist/summarizerHeuristics.d.ts → lib/summary/summarizerHeuristics.d.mts} +30 -8
  438. package/lib/summary/summarizerHeuristics.d.mts.map +1 -0
  439. package/lib/summary/summarizerHeuristics.mjs +151 -0
  440. package/lib/summary/summarizerHeuristics.mjs.map +1 -0
  441. package/lib/summary/summarizerNode/index.d.mts +8 -0
  442. package/lib/summary/summarizerNode/index.d.mts.map +1 -0
  443. package/lib/summary/summarizerNode/index.mjs +7 -0
  444. package/lib/summary/summarizerNode/index.mjs.map +1 -0
  445. package/lib/summary/summarizerNode/summarizerNode.d.mts +167 -0
  446. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +1 -0
  447. package/lib/summary/summarizerNode/summarizerNode.mjs +521 -0
  448. package/lib/summary/summarizerNode/summarizerNode.mjs.map +1 -0
  449. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts +121 -0
  450. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +1 -0
  451. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs +123 -0
  452. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +1 -0
  453. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts +153 -0
  454. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +1 -0
  455. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs +370 -0
  456. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +1 -0
  457. package/{dist/summarizerTypes.d.ts → lib/summary/summarizerTypes.d.mts} +235 -85
  458. package/lib/summary/summarizerTypes.d.mts.map +1 -0
  459. package/lib/summary/summarizerTypes.mjs +6 -0
  460. package/lib/summary/summarizerTypes.mjs.map +1 -0
  461. package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.mts} +24 -6
  462. package/lib/summary/summaryCollection.d.mts.map +1 -0
  463. package/lib/{summaryCollection.js → summary/summaryCollection.mjs} +76 -45
  464. package/lib/summary/summaryCollection.mjs.map +1 -0
  465. package/{dist/summaryFormat.d.ts → lib/summary/summaryFormat.d.mts} +26 -31
  466. package/lib/summary/summaryFormat.d.mts.map +1 -0
  467. package/lib/{summaryFormat.js → summary/summaryFormat.mjs} +30 -26
  468. package/lib/summary/summaryFormat.mjs.map +1 -0
  469. package/lib/summary/summaryGenerator.d.mts +127 -0
  470. package/lib/summary/summaryGenerator.d.mts.map +1 -0
  471. package/lib/{summaryGenerator.js → summary/summaryGenerator.mjs} +153 -67
  472. package/lib/summary/summaryGenerator.mjs.map +1 -0
  473. package/{dist/summaryManager.d.ts → lib/summary/summaryManager.d.mts} +16 -14
  474. package/lib/summary/summaryManager.d.mts.map +1 -0
  475. package/lib/{summaryManager.js → summary/summaryManager.mjs} +94 -51
  476. package/lib/summary/summaryManager.mjs.map +1 -0
  477. package/lib/{throttler.d.ts → throttler.d.mts} +3 -3
  478. package/lib/throttler.d.mts.map +1 -0
  479. package/lib/{throttler.js → throttler.mjs} +21 -21
  480. package/lib/throttler.mjs.map +1 -0
  481. package/package.json +199 -71
  482. package/prettier.config.cjs +8 -0
  483. package/src/batchTracker.ts +59 -54
  484. package/src/blobManager.ts +942 -294
  485. package/src/connectionTelemetry.ts +342 -252
  486. package/src/containerHandleContext.ts +27 -29
  487. package/src/containerRuntime.ts +3883 -3143
  488. package/src/dataStore.ts +170 -140
  489. package/src/dataStoreContext.ts +1166 -986
  490. package/src/dataStoreContexts.ts +176 -163
  491. package/src/dataStoreRegistry.ts +29 -21
  492. package/src/dataStores.ts +924 -678
  493. package/src/deltaManagerProxyBase.ts +111 -0
  494. package/src/deltaManagerSummarizerProxy.ts +49 -0
  495. package/src/deltaScheduler.ts +161 -156
  496. package/src/error.ts +21 -0
  497. package/src/gc/garbageCollection.md +106 -0
  498. package/src/gc/garbageCollection.ts +1157 -0
  499. package/src/gc/gcConfigs.ts +224 -0
  500. package/src/gc/gcDefinitions.ts +524 -0
  501. package/src/gc/gcHelpers.ts +284 -0
  502. package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
  503. package/src/gc/gcSummaryDefinitions.ts +54 -0
  504. package/src/gc/gcSummaryStateTracker.ts +299 -0
  505. package/src/gc/gcTelemetry.ts +433 -0
  506. package/src/gc/gcUnreferencedStateTracker.ts +153 -0
  507. package/src/gc/index.ts +60 -0
  508. package/src/index.ts +101 -74
  509. package/src/messageTypes.ts +238 -0
  510. package/src/metadata.ts +26 -0
  511. package/src/opLifecycle/README.md +321 -0
  512. package/src/opLifecycle/batchManager.ts +179 -0
  513. package/src/opLifecycle/definitions.ts +89 -0
  514. package/src/opLifecycle/index.ts +19 -0
  515. package/src/opLifecycle/opCompressor.ts +99 -0
  516. package/src/opLifecycle/opDecompressor.ts +190 -0
  517. package/src/opLifecycle/opGroupingManager.ts +133 -0
  518. package/src/opLifecycle/opSplitter.ts +279 -0
  519. package/src/opLifecycle/outbox.ts +474 -0
  520. package/src/opLifecycle/remoteMessageProcessor.ts +175 -0
  521. package/src/opProperties.ts +21 -0
  522. package/src/packageVersion.ts +1 -1
  523. package/src/pendingStateManager.ts +396 -465
  524. package/src/scheduleManager.ts +358 -0
  525. package/src/storageServiceWithAttachBlobs.ts +38 -0
  526. package/src/summary/index.ts +109 -0
  527. package/src/summary/orderedClientElection.ts +571 -0
  528. package/src/summary/runWhileConnectedCoordinator.ts +117 -0
  529. package/src/summary/runningSummarizer.ts +920 -0
  530. package/src/summary/summarizer.ts +352 -0
  531. package/src/summary/summarizerClientElection.ts +140 -0
  532. package/src/summary/summarizerHeuristics.ts +227 -0
  533. package/src/summary/summarizerNode/index.ts +12 -0
  534. package/src/summary/summarizerNode/summarizerNode.ts +725 -0
  535. package/src/summary/summarizerNode/summarizerNodeUtils.ts +206 -0
  536. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +571 -0
  537. package/src/summary/summarizerTypes.ts +631 -0
  538. package/src/summary/summaryCollection.ts +474 -0
  539. package/src/summary/summaryFormat.ts +249 -0
  540. package/src/summary/summaryGenerator.ts +539 -0
  541. package/src/summary/summaryManager.ts +452 -0
  542. package/src/throttler.ts +131 -122
  543. package/tsc-multi.test.json +4 -0
  544. package/tsconfig.json +11 -13
  545. package/dist/batchTracker.js.map +0 -1
  546. package/dist/blobManager.js +0 -249
  547. package/dist/blobManager.js.map +0 -1
  548. package/dist/connectionTelemetry.js +0 -178
  549. package/dist/connectionTelemetry.js.map +0 -1
  550. package/dist/containerHandleContext.js.map +0 -1
  551. package/dist/containerRuntime.js +0 -2174
  552. package/dist/containerRuntime.js.map +0 -1
  553. package/dist/dataStore.js.map +0 -1
  554. package/dist/dataStoreContext.js.map +0 -1
  555. package/dist/dataStoreContexts.js.map +0 -1
  556. package/dist/dataStoreRegistry.js.map +0 -1
  557. package/dist/dataStores.js.map +0 -1
  558. package/dist/deltaScheduler.js.map +0 -1
  559. package/dist/garbageCollection.d.ts +0 -319
  560. package/dist/garbageCollection.d.ts.map +0 -1
  561. package/dist/garbageCollection.js +0 -993
  562. package/dist/garbageCollection.js.map +0 -1
  563. package/dist/index.js +0 -33
  564. package/dist/index.js.map +0 -1
  565. package/dist/opTelemetry.d.ts +0 -22
  566. package/dist/opTelemetry.d.ts.map +0 -1
  567. package/dist/opTelemetry.js +0 -60
  568. package/dist/opTelemetry.js.map +0 -1
  569. package/dist/orderedClientElection.d.ts.map +0 -1
  570. package/dist/orderedClientElection.js.map +0 -1
  571. package/dist/packageVersion.js.map +0 -1
  572. package/dist/pendingStateManager.js +0 -346
  573. package/dist/pendingStateManager.js.map +0 -1
  574. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  575. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  576. package/dist/runningSummarizer.d.ts +0 -93
  577. package/dist/runningSummarizer.d.ts.map +0 -1
  578. package/dist/runningSummarizer.js +0 -384
  579. package/dist/runningSummarizer.js.map +0 -1
  580. package/dist/serializedSnapshotStorage.d.ts +0 -58
  581. package/dist/serializedSnapshotStorage.d.ts.map +0 -1
  582. package/dist/serializedSnapshotStorage.js +0 -108
  583. package/dist/serializedSnapshotStorage.js.map +0 -1
  584. package/dist/summarizer.d.ts.map +0 -1
  585. package/dist/summarizer.js +0 -348
  586. package/dist/summarizer.js.map +0 -1
  587. package/dist/summarizerClientElection.d.ts.map +0 -1
  588. package/dist/summarizerClientElection.js.map +0 -1
  589. package/dist/summarizerHandle.d.ts +0 -12
  590. package/dist/summarizerHandle.d.ts.map +0 -1
  591. package/dist/summarizerHandle.js +0 -22
  592. package/dist/summarizerHandle.js.map +0 -1
  593. package/dist/summarizerHeuristics.d.ts.map +0 -1
  594. package/dist/summarizerHeuristics.js +0 -84
  595. package/dist/summarizerHeuristics.js.map +0 -1
  596. package/dist/summarizerTypes.d.ts.map +0 -1
  597. package/dist/summarizerTypes.js.map +0 -1
  598. package/dist/summaryCollection.d.ts.map +0 -1
  599. package/dist/summaryCollection.js.map +0 -1
  600. package/dist/summaryFormat.d.ts.map +0 -1
  601. package/dist/summaryFormat.js.map +0 -1
  602. package/dist/summaryGenerator.d.ts.map +0 -1
  603. package/dist/summaryGenerator.js.map +0 -1
  604. package/dist/summaryManager.d.ts.map +0 -1
  605. package/dist/summaryManager.js.map +0 -1
  606. package/dist/throttler.js.map +0 -1
  607. package/garbageCollection.md +0 -41
  608. package/lib/batchTracker.d.ts.map +0 -1
  609. package/lib/batchTracker.js.map +0 -1
  610. package/lib/blobManager.d.ts +0 -95
  611. package/lib/blobManager.d.ts.map +0 -1
  612. package/lib/blobManager.js +0 -244
  613. package/lib/blobManager.js.map +0 -1
  614. package/lib/connectionTelemetry.d.ts.map +0 -1
  615. package/lib/connectionTelemetry.js +0 -174
  616. package/lib/connectionTelemetry.js.map +0 -1
  617. package/lib/containerHandleContext.d.ts.map +0 -1
  618. package/lib/containerHandleContext.js.map +0 -1
  619. package/lib/containerRuntime.d.ts +0 -615
  620. package/lib/containerRuntime.d.ts.map +0 -1
  621. package/lib/containerRuntime.js +0 -2166
  622. package/lib/containerRuntime.js.map +0 -1
  623. package/lib/dataStore.d.ts.map +0 -1
  624. package/lib/dataStore.js.map +0 -1
  625. package/lib/dataStoreContext.d.ts.map +0 -1
  626. package/lib/dataStoreContext.js.map +0 -1
  627. package/lib/dataStoreContexts.d.ts.map +0 -1
  628. package/lib/dataStoreContexts.js.map +0 -1
  629. package/lib/dataStoreRegistry.d.ts.map +0 -1
  630. package/lib/dataStoreRegistry.js.map +0 -1
  631. package/lib/dataStores.d.ts.map +0 -1
  632. package/lib/dataStores.js.map +0 -1
  633. package/lib/deltaScheduler.d.ts.map +0 -1
  634. package/lib/deltaScheduler.js.map +0 -1
  635. package/lib/garbageCollection.d.ts +0 -319
  636. package/lib/garbageCollection.d.ts.map +0 -1
  637. package/lib/garbageCollection.js +0 -989
  638. package/lib/garbageCollection.js.map +0 -1
  639. package/lib/index.d.ts +0 -14
  640. package/lib/index.d.ts.map +0 -1
  641. package/lib/index.js +0 -13
  642. package/lib/index.js.map +0 -1
  643. package/lib/opTelemetry.d.ts +0 -22
  644. package/lib/opTelemetry.d.ts.map +0 -1
  645. package/lib/opTelemetry.js +0 -56
  646. package/lib/opTelemetry.js.map +0 -1
  647. package/lib/orderedClientElection.d.ts.map +0 -1
  648. package/lib/orderedClientElection.js.map +0 -1
  649. package/lib/packageVersion.d.ts.map +0 -1
  650. package/lib/packageVersion.js.map +0 -1
  651. package/lib/pendingStateManager.d.ts.map +0 -1
  652. package/lib/pendingStateManager.js +0 -339
  653. package/lib/pendingStateManager.js.map +0 -1
  654. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  655. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  656. package/lib/runningSummarizer.d.ts +0 -93
  657. package/lib/runningSummarizer.d.ts.map +0 -1
  658. package/lib/runningSummarizer.js +0 -380
  659. package/lib/runningSummarizer.js.map +0 -1
  660. package/lib/serializedSnapshotStorage.d.ts +0 -58
  661. package/lib/serializedSnapshotStorage.d.ts.map +0 -1
  662. package/lib/serializedSnapshotStorage.js +0 -104
  663. package/lib/serializedSnapshotStorage.js.map +0 -1
  664. package/lib/summarizer.d.ts.map +0 -1
  665. package/lib/summarizer.js +0 -342
  666. package/lib/summarizer.js.map +0 -1
  667. package/lib/summarizerClientElection.d.ts.map +0 -1
  668. package/lib/summarizerClientElection.js.map +0 -1
  669. package/lib/summarizerHandle.d.ts +0 -12
  670. package/lib/summarizerHandle.d.ts.map +0 -1
  671. package/lib/summarizerHandle.js +0 -18
  672. package/lib/summarizerHandle.js.map +0 -1
  673. package/lib/summarizerHeuristics.d.ts.map +0 -1
  674. package/lib/summarizerHeuristics.js +0 -79
  675. package/lib/summarizerHeuristics.js.map +0 -1
  676. package/lib/summarizerTypes.d.ts.map +0 -1
  677. package/lib/summarizerTypes.js +0 -9
  678. package/lib/summarizerTypes.js.map +0 -1
  679. package/lib/summaryCollection.d.ts.map +0 -1
  680. package/lib/summaryCollection.js.map +0 -1
  681. package/lib/summaryFormat.d.ts.map +0 -1
  682. package/lib/summaryFormat.js.map +0 -1
  683. package/lib/summaryGenerator.d.ts +0 -85
  684. package/lib/summaryGenerator.d.ts.map +0 -1
  685. package/lib/summaryGenerator.js.map +0 -1
  686. package/lib/summaryManager.d.ts.map +0 -1
  687. package/lib/summaryManager.js.map +0 -1
  688. package/lib/throttler.d.ts.map +0 -1
  689. package/lib/throttler.js.map +0 -1
  690. package/src/garbageCollection.ts +0 -1434
  691. package/src/opTelemetry.ts +0 -71
  692. package/src/orderedClientElection.ts +0 -511
  693. package/src/runWhileConnectedCoordinator.ts +0 -106
  694. package/src/runningSummarizer.ts +0 -550
  695. package/src/serializedSnapshotStorage.ts +0 -146
  696. package/src/summarizer.ts +0 -438
  697. package/src/summarizerClientElection.ts +0 -161
  698. package/src/summarizerHandle.ts +0 -21
  699. package/src/summarizerHeuristics.ts +0 -108
  700. package/src/summarizerTypes.ts +0 -462
  701. package/src/summaryCollection.ts +0 -406
  702. package/src/summaryFormat.ts +0 -239
  703. package/src/summaryGenerator.ts +0 -427
  704. package/src/summaryManager.ts +0 -368
  705. package/tsconfig.esnext.json +0 -7
@@ -0,0 +1,111 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { EventForwarder } from "@fluid-internal/client-utils";
7
+ import {
8
+ IDeltaManager,
9
+ IDeltaManagerEvents,
10
+ IDeltaQueue,
11
+ IDeltaSender,
12
+ ReadOnlyInfo,
13
+ } from "@fluidframework/container-definitions";
14
+ import {
15
+ IClientConfiguration,
16
+ IClientDetails,
17
+ IDocumentMessage,
18
+ ISequencedDocumentMessage,
19
+ ISignalMessage,
20
+ } from "@fluidframework/protocol-definitions";
21
+
22
+ /**
23
+ * Base class for creating proxy to the real delta manager. It implements all required methods on IDeltaManager and
24
+ * proxy implementations can override specific methods.
25
+ */
26
+ export class DeltaManagerProxyBase
27
+ extends EventForwarder<IDeltaManagerEvents>
28
+ implements IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>
29
+ {
30
+ public get IDeltaSender(): IDeltaSender {
31
+ return this;
32
+ }
33
+
34
+ public get inbound(): IDeltaQueue<ISequencedDocumentMessage> {
35
+ return this.deltaManager.inbound;
36
+ }
37
+
38
+ public get outbound(): IDeltaQueue<IDocumentMessage[]> {
39
+ return this.deltaManager.outbound;
40
+ }
41
+
42
+ public get inboundSignal(): IDeltaQueue<ISignalMessage> {
43
+ return this.deltaManager.inboundSignal;
44
+ }
45
+
46
+ public get minimumSequenceNumber(): number {
47
+ return this.deltaManager.minimumSequenceNumber;
48
+ }
49
+
50
+ public get lastSequenceNumber(): number {
51
+ return this.deltaManager.lastSequenceNumber;
52
+ }
53
+
54
+ public get lastMessage() {
55
+ return this.deltaManager.lastMessage;
56
+ }
57
+
58
+ public get lastKnownSeqNumber() {
59
+ return this.deltaManager.lastKnownSeqNumber;
60
+ }
61
+
62
+ public get initialSequenceNumber(): number {
63
+ return this.deltaManager.initialSequenceNumber;
64
+ }
65
+
66
+ public get hasCheckpointSequenceNumber() {
67
+ return this.deltaManager.hasCheckpointSequenceNumber;
68
+ }
69
+
70
+ public get clientDetails(): IClientDetails {
71
+ return this.deltaManager.clientDetails;
72
+ }
73
+
74
+ public get version(): string {
75
+ return this.deltaManager.version;
76
+ }
77
+
78
+ public get maxMessageSize(): number {
79
+ return this.deltaManager.maxMessageSize;
80
+ }
81
+
82
+ public get serviceConfiguration(): IClientConfiguration | undefined {
83
+ return this.deltaManager.serviceConfiguration;
84
+ }
85
+
86
+ public get active(): boolean {
87
+ return this.deltaManager.active;
88
+ }
89
+
90
+ public get readOnlyInfo(): ReadOnlyInfo {
91
+ return this.deltaManager.readOnlyInfo;
92
+ }
93
+
94
+ constructor(
95
+ protected readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
96
+ ) {
97
+ super(deltaManager);
98
+ }
99
+
100
+ public dispose(): void {
101
+ super.dispose();
102
+ }
103
+
104
+ public submitSignal(content: any, targetClientId?: string): void {
105
+ return this.deltaManager.submitSignal(content, targetClientId);
106
+ }
107
+
108
+ public flush(): void {
109
+ return this.deltaManager.flush();
110
+ }
111
+ }
@@ -0,0 +1,49 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { IDeltaManager, ReadOnlyInfo } from "@fluidframework/container-definitions";
7
+ import { IDocumentMessage, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
8
+
9
+ import { DeltaManagerProxyBase } from "./deltaManagerProxyBase";
10
+ import { summarizerClientType } from "./summary";
11
+
12
+ /**
13
+ * Proxy to the real IDeltaManager for restricting certain access to layers below container runtime in summarizer clients:
14
+ * - Summarizer client should be read-only to layers below the container runtime to restrict local changes.
15
+ * - Summarizer client should not be active to layers below the container runtime to restrict local changes.
16
+ */
17
+ export class DeltaManagerSummarizerProxy
18
+ extends DeltaManagerProxyBase
19
+ implements IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>
20
+ {
21
+ public get active(): boolean {
22
+ // Summarize clients should not be active. There shouldn't be any local changes (writes) in the summarizer
23
+ // except for the SummarizeOp which is generated by the runtime.
24
+ return !this.isSummarizerClient && this.deltaManager.active;
25
+ }
26
+
27
+ public get readOnlyInfo(): ReadOnlyInfo {
28
+ // Summarizer clients should be read-only as far as the runtime and layers below are concerned. There shouldn't
29
+ // be any local changes (writes) in the summarizer except for the summarize op which is generated by the runtime.
30
+ if (this.isSummarizerClient) {
31
+ return {
32
+ readonly: true,
33
+ forced: false,
34
+ permissions: undefined,
35
+ storageOnly: false,
36
+ };
37
+ }
38
+ return this.deltaManager.readOnlyInfo;
39
+ }
40
+
41
+ private readonly isSummarizerClient: boolean;
42
+
43
+ constructor(deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>) {
44
+ super(deltaManager);
45
+ // We are expecting this class to have many listeners, so we suppress noisy "MaxListenersExceededWarning" logging.
46
+ super.setMaxListeners(0);
47
+ this.isSummarizerClient = this.deltaManager.clientDetails.type === summarizerClientType;
48
+ }
49
+ }
@@ -3,169 +3,174 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { performance } from "@fluidframework/common-utils";
6
+ import { ITelemetryLoggerExt, formatTick } from "@fluidframework/telemetry-utils";
7
+ import { performance } from "@fluid-internal/client-utils";
8
8
  import { IDeltaManager } from "@fluidframework/container-definitions";
9
- import {
10
- IDocumentMessage,
11
- ISequencedDocumentMessage,
12
- } from "@fluidframework/protocol-definitions";
13
-
14
- import {
15
- TelemetryLogger,
16
- } from "@fluidframework/telemetry-utils";
9
+ import { IDocumentMessage, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
10
+
17
11
  /**
18
12
  * DeltaScheduler is responsible for the scheduling of inbound delta queue in cases where there
19
13
  * is more than one op a particular run of the queue. It does not schedule if there is just one
20
14
  * op or just one batch in the run. It does the following two things:
15
+ *
21
16
  * 1. If the ops have been processed for more than a specific amount of time, it pauses the queue
22
- * and calls setTimeout to schedule a resume of the queue. This ensures that we don't block
23
- * the JS thread for a long time processing ops synchronously (for example, when catching up
24
- * ops right after boot or catching up ops / delayed realizing data stores by summarizer).
17
+ * and calls setTimeout to schedule a resume of the queue. This ensures that we don't block
18
+ * the JS thread for a long time processing ops synchronously (for example, when catching up
19
+ * ops right after boot or catching up ops / delayed realizing data stores by summarizer).
20
+ *
25
21
  * 2. If we scheduled a particular run of the queue, it logs telemetry for the number of ops
26
- * processed, the time and number of turns it took to process the ops.
22
+ * processed, the time and number of turns it took to process the ops.
27
23
  */
28
24
  export class DeltaScheduler {
29
- private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>;
30
- // The time for processing ops in a single turn.
31
- public static readonly processingTime = 50;
32
-
33
- // The increase in time for processing ops after each turn.
34
- private readonly processingTimeIncrement = 10;
35
-
36
- private processingStartTime: number | undefined;
37
- private currentAllowedProcessingTimeForTurn: number = DeltaScheduler.processingTime;
38
-
39
- // This keeps track of the number of times inbound queue has been scheduled. After a particular
40
- // count, we log telemetry for the number of ops processed, the time and number of turns it took
41
- // to process the ops.
42
- private schedulingCount: number = 0;
43
-
44
- private schedulingLog: {
45
- opsRemainingToProcess: number;
46
- totalProcessingTime: number;
47
- numberOfTurns: number;
48
- numberOfBatchesProcessed: number;
49
- lastSequenceNumber: number;
50
- firstSequenceNumber: number;
51
- startTime: number;
52
- } | undefined;
53
-
54
- constructor(
55
- deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
56
- private readonly logger: ITelemetryLogger,
57
- ) {
58
- this.deltaManager = deltaManager;
59
- this.deltaManager.inbound.on("idle", () => { this.inboundQueueIdle(); });
60
- }
61
-
62
- public batchBegin(message: ISequencedDocumentMessage) {
63
- if (!this.processingStartTime) {
64
- this.processingStartTime = performance.now();
65
- }
66
- if (this.schedulingLog === undefined && this.schedulingCount % 500 === 0) {
67
- // Every 500th time we are scheduling the inbound queue, we log telemetry for the
68
- // number of ops processed, the time and number of turns it took to process the ops.
69
- this.schedulingLog = {
70
- opsRemainingToProcess: 0,
71
- numberOfTurns: 1,
72
- totalProcessingTime: 0,
73
- numberOfBatchesProcessed: 0,
74
- firstSequenceNumber: message.sequenceNumber,
75
- lastSequenceNumber: message.sequenceNumber,
76
- startTime: performance.now(),
77
- };
78
- }
79
- }
80
-
81
- public batchEnd(message: ISequencedDocumentMessage) {
82
- if (this.schedulingLog) {
83
- this.schedulingLog.numberOfBatchesProcessed++;
84
- this.schedulingLog.lastSequenceNumber = message.sequenceNumber;
85
- this.schedulingLog.opsRemainingToProcess = this.deltaManager.inbound.length;
86
- }
87
-
88
- if (this.shouldRunScheduler()) {
89
- const currentTime = performance.now();
90
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
91
- const elapsedTime = currentTime - this.processingStartTime!;
92
- if (elapsedTime > this.currentAllowedProcessingTimeForTurn) {
93
- // We have processed ops for more than the total processing time. So, pause the
94
- // queue, yield the thread and schedule a resume.
95
-
96
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
97
- this.deltaManager.inbound.pause();
98
-
99
- // Increase the total processing time. Keep doing this after each turn until all the ops have
100
- // been processed. This way we keep the responsiveness at the beginning while also making sure
101
- // that all the ops process fairly quickly.
102
- this.currentAllowedProcessingTimeForTurn += this.processingTimeIncrement;
103
-
104
- // If we are logging the telemetry this time, update the telemetry log object.
105
- if (this.schedulingLog) {
106
- this.schedulingLog.numberOfTurns++;
107
- this.schedulingLog.totalProcessingTime += elapsedTime;
108
- }
109
-
110
- setTimeout(() => {
111
- if (this.schedulingLog) {
112
- this.logger.sendTelemetryEvent({
113
- eventName: "InboundOpsPartialProcessingTime",
114
- duration: TelemetryLogger.formatTick(elapsedTime),
115
- opsProcessed: this.schedulingLog.lastSequenceNumber -
116
- this.schedulingLog.firstSequenceNumber + 1,
117
- opsRemainingToProcess: this.deltaManager.inbound.length,
118
- processingTime: TelemetryLogger.formatTick(this.schedulingLog.totalProcessingTime),
119
- numberOfTurns: this.schedulingLog.numberOfTurns,
120
- batchesProcessed: this.schedulingLog.numberOfBatchesProcessed,
121
- timeToResume: TelemetryLogger.formatTick(performance.now() - currentTime),
122
- });
123
- }
124
- this.deltaManager.inbound.resume();
125
- });
126
-
127
- this.processingStartTime = undefined;
128
- }
129
- }
130
- }
131
-
132
- private inboundQueueIdle() {
133
- if (this.schedulingLog) {
134
- // Add the time taken for processing the final ops to the total processing time in the
135
- // telemetry log object.
136
- const currentTime = performance.now();
137
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
138
- this.schedulingLog.totalProcessingTime += currentTime - this.processingStartTime!;
139
-
140
- this.logger.sendTelemetryEvent({
141
- eventName: "InboundOpsProcessingTime",
142
- opsRemainingToProcess: this.schedulingLog.opsRemainingToProcess,
143
- numberOfTurns: this.schedulingLog.numberOfTurns,
144
- processingTime: TelemetryLogger.formatTick(this.schedulingLog.totalProcessingTime),
145
- opsProcessed: this.schedulingLog.lastSequenceNumber - this.schedulingLog.firstSequenceNumber + 1,
146
- batchesProcessed: this.schedulingLog.numberOfBatchesProcessed,
147
- duration: TelemetryLogger.formatTick(currentTime - this.schedulingLog.startTime),
148
- schedulingCount: this.schedulingCount,
149
- });
150
-
151
- this.schedulingLog = undefined;
152
- }
153
-
154
- // If we scheduled this batch of the inbound queue, increment the counter that tracks the
155
- // number of times we have done this.
156
- this.schedulingCount++;
157
-
158
- // Reset the processing times.
159
- this.processingStartTime = undefined;
160
- this.currentAllowedProcessingTimeForTurn = DeltaScheduler.processingTime;
161
- }
162
-
163
- /**
164
- * This function tells whether we should run the scheduler.
165
- */
166
- private shouldRunScheduler(): boolean {
167
- // If there are still ops in the queue after the one we are processing now, we should
168
- // run the scheduler.
169
- return this.deltaManager.inbound.length > 0;
170
- }
25
+ private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>;
26
+ // The time for processing ops in a single turn.
27
+ public static readonly processingTime = 50;
28
+
29
+ // The increase in time for processing ops after each turn.
30
+ private readonly processingTimeIncrement = 10;
31
+
32
+ private processingStartTime: number | undefined;
33
+ private currentAllowedProcessingTimeForTurn: number = DeltaScheduler.processingTime;
34
+
35
+ // This keeps track of the number of times inbound queue has been scheduled. After a particular
36
+ // count, we log telemetry for the number of ops processed, the time and number of turns it took
37
+ // to process the ops.
38
+ private schedulingCount: number = 0;
39
+
40
+ private schedulingLog:
41
+ | {
42
+ opsRemainingToProcess: number;
43
+ totalProcessingTime: number;
44
+ numberOfTurns: number;
45
+ numberOfBatchesProcessed: number;
46
+ lastSequenceNumber: number;
47
+ firstSequenceNumber: number;
48
+ startTime: number;
49
+ }
50
+ | undefined;
51
+
52
+ constructor(
53
+ deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
54
+ private readonly logger: ITelemetryLoggerExt,
55
+ ) {
56
+ this.deltaManager = deltaManager;
57
+ this.deltaManager.inbound.on("idle", () => {
58
+ this.inboundQueueIdle();
59
+ });
60
+ }
61
+
62
+ public batchBegin(message: ISequencedDocumentMessage) {
63
+ if (!this.processingStartTime) {
64
+ this.processingStartTime = performance.now();
65
+ }
66
+ if (this.schedulingLog === undefined && this.schedulingCount % 500 === 0) {
67
+ // Every 500th time we are scheduling the inbound queue, we log telemetry for the
68
+ // number of ops processed, the time and number of turns it took to process the ops.
69
+ this.schedulingLog = {
70
+ opsRemainingToProcess: 0,
71
+ numberOfTurns: 1,
72
+ totalProcessingTime: 0,
73
+ numberOfBatchesProcessed: 0,
74
+ firstSequenceNumber: message.sequenceNumber,
75
+ lastSequenceNumber: message.sequenceNumber,
76
+ startTime: performance.now(),
77
+ };
78
+ }
79
+ }
80
+
81
+ public batchEnd(message: ISequencedDocumentMessage) {
82
+ if (this.schedulingLog) {
83
+ this.schedulingLog.numberOfBatchesProcessed++;
84
+ this.schedulingLog.lastSequenceNumber = message.sequenceNumber;
85
+ this.schedulingLog.opsRemainingToProcess = this.deltaManager.inbound.length;
86
+ }
87
+
88
+ if (this.shouldRunScheduler()) {
89
+ const currentTime = performance.now();
90
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
91
+ const elapsedTime = currentTime - this.processingStartTime!;
92
+ if (elapsedTime > this.currentAllowedProcessingTimeForTurn) {
93
+ // We have processed ops for more than the total processing time. So, pause the
94
+ // queue, yield the thread and schedule a resume.
95
+
96
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
97
+ this.deltaManager.inbound.pause();
98
+
99
+ // Increase the total processing time. Keep doing this after each turn until all the ops have
100
+ // been processed. This way we keep the responsiveness at the beginning while also making sure
101
+ // that all the ops process fairly quickly.
102
+ this.currentAllowedProcessingTimeForTurn += this.processingTimeIncrement;
103
+
104
+ // If we are logging the telemetry this time, update the telemetry log object.
105
+ if (this.schedulingLog) {
106
+ this.schedulingLog.numberOfTurns++;
107
+ this.schedulingLog.totalProcessingTime += elapsedTime;
108
+ }
109
+
110
+ setTimeout(() => {
111
+ if (this.schedulingLog) {
112
+ this.logger.sendTelemetryEvent({
113
+ eventName: "InboundOpsPartialProcessingTime",
114
+ duration: formatTick(elapsedTime),
115
+ opsProcessed:
116
+ this.schedulingLog.lastSequenceNumber -
117
+ this.schedulingLog.firstSequenceNumber +
118
+ 1,
119
+ opsRemainingToProcess: this.deltaManager.inbound.length,
120
+ processingTime: formatTick(this.schedulingLog.totalProcessingTime),
121
+ numberOfTurns: this.schedulingLog.numberOfTurns,
122
+ batchesProcessed: this.schedulingLog.numberOfBatchesProcessed,
123
+ timeToResume: formatTick(performance.now() - currentTime),
124
+ });
125
+ }
126
+ this.deltaManager.inbound.resume();
127
+ });
128
+
129
+ this.processingStartTime = undefined;
130
+ }
131
+ }
132
+ }
133
+
134
+ private inboundQueueIdle() {
135
+ if (this.schedulingLog) {
136
+ // Add the time taken for processing the final ops to the total processing time in the
137
+ // telemetry log object.
138
+ const currentTime = performance.now();
139
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
140
+ this.schedulingLog.totalProcessingTime += currentTime - this.processingStartTime!;
141
+
142
+ this.logger.sendTelemetryEvent({
143
+ eventName: "InboundOpsProcessingTime",
144
+ opsRemainingToProcess: this.schedulingLog.opsRemainingToProcess,
145
+ numberOfTurns: this.schedulingLog.numberOfTurns,
146
+ processingTime: formatTick(this.schedulingLog.totalProcessingTime),
147
+ opsProcessed:
148
+ this.schedulingLog.lastSequenceNumber -
149
+ this.schedulingLog.firstSequenceNumber +
150
+ 1,
151
+ batchesProcessed: this.schedulingLog.numberOfBatchesProcessed,
152
+ duration: formatTick(currentTime - this.schedulingLog.startTime),
153
+ schedulingCount: this.schedulingCount,
154
+ });
155
+
156
+ this.schedulingLog = undefined;
157
+ }
158
+
159
+ // If we scheduled this batch of the inbound queue, increment the counter that tracks the
160
+ // number of times we have done this.
161
+ this.schedulingCount++;
162
+
163
+ // Reset the processing times.
164
+ this.processingStartTime = undefined;
165
+ this.currentAllowedProcessingTimeForTurn = DeltaScheduler.processingTime;
166
+ }
167
+
168
+ /**
169
+ * This function tells whether we should run the scheduler.
170
+ */
171
+ private shouldRunScheduler(): boolean {
172
+ // If there are still ops in the queue after the one we are processing now, we should
173
+ // run the scheduler.
174
+ return this.deltaManager.inbound.length > 0;
175
+ }
171
176
  }
package/src/error.ts ADDED
@@ -0,0 +1,21 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { ContainerErrorTypes } from "@fluidframework/container-definitions";
7
+ import { IFluidErrorBase, LoggingError } from "@fluidframework/telemetry-utils";
8
+
9
+ /**
10
+ * Error indicating that a client's session has reached its time limit and is closed.
11
+ */
12
+ export class ClientSessionExpiredError extends LoggingError implements IFluidErrorBase {
13
+ readonly errorType = ContainerErrorTypes.clientSessionExpiredError;
14
+
15
+ constructor(
16
+ message: string,
17
+ readonly expiryMs: number,
18
+ ) {
19
+ super(message, { timeoutMs: expiryMs });
20
+ }
21
+ }
@@ -0,0 +1,106 @@
1
+ # Garbage Collection
2
+
3
+ Garbage collection (GC) is the process by which Fluid Framework safely delete objects that are not used. The only responsibility of the users of Fluid Framework is to add and remove references to Fluid objects correctly.
4
+
5
+ ## Why have Garbage Collection?
6
+
7
+ GC reduces the size of the Fluid file at rest, the in-memory content and the summary that is uploaded to / downloaded from the server. It saves COGS on the server and it makes containers load faster as there is less data to download and process.
8
+
9
+ ## What do I need to do?
10
+
11
+ All Fluid objects that are in use must be properly referenced so that they are not deleted by GC. Similarly, references to all unused Fluid objects should be removed so that they can be deleted by GC. It is the responsibility of the users of Fluid Framework to correctly add and remove references to Fluid objects.
12
+
13
+ ## How do I reference / unreference Fluid objects?
14
+
15
+ Currently, the only Fluid objects that are eligible for GC are data stores and attachment blobs. The following sections describe how you can mark them as referenced or unreferenced. These sections speak of a "referenced DDS" which refers to a DDS that is created by a referenced data store.
16
+
17
+ ### Data stores
18
+
19
+ There are 2 ways to reference a data store:
20
+
21
+ - Store the data stores's handle (see [IFluidHandle](../../../../../packages/common/core-interfaces/src/handles.ts) in a referenced DDS that supports handle in its data. For example, a data store's handle can be stored in a referenced `SharedMap` DDS.
22
+
23
+ Note that storing a handle of any of a data store's DDS will also mark the data store as referenced.
24
+
25
+ - Alias the data store. Aliased data stores are rooted in the container, i.e., they are always referenced and cannot be unreferenced later. Aliased data stores can never be deleted so only do so if you want them to live forever.
26
+
27
+ Once there are no more referenced DDSes in the container containing a handle to a particular data store, that data store is unreferenced and is eligible for GC.
28
+
29
+ > Note: There should be at least one aliased data store with at least one DDS in a container. This is the starting point for GC to look for other referenced objects in the container.
30
+
31
+ ### Attachment blobs
32
+
33
+ The only way to reference an attachment blob is to store its IFluidHandle in a referenced DDS similar to data stores.
34
+
35
+ Once there are no more referenced DDSes in the container containing a handle to a particular attachment blob, that attachment blob is unreferenced and is eligible for GC.
36
+
37
+ ## GC algorithm
38
+
39
+ The GC algorithm runs in two phases:
40
+
41
+ ### Mark phase
42
+
43
+ In this phase, the GC algorithm identifies all Fluid objects that are unreferenced and marks them as such:
44
+
45
+ 1. It starts at the root (aliased) data stores and marks them and all their DDSes as referenced.
46
+ 2. It recursively finds the handles stored in referenced DDSes and marks the objects corresponding to the handles as referenced until is has scanned all objects.
47
+ 3. All the objects in the system that are not marked as referenced are marked as unreferenced. The unreferenced state of the object and timestamp of when it is unreferenced is added to the summary. The timestamp is used to determine how long the object has been unreferenced for and is used for the sweep phase.
48
+
49
+ Mark phase is enabled by default for a container. It is enabled during creation of the container runtime and remains enabled throughout its lifetime. Basically, this setting is persisted in the summary and cannot be changed.
50
+
51
+ ### Sweep phase
52
+
53
+ In this phase, the GC algorithm deletes any Fluid object that has been unreferenced for a sufficient time to guarantee
54
+ they could never be referenced again by any active clients, i.e., clients that have the object in memory and could reference it again.
55
+ The Fluid Runtime enforces a maximum session length (configurable) in order to guarantee all in-memory objects are cleared before
56
+ it concludes an object is safe to delete.
57
+
58
+ GC sweep phase runs in two stages:
59
+
60
+ - The first stage is the "Tombstone" stage, where objects are marked as Tombstones, meaning GC believes they will
61
+ never be referenced again and are safe to delete. They are not yet deleted at this point, but any attempt to
62
+ load them will fail. This way, there's a chance to recover a Tombstoned object in case we detect it's still being used.
63
+ - The second stage is the "Sweep" or "Delete" stage, where the objects are fully deleted.
64
+ This occurs after a configurable delay called the "Sweep Grace Period", to give time for application teams
65
+ to monitor for Tombstone-related errors and react before delete occurs.
66
+
67
+ ## GC Configuration
68
+
69
+ The default configuration for GC today is:
70
+
71
+ - GC Mark Phase is **enabled**, including Tombstone Mode
72
+ - Session Expiry is **enabled**
73
+ - The "Tombstone" stage of Sweep Phase is **enabled** (attempting to load a tombstoned object will fail)
74
+ - The "Delete" stage of Sweep Phase is **disabled**
75
+ - Note: Once enabled, Sweep will only run for documents created from that point forward
76
+
77
+ ### Techniques used for configuration
78
+
79
+ There are two ways to configure the Fluid Framework's GC behavior, referred to by name throughout these documents:
80
+
81
+ 1. **"GC Options"**: `ContainerRuntime.loadRuntime` takes an options value of type `IContainerRuntimeOptions`.
82
+ This type includes a sub-object `gcOptions`, for GC-specific options.
83
+ 2. **"Config Settings"**: The `Loader`'s constructor takes in `ILoaderProps`, which includes `configProvider?: IConfigProviderBase`
84
+ This configProvider can be used to inject config settings.
85
+
86
+ Typically GC Options are used for more "official" and stable configuration, whereas Config Settings provide a mechanism
87
+ for apps to override settings easily, e.g. by backing their `IConfigProviderBase` with a configuration/flighting service.
88
+ In cases where a behavior is controlled by both a Config Setting and GC Option, you may experiment at first using Config Settings
89
+ and then later update the passed-in GC Options to finalize the configuration in your code.
90
+
91
+ ### Disabling Mark Phase
92
+
93
+ If you wish to disable Mark Phase for newly-created documents, set the `gcAllowed` GC Option to `false`.
94
+ Note that this will disable GC permanently (including the sweep phase) for the container during its lifetime.
95
+
96
+ Mark Phase can also be disabled just for the session, among other behaviors,
97
+ covered in the [Advanced Configuration](./gcEarlyAdoption.md#more-advanced-configurations) docs.
98
+
99
+ ### Enabling Sweep Phase
100
+
101
+ To enable the Sweep Phase for new documents, you must set the `enableGCSweep` GC Option to true.
102
+
103
+ ### More Advanced Configuration
104
+
105
+ For additional behaviors that can be configured (e.g. for testing), please see these
106
+ [Advanced Configuration](./gcEarlyAdoption.md#more-advanced-configurations) docs.