@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,433 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { ITelemetryGenericEvent } from "@fluidframework/core-interfaces";
7
+ import { IGarbageCollectionData } from "@fluidframework/runtime-definitions";
8
+ import {
9
+ generateStack,
10
+ ITelemetryLoggerExt,
11
+ MonitoringContext,
12
+ tagCodeArtifacts,
13
+ } from "@fluidframework/telemetry-utils";
14
+ import { RuntimeHeaderData } from "../containerRuntime";
15
+ import { ICreateContainerMetadata } from "../summary";
16
+ import {
17
+ GCNodeType,
18
+ UnreferencedState,
19
+ IGarbageCollectorConfigs,
20
+ disableTombstoneKey,
21
+ throwOnTombstoneUsageKey,
22
+ throwOnTombstoneLoadOverrideKey,
23
+ runSweepKey,
24
+ GCFeatureMatrix,
25
+ } from "./gcDefinitions";
26
+ import { UnreferencedStateTracker } from "./gcUnreferencedStateTracker";
27
+
28
+ type NodeUsageType = "Changed" | "Loaded" | "Revived";
29
+
30
+ /** Properties that are common to IUnreferencedEventProps and INodeUsageProps */
31
+ interface ICommonProps {
32
+ usageType: NodeUsageType;
33
+ completedGCRuns: number;
34
+ isTombstoned: boolean;
35
+ lastSummaryTime?: number;
36
+ headers?: RuntimeHeaderData;
37
+ }
38
+
39
+ /** The event that is logged when unreferenced node is used after a certain time. */
40
+ interface IUnreferencedEventProps extends ICreateContainerMetadata, ICommonProps {
41
+ state: UnreferencedState;
42
+ id: {
43
+ value: string;
44
+ tag: string;
45
+ };
46
+ type: GCNodeType;
47
+ unrefTime: number;
48
+ age: number;
49
+ // Expanding GC feature matrix. Without doing this, the configs cannot be logged in telemetry directly.
50
+ gcConfigs: Omit<IGarbageCollectorConfigs, "persistedGcFeatureMatrix"> & {
51
+ [K in keyof GCFeatureMatrix]: GCFeatureMatrix[K];
52
+ };
53
+ timeout?: number;
54
+ fromId?: {
55
+ value: string;
56
+ tag: string;
57
+ };
58
+ }
59
+
60
+ /** Properties passed to nodeUsed function when a node is used. */
61
+ interface INodeUsageProps extends ICommonProps {
62
+ id: string;
63
+ currentReferenceTimestampMs: number | undefined;
64
+ packagePath: readonly string[] | undefined;
65
+ fromId?: string;
66
+ }
67
+
68
+ /**
69
+ * Encapsulates the logic that tracks the various telemetry logged by the Garbage Collector.
70
+ *
71
+ * These events are not logged as errors, just generic events, since there can be false positives:
72
+ *
73
+ * 1. inactiveObject telemetry - When an inactive node is used - A node that has been unreferenced for inactiveTimeoutMs.
74
+ * 2. tombstoneReadyObject telemetry - When a tombstone-ready node is used - A node that has been unreferenced for tombstoneTimeoutMs.
75
+ * 3. sweepReadyObject telemetry - When a sweep-ready node is used - A node that has been unreferenced for tombstoneTimeoutMs + sweepGracePeriodMs.
76
+ *
77
+ * These events are logged as errors since they are based on the core GC logic:
78
+ *
79
+ * 1. Tombstone telemetry - When a tombstoned node is used - A node that has been marked as tombstone.
80
+ * 2. Unknown outbound reference telemetry - When a node is referenced but GC was not notified of it when the new reference appeared.
81
+ *
82
+ * Note: The telemetry for a Deleted node being used is logged elsewhere in this package.
83
+ */
84
+ export class GCTelemetryTracker {
85
+ // Keeps track of unreferenced events that are logged for a node. This is used to limit the log generation to one
86
+ // per event per node.
87
+ private readonly loggedUnreferencedEvents: Set<string> = new Set();
88
+ // Queue for unreferenced events that should be logged the next time GC runs.
89
+ private pendingEventsQueue: IUnreferencedEventProps[] = [];
90
+
91
+ constructor(
92
+ private readonly mc: MonitoringContext,
93
+ private readonly configs: IGarbageCollectorConfigs,
94
+ private readonly isSummarizerClient: boolean,
95
+ private readonly createContainerMetadata: ICreateContainerMetadata,
96
+ private readonly getNodeType: (nodeId: string) => GCNodeType,
97
+ private readonly getNodeStateTracker: (
98
+ nodeId: string,
99
+ ) => UnreferencedStateTracker | undefined,
100
+ private readonly getNodePackagePath: (
101
+ nodePath: string,
102
+ ) => Promise<readonly string[] | undefined>,
103
+ ) {}
104
+
105
+ /**
106
+ * Returns whether an event should be logged for a node that isn't active anymore. This does not apply to
107
+ * tombstoned nodes for which an event is always logged. Some scenarios where we won't log:
108
+ * 1. When a DDS is changed. The corresponding data store's event will be logged instead.
109
+ * 2. An event is logged only once per container instance per event per node.
110
+ */
111
+ private shouldLogNonActiveEvent(
112
+ nodeType: GCNodeType,
113
+ usageType: NodeUsageType,
114
+ nodeStateTracker: UnreferencedStateTracker,
115
+ uniqueEventId: string,
116
+ ) {
117
+ if (nodeStateTracker.state === UnreferencedState.Active) {
118
+ return false;
119
+ }
120
+
121
+ if (nodeType === GCNodeType.Other) {
122
+ return false;
123
+ }
124
+
125
+ // For sub data store (DDS) nodes, if they are changed, its data store will also be changed,
126
+ // so skip logging to make the telemetry less noisy.
127
+ if (nodeType === GCNodeType.SubDataStore && usageType === "Changed") {
128
+ return false;
129
+ }
130
+
131
+ // Non-tombstone events are logged once per event per node. A unique id is generated by joining
132
+ // node state (inactive / sweep ready), node's id and usage (loaded / changed / revived).
133
+ if (this.loggedUnreferencedEvents.has(uniqueEventId)) {
134
+ return false;
135
+ }
136
+ return true;
137
+ }
138
+
139
+ /**
140
+ * Called when a node is used. If the node is not active or tombstoned, log telemetry indicating object is used
141
+ * when it should not have been.
142
+ */
143
+ public nodeUsed(nodeUsageProps: INodeUsageProps) {
144
+ // If there is no reference timestamp to work with, no ops have been processed after creation. If so, skip
145
+ // logging as nothing interesting would have happened worth logging.
146
+ if (nodeUsageProps.currentReferenceTimestampMs === undefined) {
147
+ return;
148
+ }
149
+
150
+ const nodeStateTracker = this.getNodeStateTracker(nodeUsageProps.id);
151
+ const nodeType = this.getNodeType(nodeUsageProps.id);
152
+ const timeout = (() => {
153
+ switch (nodeStateTracker?.state) {
154
+ case UnreferencedState.Inactive:
155
+ return this.configs.inactiveTimeoutMs;
156
+ case UnreferencedState.TombstoneReady:
157
+ return this.configs.tombstoneTimeoutMs;
158
+ case UnreferencedState.SweepReady:
159
+ return (
160
+ this.configs.tombstoneTimeoutMs &&
161
+ this.configs.tombstoneTimeoutMs + this.configs.sweepGracePeriodMs
162
+ );
163
+ default:
164
+ return undefined;
165
+ }
166
+ })();
167
+ const {
168
+ usageType,
169
+ currentReferenceTimestampMs,
170
+ packagePath,
171
+ id: untaggedId,
172
+ fromId: untaggedFromId,
173
+ ...propsToLog
174
+ } = nodeUsageProps;
175
+ const { persistedGcFeatureMatrix, ...configs } = this.configs;
176
+ const unrefEventProps: Omit<IUnreferencedEventProps, "state" | "usageType"> = {
177
+ type: nodeType,
178
+ unrefTime: nodeStateTracker?.unreferencedTimestampMs ?? -1,
179
+ age:
180
+ nodeStateTracker !== undefined
181
+ ? nodeUsageProps.currentReferenceTimestampMs -
182
+ nodeStateTracker.unreferencedTimestampMs
183
+ : -1,
184
+ timeout,
185
+ ...tagCodeArtifacts({ id: untaggedId, fromId: untaggedFromId }),
186
+ ...propsToLog,
187
+ ...this.createContainerMetadata,
188
+ gcConfigs: { ...configs, ...persistedGcFeatureMatrix },
189
+ };
190
+
191
+ // If the node that is used is tombstoned, log a tombstone telemetry.
192
+ // Note that this is done before checking if "nodeStateTracker" is undefined below because unreferenced
193
+ // tracking may not have yet been enabled. That happens only after the client transitions to write mode.
194
+ if (nodeUsageProps.isTombstoned) {
195
+ this.logTombstoneUsageTelemetry(nodeUsageProps, unrefEventProps, nodeType, usageType);
196
+ }
197
+
198
+ // After logging tombstone telemetry, if the node's unreferenced state is not tracked, there is nothing
199
+ // else to log.
200
+ if (nodeStateTracker === undefined) {
201
+ return;
202
+ }
203
+
204
+ const state = nodeStateTracker.state;
205
+ const uniqueEventId = `${state}-${nodeUsageProps.id}-${nodeUsageProps.usageType}`;
206
+
207
+ if (
208
+ !this.shouldLogNonActiveEvent(
209
+ nodeType,
210
+ nodeUsageProps.usageType,
211
+ nodeStateTracker,
212
+ uniqueEventId,
213
+ )
214
+ ) {
215
+ return;
216
+ }
217
+
218
+ // Add the unique event id so that we don't generate a log for this event again in this session.
219
+ this.loggedUnreferencedEvents.add(uniqueEventId);
220
+
221
+ // For summarizer client, queue the event so it is logged the next time GC runs if the event is still valid.
222
+ // For non-summarizer client, log the event now since GC won't run on it. This may result in false positives
223
+ // but it's a good signal nonetheless and we can consume it with a grain of salt.
224
+ // Inactive errors are usages of Objects that are unreferenced for at least a period of 7 days.
225
+ // SweepReady errors are usages of Objects that will be deleted by GC Sweep!
226
+ if (this.isSummarizerClient) {
227
+ this.pendingEventsQueue.push({
228
+ ...unrefEventProps,
229
+ usageType: nodeUsageProps.usageType,
230
+ state,
231
+ });
232
+ } else {
233
+ // For non-summarizer clients, only log "Loaded" type events since these objects may not be loaded in the
234
+ // summarizer clients if they are based off of user actions (such as scrolling to content for these objects)
235
+ // Events generated:
236
+ // InactiveObject_Loaded, SweepReadyObject_Loaded
237
+ if (nodeUsageProps.usageType === "Loaded") {
238
+ const { id, fromId, headers, gcConfigs, ...detailedProps } = unrefEventProps;
239
+ const event = {
240
+ eventName: `${state}Object_${nodeUsageProps.usageType}`,
241
+ ...tagCodeArtifacts({ pkg: nodeUsageProps.packagePath?.join("/") }),
242
+ stack: generateStack(),
243
+ id,
244
+ fromId,
245
+ headers: { ...headers },
246
+ details: detailedProps,
247
+ gcConfigs,
248
+ };
249
+
250
+ // These are logged as generic events and not errors because there can be false positives. The Tombstone
251
+ // and Delete errors are separately logged and are reliable.
252
+ this.mc.logger.sendTelemetryEvent(event);
253
+ }
254
+ }
255
+ }
256
+
257
+ /**
258
+ * Logs telemetry when a tombstoned object is changed, revived or loaded.
259
+ */
260
+ private logTombstoneUsageTelemetry(
261
+ nodeUsageProps: INodeUsageProps,
262
+ unrefEventProps: Omit<IUnreferencedEventProps, "state" | "usageType">,
263
+ nodeType: GCNodeType,
264
+ usageType: NodeUsageType,
265
+ ) {
266
+ // This will log the following events:
267
+ // GC_Tombstone_DataStore_Requested, GC_Tombstone_DataStore_Changed, GC_Tombstone_DataStore_Revived
268
+ // GC_Tombstone_SubDataStore_Requested, GC_Tombstone_SubDataStore_Changed, GC_Tombstone_SubDataStore_Revived
269
+ // GC_Tombstone_Blob_Requested, GC_Tombstone_Blob_Changed, GC_Tombstone_Blob_Revived
270
+ const { id, fromId, headers, gcConfigs, ...detailedProps } = unrefEventProps;
271
+ const eventUsageName = usageType === "Loaded" ? "Requested" : usageType;
272
+ const event = {
273
+ eventName: `GC_Tombstone_${nodeType}_${eventUsageName}`,
274
+ pkg: tagCodeArtifacts({ pkg: nodeUsageProps.packagePath?.join("/") }).pkg,
275
+ stack: generateStack(),
276
+ id,
277
+ fromId,
278
+ headers: { ...headers },
279
+ details: detailedProps,
280
+ gcConfigs,
281
+ tombstoneFlags: {
282
+ DisableTombstone: this.mc.config.getBoolean(disableTombstoneKey),
283
+ ThrowOnTombstoneUsage: this.mc.config.getBoolean(throwOnTombstoneUsageKey),
284
+ ThrowOnTombstoneLoad: this.mc.config.getBoolean(throwOnTombstoneLoadOverrideKey),
285
+ },
286
+ sweepFlags: {
287
+ EnableSweepFlag: this.mc.config.getBoolean(runSweepKey),
288
+ },
289
+ };
290
+
291
+ if (
292
+ (usageType === "Loaded" &&
293
+ this.configs.throwOnTombstoneLoad &&
294
+ !headers?.allowTombstone) ||
295
+ (usageType === "Changed" && this.configs.throwOnTombstoneUsage)
296
+ ) {
297
+ this.mc.logger.sendErrorEvent(event);
298
+ } else {
299
+ this.mc.logger.sendTelemetryEvent(event);
300
+ }
301
+ }
302
+
303
+ /**
304
+ * Log all new references or outbound routes in the current graph that haven't been explicitly notified to GC.
305
+ * The principle is that every new reference or outbound route must be notified to GC via the
306
+ * addedOutboundReference method. It it hasn't, its a bug and we want to identify these scenarios.
307
+ *
308
+ * In more simple terms:
309
+ * Missing Explicit References = Current References - Previous References - Explicitly Added References;
310
+ *
311
+ * @param currentGCData - The GC data (reference graph) from the current GC run.
312
+ * @param previousGCData - The GC data (reference graph) from the previous GC run.
313
+ * @param explicitReferences - New references added explicity between the previous and the current run.
314
+ */
315
+ public logIfMissingExplicitReferences(
316
+ currentGCData: IGarbageCollectionData,
317
+ previousGCData: IGarbageCollectionData,
318
+ explicitReferences: Map<string, string[]>,
319
+ logger: ITelemetryLoggerExt,
320
+ ) {
321
+ for (const [nodeId, currentOutboundRoutes] of Object.entries(currentGCData.gcNodes)) {
322
+ const previousRoutes = previousGCData.gcNodes[nodeId] ?? [];
323
+ const explicitRoutes = explicitReferences.get(nodeId) ?? [];
324
+
325
+ /**
326
+ * 1. For routes in the current GC data, routes that were not present in previous GC data and did not have
327
+ * explicit references should be added to missing explicit routes list.
328
+ * 2. Only include data store and blob routes since GC only works for these two.
329
+ * Note: Due to a bug with de-duped blobs, only adding data store routes for now.
330
+ * 3. Ignore DDS routes to their parent datastores since those were added implicitly. So, there won't be
331
+ * explicit routes to them.
332
+ */
333
+ const missingExplicitRoutes: string[] = [];
334
+ for (const route of currentOutboundRoutes) {
335
+ const nodeType = this.getNodeType(route);
336
+ if (
337
+ (nodeType === GCNodeType.DataStore || nodeType === GCNodeType.Blob) &&
338
+ !nodeId.startsWith(route) &&
339
+ !previousRoutes.includes(route) &&
340
+ !explicitRoutes.includes(route)
341
+ ) {
342
+ missingExplicitRoutes.push(route);
343
+ }
344
+ }
345
+
346
+ if (missingExplicitRoutes.length > 0) {
347
+ logger.sendErrorEvent({
348
+ eventName: "gcUnknownOutboundReferences",
349
+ ...tagCodeArtifacts({
350
+ id: nodeId,
351
+ routes: JSON.stringify(missingExplicitRoutes),
352
+ }),
353
+ });
354
+ }
355
+ }
356
+ }
357
+
358
+ /**
359
+ * Log events that are pending in pendingEventsQueue. This is called after GC runs in the summarizer client
360
+ * so that the state of an unreferenced node is updated.
361
+ */
362
+ public async logPendingEvents(logger: ITelemetryLoggerExt) {
363
+ // Events sent come only from the summarizer client. In between summaries, events are pushed to a queue and at
364
+ // summary time they are then logged.
365
+ // Events generated:
366
+ // InactiveObject_Loaded, InactiveObject_Changed, InactiveObject_Revived
367
+ // SweepReadyObject_Loaded, SweepReadyObject_Changed, SweepReadyObject_Revived
368
+ for (const eventProps of this.pendingEventsQueue) {
369
+ // const { usageType, state, id, fromId, ...propsToLog } = eventProps;
370
+ const { usageType, state, id, fromId, headers, gcConfigs, ...detailedProps } =
371
+ eventProps;
372
+ /**
373
+ * Revived event is logged only if the node is active. If the node is not active, the reference to it was
374
+ * from another unreferenced node and this scenario is not interesting to log.
375
+ * Loaded and Changed events are logged only if the node is not active. If the node is active, it was
376
+ * revived and a Revived event will be logged for it.
377
+ */
378
+ const nodeStateTracker = this.getNodeStateTracker(eventProps.id.value);
379
+ const active =
380
+ nodeStateTracker === undefined ||
381
+ nodeStateTracker.state === UnreferencedState.Active;
382
+ if ((usageType === "Revived") === active) {
383
+ const pkg = await this.getNodePackagePath(eventProps.id.value);
384
+ const fromPkg = eventProps.fromId
385
+ ? await this.getNodePackagePath(eventProps.fromId.value)
386
+ : undefined;
387
+ const event = {
388
+ eventName: `${state}Object_${usageType}`,
389
+ id,
390
+ fromId,
391
+ headers: { ...headers },
392
+ details: detailedProps,
393
+ gcConfigs,
394
+ ...tagCodeArtifacts({
395
+ pkg: pkg?.join("/"),
396
+ fromPkg: fromPkg?.join("/"),
397
+ }),
398
+ };
399
+
400
+ // These are logged as generic events and not errors because there can be false positives. The Tombstone
401
+ // and Delete errors are separately logged and are reliable.
402
+ logger.sendTelemetryEvent(event);
403
+ }
404
+ }
405
+ this.pendingEventsQueue = [];
406
+ }
407
+ }
408
+
409
+ /**
410
+ * Consolidates info / logic for logging when we encounter unexpected usage of GC'd objects. For example, when a
411
+ * tombstoned or deleted object is loaded.
412
+ */
413
+ export function sendGCUnexpectedUsageEvent(
414
+ mc: MonitoringContext,
415
+ event: ITelemetryGenericEvent & {
416
+ category: "error" | "generic";
417
+ gcTombstoneEnforcementAllowed: boolean | undefined;
418
+ },
419
+ packagePath: readonly string[] | undefined,
420
+ error?: unknown,
421
+ ) {
422
+ event.pkg = tagCodeArtifacts({ pkg: packagePath?.join("/") })?.pkg;
423
+ event.tombstoneFlags = JSON.stringify({
424
+ DisableTombstone: mc.config.getBoolean(disableTombstoneKey),
425
+ ThrowOnTombstoneUsage: mc.config.getBoolean(throwOnTombstoneUsageKey),
426
+ ThrowOnTombstoneLoad: mc.config.getBoolean(throwOnTombstoneLoadOverrideKey),
427
+ });
428
+ event.sweepFlags = JSON.stringify({
429
+ EnableSweepFlag: mc.config.getBoolean(runSweepKey),
430
+ });
431
+
432
+ mc.logger.sendTelemetryEvent(event, error);
433
+ }
@@ -0,0 +1,153 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { assert, Timer } from "@fluidframework/core-utils";
7
+ import { validatePrecondition } from "@fluidframework/telemetry-utils";
8
+ import { UnreferencedState } from "./gcDefinitions";
9
+
10
+ /** A wrapper around common-utils Timer that requires the timeout when calling start/restart */
11
+ class TimerWithNoDefaultTimeout extends Timer {
12
+ constructor(private readonly callback: () => void) {
13
+ // The default timeout/handlers will never be used since start/restart pass overrides below
14
+ super(0, () => {
15
+ throw new Error("DefaultHandler should not be used");
16
+ });
17
+ }
18
+
19
+ start(timeoutMs: number) {
20
+ super.start(timeoutMs, this.callback);
21
+ }
22
+
23
+ restart(timeoutMs: number): void {
24
+ super.restart(timeoutMs, this.callback);
25
+ }
26
+ }
27
+
28
+ /**
29
+ * Helper class that tracks the state of an unreferenced node such as the time it was unreferenced and if it can
30
+ * be tombstoned or deleted by the sweep phase.
31
+ */
32
+ export class UnreferencedStateTracker {
33
+ private _state: UnreferencedState = UnreferencedState.Active;
34
+ public get state(): UnreferencedState {
35
+ return this._state;
36
+ }
37
+
38
+ /** Timer to indicate when an unreferenced object is considered Inactive */
39
+ private readonly inactiveTimer: TimerWithNoDefaultTimeout;
40
+ /** Timer to indicate when an unreferenced object is Tombstone-Ready */
41
+ private readonly tombstoneTimer: TimerWithNoDefaultTimeout;
42
+ /** Timer to indicate when an unreferenced object is Sweep-Ready */
43
+ private readonly sweepTimer: TimerWithNoDefaultTimeout;
44
+
45
+ constructor(
46
+ public readonly unreferencedTimestampMs: number,
47
+ /** The time after which node transitions to Inactive state. */
48
+ private readonly inactiveTimeoutMs: number,
49
+ /** The current reference timestamp used to track how long this node has been unreferenced for. */
50
+ currentReferenceTimestampMs: number,
51
+ /** The time after which node transitions to TombstoneReady state; undefined if session expiry is disabled. */
52
+ private readonly tombstoneTimeoutMs: number | undefined,
53
+ /** The delay from TombstoneReady to SweepReady (only applies if tombstoneTimeoutMs is defined) */
54
+ private readonly sweepGracePeriodMs: number,
55
+ ) {
56
+ validatePrecondition(
57
+ this.tombstoneTimeoutMs === undefined ||
58
+ this.tombstoneTimeoutMs >= this.inactiveTimeoutMs,
59
+ "inactiveTimeoutMs must not be greater than the tombstoneTimeoutMs",
60
+ );
61
+
62
+ this.sweepTimer = new TimerWithNoDefaultTimeout(() => {
63
+ this._state = UnreferencedState.SweepReady;
64
+ assert(
65
+ !this.inactiveTimer.hasTimer && !this.tombstoneTimer.hasTimer,
66
+ 0x863 /* inactiveTimer or tombstoneTimer still running after sweepTimer fired! */,
67
+ );
68
+ });
69
+
70
+ this.tombstoneTimer = new TimerWithNoDefaultTimeout(() => {
71
+ this._state = UnreferencedState.TombstoneReady;
72
+ assert(
73
+ !this.inactiveTimer.hasTimer,
74
+ 0x864 /* inactiveTimer still running after tombstoneTimer fired! */,
75
+ ); // aka 0x3b1
76
+
77
+ if (this.sweepGracePeriodMs > 0) {
78
+ // After the node becomes tombstone ready, start the sweep timer after which the node will be ready for sweep.
79
+ this.sweepTimer.restart(this.sweepGracePeriodMs);
80
+ } else {
81
+ this._state = UnreferencedState.SweepReady;
82
+ }
83
+ });
84
+
85
+ this.inactiveTimer = new TimerWithNoDefaultTimeout(() => {
86
+ this._state = UnreferencedState.Inactive;
87
+
88
+ // After the node becomes inactive, start the tombstone timer after which the node will be ready for tombstone.
89
+ if (this.tombstoneTimeoutMs !== undefined) {
90
+ this.tombstoneTimer.restart(this.tombstoneTimeoutMs - this.inactiveTimeoutMs);
91
+ }
92
+ });
93
+
94
+ this.updateTracking(currentReferenceTimestampMs);
95
+ }
96
+
97
+ /* Updates the unreferenced state based on the provided timestamp. */
98
+ public updateTracking(currentReferenceTimestampMs: number) {
99
+ const unreferencedDurationMs = currentReferenceTimestampMs - this.unreferencedTimestampMs;
100
+
101
+ // Below we will set the appropriate timer (or none). Any running timers are superceded by the new currentReferenceTimestampMs
102
+ this.clearTimers();
103
+
104
+ // If the node has been unreferenced long enough, update the state to SweepReady.
105
+ if (
106
+ this.tombstoneTimeoutMs !== undefined &&
107
+ unreferencedDurationMs >= this.tombstoneTimeoutMs + this.sweepGracePeriodMs
108
+ ) {
109
+ this._state = UnreferencedState.SweepReady;
110
+ return;
111
+ }
112
+
113
+ // If the node has been unreferenced long enough, update the state to TombstoneReady.
114
+ // Also, start a timer for the remainder of the sweep delay.
115
+ if (
116
+ this.tombstoneTimeoutMs !== undefined &&
117
+ unreferencedDurationMs >= this.tombstoneTimeoutMs
118
+ ) {
119
+ this._state = UnreferencedState.TombstoneReady;
120
+
121
+ this.sweepTimer.restart(
122
+ this.tombstoneTimeoutMs + this.sweepGracePeriodMs - unreferencedDurationMs,
123
+ );
124
+ return;
125
+ }
126
+
127
+ // If the node has been unreferenced for long enough, update the state to inactive.
128
+ // Also, start a timer for the remainder of the tombstone timeout.
129
+ if (unreferencedDurationMs >= this.inactiveTimeoutMs) {
130
+ this._state = UnreferencedState.Inactive;
131
+
132
+ if (this.tombstoneTimeoutMs !== undefined) {
133
+ this.tombstoneTimer.restart(this.tombstoneTimeoutMs - unreferencedDurationMs);
134
+ }
135
+ return;
136
+ }
137
+
138
+ // The node is still active. Ensure the inactive timer is running with the proper remaining duration.
139
+ this.inactiveTimer.restart(this.inactiveTimeoutMs - unreferencedDurationMs);
140
+ }
141
+
142
+ private clearTimers() {
143
+ this.inactiveTimer.clear();
144
+ this.tombstoneTimer.clear();
145
+ this.sweepTimer.clear();
146
+ }
147
+
148
+ /** Stop tracking this node. Reset the unreferenced timers and state, if any. */
149
+ public stopTracking() {
150
+ this.clearTimers();
151
+ this._state = UnreferencedState.Active;
152
+ }
153
+ }
@@ -0,0 +1,60 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ export { GarbageCollector } from "./garbageCollection";
7
+ export {
8
+ nextGCVersion,
9
+ defaultInactiveTimeoutMs,
10
+ defaultSweepGracePeriodMs,
11
+ defaultSessionExpiryDurationMs,
12
+ GCNodeType,
13
+ gcTestModeKey,
14
+ gcDisableThrowOnTombstoneLoadOptionName,
15
+ gcGenerationOptionName,
16
+ GCFeatureMatrix,
17
+ GCVersion,
18
+ gcVersionUpgradeToV4Key,
19
+ IGarbageCollectionRuntime,
20
+ IGarbageCollector,
21
+ IGarbageCollectorConfigs,
22
+ IGarbageCollectorCreateParams,
23
+ IGCMetadata,
24
+ IGCMetadata_Deprecated,
25
+ IGCResult,
26
+ IGCRuntimeOptions,
27
+ IMarkPhaseStats,
28
+ ISweepPhaseStats,
29
+ IGCStats,
30
+ oneDayMs,
31
+ runGCKey,
32
+ runSessionExpiryKey,
33
+ runSweepKey,
34
+ stableGCVersion,
35
+ disableAttachmentBlobSweepKey,
36
+ disableDatastoreSweepKey,
37
+ UnreferencedState,
38
+ throwOnTombstoneLoadOverrideKey,
39
+ GarbageCollectionMessage,
40
+ } from "./gcDefinitions";
41
+ export {
42
+ cloneGCData,
43
+ concatGarbageCollectionStates,
44
+ trimLeadingAndTrailingSlashes,
45
+ unpackChildNodesGCDetails,
46
+ } from "./gcHelpers";
47
+ export { runGarbageCollection } from "./gcReferenceGraphAlgorithm";
48
+ export {
49
+ IGarbageCollectionNodeData,
50
+ IGarbageCollectionSnapshotData,
51
+ IGarbageCollectionState,
52
+ IGarbageCollectionSummaryDetailsLegacy,
53
+ } from "./gcSummaryDefinitions";
54
+ export {
55
+ gcStateBlobKey,
56
+ GCSummaryStateTracker,
57
+ IGCSummaryTrackingData,
58
+ } from "./gcSummaryStateTracker";
59
+ export { GCTelemetryTracker, sendGCUnexpectedUsageEvent } from "./gcTelemetry";
60
+ export { UnreferencedStateTracker } from "./gcUnreferencedStateTracker";