@fluidframework/container-runtime 1.4.0-115997 → 2.0.0-dev-rc.1.0.0.224419

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 (703) 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-lint.json +4 -0
  6. package/api-extractor.json +2 -2
  7. package/api-report/container-runtime.api.md +863 -0
  8. package/dist/{batchTracker.js → batchTracker.cjs} +9 -8
  9. package/dist/batchTracker.cjs.map +1 -0
  10. package/dist/batchTracker.d.ts +6 -6
  11. package/dist/batchTracker.d.ts.map +1 -1
  12. package/dist/blobManager.cjs +704 -0
  13. package/dist/blobManager.cjs.map +1 -0
  14. package/dist/blobManager.d.ts +135 -39
  15. package/dist/blobManager.d.ts.map +1 -1
  16. package/dist/connectionTelemetry.cjs +230 -0
  17. package/dist/connectionTelemetry.cjs.map +1 -0
  18. package/dist/connectionTelemetry.d.ts +2 -2
  19. package/dist/connectionTelemetry.d.ts.map +1 -1
  20. package/dist/container-runtime-alpha.d.ts +1677 -0
  21. package/dist/container-runtime-beta.d.ts +250 -0
  22. package/dist/container-runtime-public.d.ts +250 -0
  23. package/dist/container-runtime-untrimmed.d.ts +1792 -0
  24. package/dist/{containerHandleContext.js → containerHandleContext.cjs} +4 -2
  25. package/dist/containerHandleContext.cjs.map +1 -0
  26. package/dist/containerHandleContext.d.ts.map +1 -1
  27. package/dist/containerRuntime.cjs +2531 -0
  28. package/dist/containerRuntime.cjs.map +1 -0
  29. package/dist/containerRuntime.d.ts +454 -257
  30. package/dist/containerRuntime.d.ts.map +1 -1
  31. package/dist/{dataStore.js → dataStore.cjs} +54 -45
  32. package/dist/dataStore.cjs.map +1 -0
  33. package/dist/dataStore.d.ts +2 -2
  34. package/dist/dataStore.d.ts.map +1 -1
  35. package/dist/{dataStoreContext.js → dataStoreContext.cjs} +343 -247
  36. package/dist/dataStoreContext.cjs.map +1 -0
  37. package/dist/dataStoreContext.d.ts +73 -41
  38. package/dist/dataStoreContext.d.ts.map +1 -1
  39. package/dist/{dataStoreContexts.js → dataStoreContexts.cjs} +19 -15
  40. package/dist/dataStoreContexts.cjs.map +1 -0
  41. package/dist/dataStoreContexts.d.ts +1 -1
  42. package/dist/dataStoreContexts.d.ts.map +1 -1
  43. package/dist/{dataStoreRegistry.js → dataStoreRegistry.cjs} +9 -4
  44. package/dist/dataStoreRegistry.cjs.map +1 -0
  45. package/dist/dataStoreRegistry.d.ts +3 -0
  46. package/dist/dataStoreRegistry.d.ts.map +1 -1
  47. package/dist/{dataStores.js → dataStores.cjs} +273 -124
  48. package/dist/dataStores.cjs.map +1 -0
  49. package/dist/dataStores.d.ts +53 -23
  50. package/dist/dataStores.d.ts.map +1 -1
  51. package/dist/deltaManagerProxyBase.cjs +77 -0
  52. package/dist/deltaManagerProxyBase.cjs.map +1 -0
  53. package/dist/deltaManagerProxyBase.d.ts +35 -0
  54. package/dist/deltaManagerProxyBase.d.ts.map +1 -0
  55. package/dist/deltaManagerSummarizerProxy.cjs +42 -0
  56. package/dist/deltaManagerSummarizerProxy.cjs.map +1 -0
  57. package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
  58. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
  59. package/dist/{deltaScheduler.js → deltaScheduler.cjs} +25 -18
  60. package/dist/deltaScheduler.cjs.map +1 -0
  61. package/dist/deltaScheduler.d.ts +8 -6
  62. package/dist/deltaScheduler.d.ts.map +1 -1
  63. package/dist/error.cjs +21 -0
  64. package/dist/error.cjs.map +1 -0
  65. package/dist/error.d.ts +14 -0
  66. package/dist/error.d.ts.map +1 -0
  67. package/dist/gc/garbageCollection.cjs +861 -0
  68. package/dist/gc/garbageCollection.cjs.map +1 -0
  69. package/dist/gc/garbageCollection.d.ts +224 -0
  70. package/dist/gc/garbageCollection.d.ts.map +1 -0
  71. package/dist/gc/gcConfigs.cjs +153 -0
  72. package/dist/gc/gcConfigs.cjs.map +1 -0
  73. package/dist/gc/gcConfigs.d.ts +23 -0
  74. package/dist/gc/gcConfigs.d.ts.map +1 -0
  75. package/dist/gc/gcDefinitions.cjs +96 -0
  76. package/dist/gc/gcDefinitions.cjs.map +1 -0
  77. package/dist/gc/gcDefinitions.d.ts +437 -0
  78. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  79. package/dist/gc/gcHelpers.cjs +235 -0
  80. package/dist/gc/gcHelpers.cjs.map +1 -0
  81. package/dist/gc/gcHelpers.d.ts +71 -0
  82. package/dist/gc/gcHelpers.d.ts.map +1 -0
  83. package/dist/gc/gcReferenceGraphAlgorithm.cjs +49 -0
  84. package/dist/gc/gcReferenceGraphAlgorithm.cjs.map +1 -0
  85. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  86. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  87. package/dist/{summarizerTypes.js → gc/gcSummaryDefinitions.cjs} +1 -6
  88. package/dist/gc/gcSummaryDefinitions.cjs.map +1 -0
  89. package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
  90. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
  91. package/dist/gc/gcSummaryStateTracker.cjs +213 -0
  92. package/dist/gc/gcSummaryStateTracker.cjs.map +1 -0
  93. package/dist/gc/gcSummaryStateTracker.d.ts +94 -0
  94. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  95. package/dist/gc/gcTelemetry.cjs +298 -0
  96. package/dist/gc/gcTelemetry.cjs.map +1 -0
  97. package/dist/gc/gcTelemetry.d.ts +92 -0
  98. package/dist/gc/gcTelemetry.d.ts.map +1 -0
  99. package/dist/gc/gcUnreferencedStateTracker.cjs +118 -0
  100. package/dist/gc/gcUnreferencedStateTracker.cjs.map +1 -0
  101. package/dist/gc/gcUnreferencedStateTracker.d.ts +40 -0
  102. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  103. package/dist/gc/index.cjs +44 -0
  104. package/dist/gc/index.cjs.map +1 -0
  105. package/dist/gc/index.d.ts +13 -0
  106. package/dist/gc/index.d.ts.map +1 -0
  107. package/dist/index.cjs +47 -0
  108. package/dist/index.cjs.map +1 -0
  109. package/dist/index.d.ts +19 -8
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/messageTypes.cjs +37 -0
  112. package/dist/messageTypes.cjs.map +1 -0
  113. package/dist/messageTypes.d.ts +142 -0
  114. package/dist/messageTypes.d.ts.map +1 -0
  115. package/dist/metadata.cjs +7 -0
  116. package/dist/metadata.cjs.map +1 -0
  117. package/dist/metadata.d.ts +24 -0
  118. package/dist/metadata.d.ts.map +1 -0
  119. package/dist/opLifecycle/batchManager.cjs +139 -0
  120. package/dist/opLifecycle/batchManager.cjs.map +1 -0
  121. package/dist/opLifecycle/batchManager.d.ts +48 -0
  122. package/dist/opLifecycle/batchManager.d.ts.map +1 -0
  123. package/dist/opLifecycle/definitions.cjs +7 -0
  124. package/dist/opLifecycle/definitions.cjs.map +1 -0
  125. package/dist/opLifecycle/definitions.d.ts +83 -0
  126. package/dist/opLifecycle/definitions.d.ts.map +1 -0
  127. package/dist/opLifecycle/index.cjs +26 -0
  128. package/dist/opLifecycle/index.cjs.map +1 -0
  129. package/dist/opLifecycle/index.d.ts +13 -0
  130. package/dist/opLifecycle/index.d.ts.map +1 -0
  131. package/dist/opLifecycle/opCompressor.cjs +84 -0
  132. package/dist/opLifecycle/opCompressor.cjs.map +1 -0
  133. package/dist/opLifecycle/opCompressor.d.ts +18 -0
  134. package/dist/opLifecycle/opCompressor.d.ts.map +1 -0
  135. package/dist/opLifecycle/opDecompressor.cjs +132 -0
  136. package/dist/opLifecycle/opDecompressor.cjs.map +1 -0
  137. package/dist/opLifecycle/opDecompressor.d.ts +25 -0
  138. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -0
  139. package/dist/opLifecycle/opGroupingManager.cjs +95 -0
  140. package/dist/opLifecycle/opGroupingManager.cjs.map +1 -0
  141. package/dist/opLifecycle/opGroupingManager.d.ts +22 -0
  142. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -0
  143. package/dist/opLifecycle/opSplitter.cjs +202 -0
  144. package/dist/opLifecycle/opSplitter.cjs.map +1 -0
  145. package/dist/opLifecycle/opSplitter.d.ts +61 -0
  146. package/dist/opLifecycle/opSplitter.d.ts.map +1 -0
  147. package/dist/opLifecycle/outbox.cjs +323 -0
  148. package/dist/opLifecycle/outbox.cjs.map +1 -0
  149. package/dist/opLifecycle/outbox.d.ts +104 -0
  150. package/dist/opLifecycle/outbox.d.ts.map +1 -0
  151. package/dist/opLifecycle/remoteMessageProcessor.cjs +136 -0
  152. package/dist/opLifecycle/remoteMessageProcessor.cjs.map +1 -0
  153. package/dist/opLifecycle/remoteMessageProcessor.d.ts +47 -0
  154. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  155. package/dist/opProperties.cjs +17 -0
  156. package/dist/opProperties.cjs.map +1 -0
  157. package/dist/opProperties.d.ts +7 -0
  158. package/dist/opProperties.d.ts.map +1 -0
  159. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  160. package/dist/packageVersion.cjs.map +1 -0
  161. package/dist/packageVersion.d.ts +1 -1
  162. package/dist/packageVersion.d.ts.map +1 -1
  163. package/dist/pendingStateManager.cjs +282 -0
  164. package/dist/pendingStateManager.cjs.map +1 -0
  165. package/dist/pendingStateManager.d.ts +32 -69
  166. package/dist/pendingStateManager.d.ts.map +1 -1
  167. package/dist/scheduleManager.cjs +258 -0
  168. package/dist/scheduleManager.cjs.map +1 -0
  169. package/dist/scheduleManager.d.ts +31 -0
  170. package/dist/scheduleManager.d.ts.map +1 -0
  171. package/dist/storageServiceWithAttachBlobs.cjs +32 -0
  172. package/dist/storageServiceWithAttachBlobs.cjs.map +1 -0
  173. package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
  174. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
  175. package/dist/summary/index.cjs +51 -0
  176. package/dist/summary/index.cjs.map +1 -0
  177. package/dist/summary/index.d.ts +17 -0
  178. package/dist/summary/index.d.ts.map +1 -0
  179. package/dist/{orderedClientElection.js → summary/orderedClientElection.cjs} +100 -84
  180. package/dist/summary/orderedClientElection.cjs.map +1 -0
  181. package/{lib → dist/summary}/orderedClientElection.d.ts +41 -18
  182. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  183. package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.cjs} +12 -10
  184. package/dist/summary/runWhileConnectedCoordinator.cjs.map +1 -0
  185. package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +8 -2
  186. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  187. package/dist/summary/runningSummarizer.cjs +679 -0
  188. package/dist/summary/runningSummarizer.cjs.map +1 -0
  189. package/dist/summary/runningSummarizer.d.ts +128 -0
  190. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  191. package/dist/summary/summarizer.cjs +263 -0
  192. package/dist/summary/summarizer.cjs.map +1 -0
  193. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +18 -34
  194. package/dist/summary/summarizer.d.ts.map +1 -0
  195. package/dist/{summarizerClientElection.js → summary/summarizerClientElection.cjs} +15 -46
  196. package/dist/summary/summarizerClientElection.cjs.map +1 -0
  197. package/{lib → dist/summary}/summarizerClientElection.d.ts +4 -4
  198. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  199. package/dist/summary/summarizerHeuristics.cjs +156 -0
  200. package/dist/summary/summarizerHeuristics.cjs.map +1 -0
  201. package/{lib → dist/summary}/summarizerHeuristics.d.ts +28 -6
  202. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  203. package/dist/summary/summarizerNode/index.cjs +12 -0
  204. package/dist/summary/summarizerNode/index.cjs.map +1 -0
  205. package/dist/summary/summarizerNode/index.d.ts +8 -0
  206. package/dist/summary/summarizerNode/index.d.ts.map +1 -0
  207. package/dist/summary/summarizerNode/summarizerNode.cjs +526 -0
  208. package/dist/summary/summarizerNode/summarizerNode.cjs.map +1 -0
  209. package/dist/summary/summarizerNode/summarizerNode.d.ts +167 -0
  210. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  211. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs +130 -0
  212. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs.map +1 -0
  213. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +121 -0
  214. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  215. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs +375 -0
  216. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs.map +1 -0
  217. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +153 -0
  218. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  219. package/dist/summary/summarizerTypes.cjs +7 -0
  220. package/dist/summary/summarizerTypes.cjs.map +1 -0
  221. package/{lib → dist/summary}/summarizerTypes.d.ts +233 -83
  222. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  223. package/dist/{summaryCollection.js → summary/summaryCollection.cjs} +80 -49
  224. package/dist/summary/summaryCollection.cjs.map +1 -0
  225. package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +23 -5
  226. package/dist/summary/summaryCollection.d.ts.map +1 -0
  227. package/dist/{summaryFormat.js → summary/summaryFormat.cjs} +29 -26
  228. package/dist/summary/summaryFormat.cjs.map +1 -0
  229. package/{lib → dist/summary}/summaryFormat.d.ts +25 -30
  230. package/dist/summary/summaryFormat.d.ts.map +1 -0
  231. package/dist/{summaryGenerator.js → summary/summaryGenerator.cjs} +162 -74
  232. package/dist/summary/summaryGenerator.cjs.map +1 -0
  233. package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +53 -11
  234. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  235. package/dist/{summaryManager.js → summary/summaryManager.cjs} +98 -55
  236. package/dist/summary/summaryManager.cjs.map +1 -0
  237. package/{lib → dist/summary}/summaryManager.d.ts +13 -11
  238. package/dist/summary/summaryManager.d.ts.map +1 -0
  239. package/dist/{throttler.js → throttler.cjs} +21 -21
  240. package/dist/throttler.cjs.map +1 -0
  241. package/dist/throttler.d.ts +2 -2
  242. package/dist/throttler.d.ts.map +1 -1
  243. package/dist/tsdoc-metadata.json +11 -0
  244. package/lib/{batchTracker.d.ts → batchTracker.d.mts} +6 -6
  245. package/lib/batchTracker.d.mts.map +1 -0
  246. package/lib/{batchTracker.js → batchTracker.mjs} +9 -8
  247. package/lib/batchTracker.mjs.map +1 -0
  248. package/lib/blobManager.d.mts +191 -0
  249. package/lib/blobManager.d.mts.map +1 -0
  250. package/lib/blobManager.mjs +699 -0
  251. package/lib/blobManager.mjs.map +1 -0
  252. package/lib/{connectionTelemetry.d.ts → connectionTelemetry.d.mts} +2 -2
  253. package/lib/connectionTelemetry.d.mts.map +1 -0
  254. package/lib/connectionTelemetry.mjs +226 -0
  255. package/lib/connectionTelemetry.mjs.map +1 -0
  256. package/lib/container-runtime-alpha.d.mts +1677 -0
  257. package/lib/container-runtime-beta.d.mts +250 -0
  258. package/lib/container-runtime-public.d.mts +250 -0
  259. package/lib/container-runtime-untrimmed.d.mts +1792 -0
  260. package/lib/{containerHandleContext.d.ts → containerHandleContext.d.mts} +1 -1
  261. package/lib/containerHandleContext.d.mts.map +1 -0
  262. package/lib/{containerHandleContext.js → containerHandleContext.mjs} +4 -2
  263. package/lib/containerHandleContext.mjs.map +1 -0
  264. package/lib/containerRuntime.d.mts +809 -0
  265. package/lib/containerRuntime.d.mts.map +1 -0
  266. package/lib/containerRuntime.mjs +2526 -0
  267. package/lib/containerRuntime.mjs.map +1 -0
  268. package/lib/{dataStore.d.ts → dataStore.d.mts} +4 -4
  269. package/lib/dataStore.d.mts.map +1 -0
  270. package/lib/{dataStore.js → dataStore.mjs} +52 -43
  271. package/lib/dataStore.mjs.map +1 -0
  272. package/lib/{dataStoreContext.d.ts → dataStoreContext.d.mts} +74 -42
  273. package/lib/dataStoreContext.d.mts.map +1 -0
  274. package/lib/{dataStoreContext.js → dataStoreContext.mjs} +309 -213
  275. package/lib/dataStoreContext.mjs.map +1 -0
  276. package/lib/{dataStoreContexts.d.ts → dataStoreContexts.d.mts} +2 -2
  277. package/lib/dataStoreContexts.d.mts.map +1 -0
  278. package/lib/{dataStoreContexts.js → dataStoreContexts.mjs} +12 -8
  279. package/lib/dataStoreContexts.mjs.map +1 -0
  280. package/lib/{dataStoreRegistry.d.ts → dataStoreRegistry.d.mts} +3 -0
  281. package/lib/dataStoreRegistry.d.mts.map +1 -0
  282. package/lib/{dataStoreRegistry.js → dataStoreRegistry.mjs} +7 -6
  283. package/lib/dataStoreRegistry.mjs.map +1 -0
  284. package/lib/{dataStores.d.ts → dataStores.d.mts} +56 -26
  285. package/lib/dataStores.d.mts.map +1 -0
  286. package/lib/{dataStores.js → dataStores.mjs} +254 -105
  287. package/lib/dataStores.mjs.map +1 -0
  288. package/lib/deltaManagerProxyBase.d.mts +35 -0
  289. package/lib/deltaManagerProxyBase.d.mts.map +1 -0
  290. package/lib/deltaManagerProxyBase.mjs +73 -0
  291. package/lib/deltaManagerProxyBase.mjs.map +1 -0
  292. package/lib/deltaManagerSummarizerProxy.d.mts +19 -0
  293. package/lib/deltaManagerSummarizerProxy.d.mts.map +1 -0
  294. package/lib/deltaManagerSummarizerProxy.mjs +38 -0
  295. package/lib/deltaManagerSummarizerProxy.mjs.map +1 -0
  296. package/lib/{deltaScheduler.d.ts → deltaScheduler.d.mts} +8 -6
  297. package/lib/deltaScheduler.d.mts.map +1 -0
  298. package/lib/{deltaScheduler.js → deltaScheduler.mjs} +22 -15
  299. package/lib/deltaScheduler.mjs.map +1 -0
  300. package/lib/error.d.mts +14 -0
  301. package/lib/error.d.mts.map +1 -0
  302. package/lib/error.mjs +17 -0
  303. package/lib/error.mjs.map +1 -0
  304. package/lib/gc/garbageCollection.d.mts +224 -0
  305. package/lib/gc/garbageCollection.d.mts.map +1 -0
  306. package/lib/gc/garbageCollection.mjs +857 -0
  307. package/lib/gc/garbageCollection.mjs.map +1 -0
  308. package/lib/gc/gcConfigs.d.mts +23 -0
  309. package/lib/gc/gcConfigs.d.mts.map +1 -0
  310. package/lib/gc/gcConfigs.mjs +149 -0
  311. package/lib/gc/gcConfigs.mjs.map +1 -0
  312. package/lib/gc/gcDefinitions.d.mts +437 -0
  313. package/lib/gc/gcDefinitions.d.mts.map +1 -0
  314. package/lib/gc/gcDefinitions.mjs +93 -0
  315. package/lib/gc/gcDefinitions.mjs.map +1 -0
  316. package/lib/gc/gcHelpers.d.mts +71 -0
  317. package/lib/gc/gcHelpers.d.mts.map +1 -0
  318. package/lib/gc/gcHelpers.mjs +222 -0
  319. package/lib/gc/gcHelpers.mjs.map +1 -0
  320. package/lib/gc/gcReferenceGraphAlgorithm.d.mts +16 -0
  321. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +1 -0
  322. package/lib/gc/gcReferenceGraphAlgorithm.mjs +45 -0
  323. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +1 -0
  324. package/lib/gc/gcSummaryDefinitions.d.mts +52 -0
  325. package/lib/gc/gcSummaryDefinitions.d.mts.map +1 -0
  326. package/lib/gc/gcSummaryDefinitions.mjs +6 -0
  327. package/lib/gc/gcSummaryDefinitions.mjs.map +1 -0
  328. package/lib/gc/gcSummaryStateTracker.d.mts +94 -0
  329. package/lib/gc/gcSummaryStateTracker.d.mts.map +1 -0
  330. package/lib/gc/gcSummaryStateTracker.mjs +209 -0
  331. package/lib/gc/gcSummaryStateTracker.mjs.map +1 -0
  332. package/lib/gc/gcTelemetry.d.mts +92 -0
  333. package/lib/gc/gcTelemetry.d.mts.map +1 -0
  334. package/lib/gc/gcTelemetry.mjs +293 -0
  335. package/lib/gc/gcTelemetry.mjs.map +1 -0
  336. package/lib/gc/gcUnreferencedStateTracker.d.mts +40 -0
  337. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +1 -0
  338. package/lib/gc/gcUnreferencedStateTracker.mjs +114 -0
  339. package/lib/gc/gcUnreferencedStateTracker.mjs.map +1 -0
  340. package/lib/gc/index.d.mts +13 -0
  341. package/lib/gc/index.d.mts.map +1 -0
  342. package/lib/gc/index.mjs +12 -0
  343. package/lib/gc/index.mjs.map +1 -0
  344. package/lib/index.d.mts +25 -0
  345. package/lib/index.d.mts.map +1 -0
  346. package/lib/index.mjs +24 -0
  347. package/lib/index.mjs.map +1 -0
  348. package/lib/messageTypes.d.mts +142 -0
  349. package/lib/messageTypes.d.mts.map +1 -0
  350. package/lib/messageTypes.mjs +34 -0
  351. package/lib/messageTypes.mjs.map +1 -0
  352. package/lib/metadata.d.mts +24 -0
  353. package/lib/metadata.d.mts.map +1 -0
  354. package/lib/metadata.mjs +6 -0
  355. package/lib/metadata.mjs.map +1 -0
  356. package/lib/opLifecycle/batchManager.d.mts +48 -0
  357. package/lib/opLifecycle/batchManager.d.mts.map +1 -0
  358. package/lib/opLifecycle/batchManager.mjs +133 -0
  359. package/lib/opLifecycle/batchManager.mjs.map +1 -0
  360. package/lib/opLifecycle/definitions.d.mts +83 -0
  361. package/lib/opLifecycle/definitions.d.mts.map +1 -0
  362. package/lib/opLifecycle/definitions.mjs +6 -0
  363. package/lib/opLifecycle/definitions.mjs.map +1 -0
  364. package/lib/opLifecycle/index.d.mts +13 -0
  365. package/lib/opLifecycle/index.d.mts.map +1 -0
  366. package/lib/opLifecycle/index.mjs +12 -0
  367. package/lib/opLifecycle/index.mjs.map +1 -0
  368. package/lib/opLifecycle/opCompressor.d.mts +18 -0
  369. package/lib/opLifecycle/opCompressor.d.mts.map +1 -0
  370. package/lib/opLifecycle/opCompressor.mjs +80 -0
  371. package/lib/opLifecycle/opCompressor.mjs.map +1 -0
  372. package/lib/opLifecycle/opDecompressor.d.mts +25 -0
  373. package/lib/opLifecycle/opDecompressor.d.mts.map +1 -0
  374. package/lib/opLifecycle/opDecompressor.mjs +128 -0
  375. package/lib/opLifecycle/opDecompressor.mjs.map +1 -0
  376. package/lib/opLifecycle/opGroupingManager.d.mts +22 -0
  377. package/lib/opLifecycle/opGroupingManager.d.mts.map +1 -0
  378. package/lib/opLifecycle/opGroupingManager.mjs +91 -0
  379. package/lib/opLifecycle/opGroupingManager.mjs.map +1 -0
  380. package/lib/opLifecycle/opSplitter.d.mts +61 -0
  381. package/lib/opLifecycle/opSplitter.d.mts.map +1 -0
  382. package/lib/opLifecycle/opSplitter.mjs +197 -0
  383. package/lib/opLifecycle/opSplitter.mjs.map +1 -0
  384. package/lib/opLifecycle/outbox.d.mts +104 -0
  385. package/lib/opLifecycle/outbox.d.mts.map +1 -0
  386. package/lib/opLifecycle/outbox.mjs +318 -0
  387. package/lib/opLifecycle/outbox.mjs.map +1 -0
  388. package/lib/opLifecycle/remoteMessageProcessor.d.mts +47 -0
  389. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +1 -0
  390. package/lib/opLifecycle/remoteMessageProcessor.mjs +131 -0
  391. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +1 -0
  392. package/lib/opProperties.d.mts +7 -0
  393. package/lib/opProperties.d.mts.map +1 -0
  394. package/lib/opProperties.mjs +13 -0
  395. package/lib/opProperties.mjs.map +1 -0
  396. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
  397. package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
  398. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  399. package/lib/packageVersion.mjs.map +1 -0
  400. package/lib/{pendingStateManager.d.ts → pendingStateManager.d.mts} +32 -69
  401. package/lib/pendingStateManager.d.mts.map +1 -0
  402. package/lib/pendingStateManager.mjs +275 -0
  403. package/lib/pendingStateManager.mjs.map +1 -0
  404. package/lib/scheduleManager.d.mts +27 -0
  405. package/lib/scheduleManager.d.mts.map +1 -0
  406. package/lib/scheduleManager.mjs +254 -0
  407. package/lib/scheduleManager.mjs.map +1 -0
  408. package/lib/storageServiceWithAttachBlobs.d.mts +17 -0
  409. package/lib/storageServiceWithAttachBlobs.d.mts.map +1 -0
  410. package/lib/storageServiceWithAttachBlobs.mjs +28 -0
  411. package/lib/storageServiceWithAttachBlobs.mjs.map +1 -0
  412. package/lib/summary/index.d.mts +17 -0
  413. package/lib/summary/index.d.mts.map +1 -0
  414. package/lib/summary/index.mjs +16 -0
  415. package/lib/summary/index.mjs.map +1 -0
  416. package/{dist/orderedClientElection.d.ts → lib/summary/orderedClientElection.d.mts} +41 -22
  417. package/lib/summary/orderedClientElection.d.mts.map +1 -0
  418. package/lib/{orderedClientElection.js → summary/orderedClientElection.mjs} +95 -79
  419. package/lib/summary/orderedClientElection.mjs.map +1 -0
  420. package/{dist/runWhileConnectedCoordinator.d.ts → lib/summary/runWhileConnectedCoordinator.d.mts} +9 -3
  421. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +1 -0
  422. package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.mjs} +12 -10
  423. package/lib/summary/runWhileConnectedCoordinator.mjs.map +1 -0
  424. package/lib/summary/runningSummarizer.d.mts +128 -0
  425. package/lib/summary/runningSummarizer.d.mts.map +1 -0
  426. package/lib/summary/runningSummarizer.mjs +675 -0
  427. package/lib/summary/runningSummarizer.mjs.map +1 -0
  428. package/lib/{summarizer.d.ts → summary/summarizer.d.mts} +20 -36
  429. package/lib/summary/summarizer.d.mts.map +1 -0
  430. package/lib/summary/summarizer.mjs +257 -0
  431. package/lib/summary/summarizer.mjs.map +1 -0
  432. package/{dist/summarizerClientElection.d.ts → lib/summary/summarizerClientElection.d.mts} +6 -6
  433. package/lib/summary/summarizerClientElection.d.mts.map +1 -0
  434. package/lib/{summarizerClientElection.js → summary/summarizerClientElection.mjs} +14 -45
  435. package/lib/summary/summarizerClientElection.mjs.map +1 -0
  436. package/{dist/summarizerHeuristics.d.ts → lib/summary/summarizerHeuristics.d.mts} +29 -7
  437. package/lib/summary/summarizerHeuristics.d.mts.map +1 -0
  438. package/lib/summary/summarizerHeuristics.mjs +151 -0
  439. package/lib/summary/summarizerHeuristics.mjs.map +1 -0
  440. package/lib/summary/summarizerNode/index.d.mts +8 -0
  441. package/lib/summary/summarizerNode/index.d.mts.map +1 -0
  442. package/lib/summary/summarizerNode/index.mjs +7 -0
  443. package/lib/summary/summarizerNode/index.mjs.map +1 -0
  444. package/lib/summary/summarizerNode/summarizerNode.d.mts +167 -0
  445. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +1 -0
  446. package/lib/summary/summarizerNode/summarizerNode.mjs +521 -0
  447. package/lib/summary/summarizerNode/summarizerNode.mjs.map +1 -0
  448. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts +121 -0
  449. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +1 -0
  450. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs +123 -0
  451. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +1 -0
  452. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts +153 -0
  453. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +1 -0
  454. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs +370 -0
  455. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +1 -0
  456. package/{dist/summarizerTypes.d.ts → lib/summary/summarizerTypes.d.mts} +234 -84
  457. package/lib/summary/summarizerTypes.d.mts.map +1 -0
  458. package/lib/summary/summarizerTypes.mjs +6 -0
  459. package/lib/summary/summarizerTypes.mjs.map +1 -0
  460. package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.mts} +23 -5
  461. package/lib/summary/summaryCollection.d.mts.map +1 -0
  462. package/lib/{summaryCollection.js → summary/summaryCollection.mjs} +76 -45
  463. package/lib/summary/summaryCollection.mjs.map +1 -0
  464. package/{dist/summaryFormat.d.ts → lib/summary/summaryFormat.d.mts} +25 -30
  465. package/lib/summary/summaryFormat.d.mts.map +1 -0
  466. package/lib/{summaryFormat.js → summary/summaryFormat.mjs} +30 -26
  467. package/lib/summary/summaryFormat.mjs.map +1 -0
  468. package/lib/summary/summaryGenerator.d.mts +127 -0
  469. package/lib/summary/summaryGenerator.d.mts.map +1 -0
  470. package/lib/{summaryGenerator.js → summary/summaryGenerator.mjs} +153 -67
  471. package/lib/summary/summaryGenerator.mjs.map +1 -0
  472. package/{dist/summaryManager.d.ts → lib/summary/summaryManager.d.mts} +15 -13
  473. package/lib/summary/summaryManager.d.mts.map +1 -0
  474. package/lib/{summaryManager.js → summary/summaryManager.mjs} +94 -51
  475. package/lib/summary/summaryManager.mjs.map +1 -0
  476. package/lib/{throttler.d.ts → throttler.d.mts} +2 -2
  477. package/lib/throttler.d.mts.map +1 -0
  478. package/lib/{throttler.js → throttler.mjs} +21 -21
  479. package/lib/throttler.mjs.map +1 -0
  480. package/package.json +174 -73
  481. package/prettier.config.cjs +8 -0
  482. package/src/batchTracker.ts +60 -55
  483. package/src/blobManager.ts +937 -294
  484. package/src/connectionTelemetry.ts +342 -252
  485. package/src/containerHandleContext.ts +27 -29
  486. package/src/containerRuntime.ts +3879 -3143
  487. package/src/dataStore.ts +170 -140
  488. package/src/dataStoreContext.ts +1166 -986
  489. package/src/dataStoreContexts.ts +176 -163
  490. package/src/dataStoreRegistry.ts +29 -21
  491. package/src/dataStores.ts +921 -678
  492. package/src/deltaManagerProxyBase.ts +111 -0
  493. package/src/deltaManagerSummarizerProxy.ts +49 -0
  494. package/src/deltaScheduler.ts +161 -156
  495. package/src/error.ts +21 -0
  496. package/src/gc/garbageCollection.md +106 -0
  497. package/src/gc/garbageCollection.ts +1153 -0
  498. package/src/gc/gcConfigs.ts +216 -0
  499. package/src/gc/gcDefinitions.ts +502 -0
  500. package/src/gc/gcHelpers.ts +284 -0
  501. package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
  502. package/src/gc/gcSummaryDefinitions.ts +54 -0
  503. package/src/gc/gcSummaryStateTracker.ts +299 -0
  504. package/src/gc/gcTelemetry.ts +423 -0
  505. package/src/gc/gcUnreferencedStateTracker.ts +153 -0
  506. package/src/gc/index.ts +59 -0
  507. package/src/index.ts +101 -74
  508. package/src/messageTypes.ts +238 -0
  509. package/src/metadata.ts +26 -0
  510. package/src/opLifecycle/README.md +321 -0
  511. package/src/opLifecycle/batchManager.ts +179 -0
  512. package/src/opLifecycle/definitions.ts +89 -0
  513. package/src/opLifecycle/index.ts +19 -0
  514. package/src/opLifecycle/opCompressor.ts +99 -0
  515. package/src/opLifecycle/opDecompressor.ts +190 -0
  516. package/src/opLifecycle/opGroupingManager.ts +133 -0
  517. package/src/opLifecycle/opSplitter.ts +279 -0
  518. package/src/opLifecycle/outbox.ts +471 -0
  519. package/src/opLifecycle/remoteMessageProcessor.ts +175 -0
  520. package/src/opProperties.ts +21 -0
  521. package/src/packageVersion.ts +1 -1
  522. package/src/pendingStateManager.ts +396 -465
  523. package/src/scheduleManager.ts +358 -0
  524. package/src/storageServiceWithAttachBlobs.ts +38 -0
  525. package/src/summary/index.ts +109 -0
  526. package/src/summary/orderedClientElection.ts +571 -0
  527. package/src/summary/runWhileConnectedCoordinator.ts +117 -0
  528. package/src/summary/runningSummarizer.ts +920 -0
  529. package/src/summary/summarizer.ts +352 -0
  530. package/src/summary/summarizerClientElection.ts +140 -0
  531. package/src/summary/summarizerHeuristics.ts +227 -0
  532. package/src/summary/summarizerNode/index.ts +12 -0
  533. package/src/summary/summarizerNode/summarizerNode.ts +725 -0
  534. package/src/summary/summarizerNode/summarizerNodeUtils.ts +206 -0
  535. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +571 -0
  536. package/src/summary/summarizerTypes.ts +631 -0
  537. package/src/summary/summaryCollection.ts +474 -0
  538. package/src/summary/summaryFormat.ts +249 -0
  539. package/src/summary/summaryGenerator.ts +539 -0
  540. package/src/summary/summaryManager.ts +452 -0
  541. package/src/throttler.ts +131 -122
  542. package/tsc-multi.test.json +4 -0
  543. package/tsconfig.json +11 -13
  544. package/dist/batchTracker.js.map +0 -1
  545. package/dist/blobManager.js +0 -249
  546. package/dist/blobManager.js.map +0 -1
  547. package/dist/connectionTelemetry.js +0 -178
  548. package/dist/connectionTelemetry.js.map +0 -1
  549. package/dist/containerHandleContext.js.map +0 -1
  550. package/dist/containerRuntime.js +0 -2174
  551. package/dist/containerRuntime.js.map +0 -1
  552. package/dist/dataStore.js.map +0 -1
  553. package/dist/dataStoreContext.js.map +0 -1
  554. package/dist/dataStoreContexts.js.map +0 -1
  555. package/dist/dataStoreRegistry.js.map +0 -1
  556. package/dist/dataStores.js.map +0 -1
  557. package/dist/deltaScheduler.js.map +0 -1
  558. package/dist/garbageCollection.d.ts +0 -319
  559. package/dist/garbageCollection.d.ts.map +0 -1
  560. package/dist/garbageCollection.js +0 -993
  561. package/dist/garbageCollection.js.map +0 -1
  562. package/dist/index.js +0 -33
  563. package/dist/index.js.map +0 -1
  564. package/dist/opTelemetry.d.ts +0 -22
  565. package/dist/opTelemetry.d.ts.map +0 -1
  566. package/dist/opTelemetry.js +0 -60
  567. package/dist/opTelemetry.js.map +0 -1
  568. package/dist/orderedClientElection.d.ts.map +0 -1
  569. package/dist/orderedClientElection.js.map +0 -1
  570. package/dist/packageVersion.js.map +0 -1
  571. package/dist/pendingStateManager.js +0 -346
  572. package/dist/pendingStateManager.js.map +0 -1
  573. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  574. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  575. package/dist/runningSummarizer.d.ts +0 -93
  576. package/dist/runningSummarizer.d.ts.map +0 -1
  577. package/dist/runningSummarizer.js +0 -384
  578. package/dist/runningSummarizer.js.map +0 -1
  579. package/dist/serializedSnapshotStorage.d.ts +0 -58
  580. package/dist/serializedSnapshotStorage.d.ts.map +0 -1
  581. package/dist/serializedSnapshotStorage.js +0 -108
  582. package/dist/serializedSnapshotStorage.js.map +0 -1
  583. package/dist/summarizer.d.ts.map +0 -1
  584. package/dist/summarizer.js +0 -348
  585. package/dist/summarizer.js.map +0 -1
  586. package/dist/summarizerClientElection.d.ts.map +0 -1
  587. package/dist/summarizerClientElection.js.map +0 -1
  588. package/dist/summarizerHandle.d.ts +0 -12
  589. package/dist/summarizerHandle.d.ts.map +0 -1
  590. package/dist/summarizerHandle.js +0 -22
  591. package/dist/summarizerHandle.js.map +0 -1
  592. package/dist/summarizerHeuristics.d.ts.map +0 -1
  593. package/dist/summarizerHeuristics.js +0 -84
  594. package/dist/summarizerHeuristics.js.map +0 -1
  595. package/dist/summarizerTypes.d.ts.map +0 -1
  596. package/dist/summarizerTypes.js.map +0 -1
  597. package/dist/summaryCollection.d.ts.map +0 -1
  598. package/dist/summaryCollection.js.map +0 -1
  599. package/dist/summaryFormat.d.ts.map +0 -1
  600. package/dist/summaryFormat.js.map +0 -1
  601. package/dist/summaryGenerator.d.ts.map +0 -1
  602. package/dist/summaryGenerator.js.map +0 -1
  603. package/dist/summaryManager.d.ts.map +0 -1
  604. package/dist/summaryManager.js.map +0 -1
  605. package/dist/throttler.js.map +0 -1
  606. package/garbageCollection.md +0 -41
  607. package/lib/batchTracker.d.ts.map +0 -1
  608. package/lib/batchTracker.js.map +0 -1
  609. package/lib/blobManager.d.ts +0 -95
  610. package/lib/blobManager.d.ts.map +0 -1
  611. package/lib/blobManager.js +0 -244
  612. package/lib/blobManager.js.map +0 -1
  613. package/lib/connectionTelemetry.d.ts.map +0 -1
  614. package/lib/connectionTelemetry.js +0 -174
  615. package/lib/connectionTelemetry.js.map +0 -1
  616. package/lib/containerHandleContext.d.ts.map +0 -1
  617. package/lib/containerHandleContext.js.map +0 -1
  618. package/lib/containerRuntime.d.ts +0 -616
  619. package/lib/containerRuntime.d.ts.map +0 -1
  620. package/lib/containerRuntime.js +0 -2166
  621. package/lib/containerRuntime.js.map +0 -1
  622. package/lib/dataStore.d.ts.map +0 -1
  623. package/lib/dataStore.js.map +0 -1
  624. package/lib/dataStoreContext.d.ts.map +0 -1
  625. package/lib/dataStoreContext.js.map +0 -1
  626. package/lib/dataStoreContexts.d.ts.map +0 -1
  627. package/lib/dataStoreContexts.js.map +0 -1
  628. package/lib/dataStoreRegistry.d.ts.map +0 -1
  629. package/lib/dataStoreRegistry.js.map +0 -1
  630. package/lib/dataStores.d.ts.map +0 -1
  631. package/lib/dataStores.js.map +0 -1
  632. package/lib/deltaScheduler.d.ts.map +0 -1
  633. package/lib/deltaScheduler.js.map +0 -1
  634. package/lib/garbageCollection.d.ts +0 -319
  635. package/lib/garbageCollection.d.ts.map +0 -1
  636. package/lib/garbageCollection.js +0 -989
  637. package/lib/garbageCollection.js.map +0 -1
  638. package/lib/index.d.ts +0 -14
  639. package/lib/index.d.ts.map +0 -1
  640. package/lib/index.js +0 -13
  641. package/lib/index.js.map +0 -1
  642. package/lib/opTelemetry.d.ts +0 -22
  643. package/lib/opTelemetry.d.ts.map +0 -1
  644. package/lib/opTelemetry.js +0 -56
  645. package/lib/opTelemetry.js.map +0 -1
  646. package/lib/orderedClientElection.d.ts.map +0 -1
  647. package/lib/orderedClientElection.js.map +0 -1
  648. package/lib/packageVersion.js.map +0 -1
  649. package/lib/pendingStateManager.d.ts.map +0 -1
  650. package/lib/pendingStateManager.js +0 -339
  651. package/lib/pendingStateManager.js.map +0 -1
  652. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  653. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  654. package/lib/runningSummarizer.d.ts +0 -93
  655. package/lib/runningSummarizer.d.ts.map +0 -1
  656. package/lib/runningSummarizer.js +0 -380
  657. package/lib/runningSummarizer.js.map +0 -1
  658. package/lib/serializedSnapshotStorage.d.ts +0 -58
  659. package/lib/serializedSnapshotStorage.d.ts.map +0 -1
  660. package/lib/serializedSnapshotStorage.js +0 -104
  661. package/lib/serializedSnapshotStorage.js.map +0 -1
  662. package/lib/summarizer.d.ts.map +0 -1
  663. package/lib/summarizer.js +0 -342
  664. package/lib/summarizer.js.map +0 -1
  665. package/lib/summarizerClientElection.d.ts.map +0 -1
  666. package/lib/summarizerClientElection.js.map +0 -1
  667. package/lib/summarizerHandle.d.ts +0 -12
  668. package/lib/summarizerHandle.d.ts.map +0 -1
  669. package/lib/summarizerHandle.js +0 -18
  670. package/lib/summarizerHandle.js.map +0 -1
  671. package/lib/summarizerHeuristics.d.ts.map +0 -1
  672. package/lib/summarizerHeuristics.js +0 -79
  673. package/lib/summarizerHeuristics.js.map +0 -1
  674. package/lib/summarizerTypes.d.ts.map +0 -1
  675. package/lib/summarizerTypes.js +0 -9
  676. package/lib/summarizerTypes.js.map +0 -1
  677. package/lib/summaryCollection.d.ts.map +0 -1
  678. package/lib/summaryCollection.js.map +0 -1
  679. package/lib/summaryFormat.d.ts.map +0 -1
  680. package/lib/summaryFormat.js.map +0 -1
  681. package/lib/summaryGenerator.d.ts +0 -85
  682. package/lib/summaryGenerator.d.ts.map +0 -1
  683. package/lib/summaryGenerator.js.map +0 -1
  684. package/lib/summaryManager.d.ts.map +0 -1
  685. package/lib/summaryManager.js.map +0 -1
  686. package/lib/throttler.d.ts.map +0 -1
  687. package/lib/throttler.js.map +0 -1
  688. package/src/garbageCollection.ts +0 -1434
  689. package/src/opTelemetry.ts +0 -71
  690. package/src/orderedClientElection.ts +0 -511
  691. package/src/runWhileConnectedCoordinator.ts +0 -106
  692. package/src/runningSummarizer.ts +0 -550
  693. package/src/serializedSnapshotStorage.ts +0 -146
  694. package/src/summarizer.ts +0 -438
  695. package/src/summarizerClientElection.ts +0 -161
  696. package/src/summarizerHandle.ts +0 -21
  697. package/src/summarizerHeuristics.ts +0 -108
  698. package/src/summarizerTypes.ts +0 -462
  699. package/src/summaryCollection.ts +0 -406
  700. package/src/summaryFormat.ts +0 -239
  701. package/src/summaryGenerator.ts +0 -427
  702. package/src/summaryManager.ts +0 -368
  703. package/tsconfig.esnext.json +0 -7
@@ -2,35 +2,35 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { DataCorruptionError, extractSafePropertiesFromMessage } from "@fluidframework/container-utils";
6
5
  import { FluidObjectHandle } from "@fluidframework/datastore";
7
6
  import { channelsTreeName, CreateSummarizerNodeSource, } from "@fluidframework/runtime-definitions";
8
- import { convertSnapshotTreeToSummaryTree, convertToSummaryTree, create404Response, responseToException, SummaryTreeBuilder, } from "@fluidframework/runtime-utils";
9
- import { ChildLogger, LoggingError, TelemetryDataTag } from "@fluidframework/telemetry-utils";
7
+ import { convertSnapshotTreeToSummaryTree, convertToSummaryTree, create404Response, createResponseError, GCDataBuilder, responseToException, SummaryTreeBuilder, unpackChildNodesUsedRoutes, } from "@fluidframework/runtime-utils";
8
+ import { createChildMonitoringContext, DataCorruptionError, DataProcessingError, extractSafePropertiesFromMessage, LoggingError, tagCodeArtifacts, } from "@fluidframework/telemetry-utils";
10
9
  import { AttachState } from "@fluidframework/container-definitions";
11
- import { BlobCacheStorageService, buildSnapshotTree } from "@fluidframework/driver-utils";
12
- import { assert, Lazy, LazyPromise } from "@fluidframework/common-utils";
10
+ import { buildSnapshotTree } from "@fluidframework/driver-utils";
11
+ import { assert, Lazy } from "@fluidframework/core-utils";
13
12
  import { v4 as uuid } from "uuid";
14
- import { GCDataBuilder, unpackChildNodesUsedRoutes } from "@fluidframework/garbage-collector";
15
- import { DataStoreContexts } from "./dataStoreContexts";
16
- import { RemoteFluidDataStoreContext, LocalFluidDataStoreContext, createAttributesBlob, LocalDetachedFluidDataStoreContext, } from "./dataStoreContext";
17
- import { nonDataStorePaths, rootHasIsolatedChannels } from "./summaryFormat";
18
- import { isDataStoreAliasMessage } from "./dataStore";
19
- import { GCNodeType } from "./garbageCollection";
13
+ import { DataStoreContexts } from "./dataStoreContexts.mjs";
14
+ import { defaultRuntimeHeaderData } from "./containerRuntime.mjs";
15
+ import { RemoteFluidDataStoreContext, LocalFluidDataStoreContext, createAttributesBlob, LocalDetachedFluidDataStoreContext, } from "./dataStoreContext.mjs";
16
+ import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.mjs";
17
+ import { isDataStoreAliasMessage } from "./dataStore.mjs";
18
+ import { GCNodeType, disableDatastoreSweepKey } from "./gc/index.mjs";
19
+ import { nonDataStorePaths, rootHasIsolatedChannels } from "./summary/index.mjs";
20
20
  /**
21
21
  * This class encapsulates data store handling. Currently it is only used by the container runtime,
22
22
  * but eventually could be hosted on any channel once we formalize the channel api boundary.
23
23
  */
24
24
  export class DataStores {
25
- constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, getBaseGCDetails, gcNodeUpdated, aliasMap, writeGCDataAtRoot, contexts = new DataStoreContexts(baseLogger)) {
25
+ constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, contexts = new DataStoreContexts(baseLogger)) {
26
26
  this.baseSnapshot = baseSnapshot;
27
27
  this.runtime = runtime;
28
28
  this.submitAttachFn = submitAttachFn;
29
29
  this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
30
30
  this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
31
31
  this.gcNodeUpdated = gcNodeUpdated;
32
+ this.isDataStoreDeleted = isDataStoreDeleted;
32
33
  this.aliasMap = aliasMap;
33
- this.writeGCDataAtRoot = writeGCDataAtRoot;
34
34
  this.contexts = contexts;
35
35
  // Stores tracked by the Domain
36
36
  this.pendingAttach = new Map();
@@ -40,17 +40,10 @@ export class DataStores {
40
40
  // Stores the ids of new data stores between two GC runs. This is used to notify the garbage collector of new
41
41
  // root data stores that are added.
42
42
  this.dataStoresSinceLastGC = [];
43
+ this.pendingAliasMap = new Map();
43
44
  this.dispose = () => this.disposeOnce.value;
44
- this.logger = ChildLogger.create(baseLogger);
45
+ this.mc = createChildMonitoringContext({ logger: baseLogger });
45
46
  this.containerRuntimeHandle = new FluidObjectHandle(this.runtime, "/", this.runtime.IFluidHandleContext);
46
- const baseGCDetailsP = new LazyPromise(async () => {
47
- return getBaseGCDetails();
48
- });
49
- // Returns the base GC details for the data store with the given id.
50
- const dataStoreBaseGCDetails = async (dataStoreId) => {
51
- const baseGCDetails = await baseGCDetailsP;
52
- return baseGCDetails.get(dataStoreId);
53
- };
54
47
  // Extract stores stored inside the snapshot
55
48
  const fluidDataStores = new Map();
56
49
  if (baseSnapshot) {
@@ -71,13 +64,12 @@ export class DataStores {
71
64
  dataStoreContext = new RemoteFluidDataStoreContext({
72
65
  id: key,
73
66
  snapshotTree: value,
74
- getBaseGCDetails: async () => dataStoreBaseGCDetails(key),
75
67
  runtime: this.runtime,
76
68
  storage: this.runtime.storage,
77
69
  scope: this.runtime.scope,
78
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, { type: CreateSummarizerNodeSource.FromSummary }),
79
- writeGCDataAtRoot: this.writeGCDataAtRoot,
80
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
70
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
71
+ type: CreateSummarizerNodeSource.FromSummary,
72
+ }),
81
73
  });
82
74
  }
83
75
  else {
@@ -91,12 +83,12 @@ export class DataStores {
91
83
  runtime: this.runtime,
92
84
  storage: this.runtime.storage,
93
85
  scope: this.runtime.scope,
94
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, { type: CreateSummarizerNodeSource.FromSummary }),
86
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
87
+ type: CreateSummarizerNodeSource.FromSummary,
88
+ }),
95
89
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
96
90
  snapshotTree,
97
91
  isRootDataStore: undefined,
98
- writeGCDataAtRoot: this.writeGCDataAtRoot,
99
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
100
92
  });
101
93
  }
102
94
  this.contexts.addBoundOrRemoted(dataStoreContext);
@@ -106,17 +98,23 @@ export class DataStores {
106
98
  referencedDataStoreCount: fluidDataStores.size - unreferencedDataStoreCount,
107
99
  };
108
100
  }
109
- aliases() {
101
+ get aliases() {
110
102
  return this.aliasMap;
111
103
  }
104
+ get pendingAliases() {
105
+ return this.pendingAliasMap;
106
+ }
107
+ async waitIfPendingAlias(maybeAlias) {
108
+ const pendingAliasPromise = this.pendingAliases.get(maybeAlias);
109
+ return pendingAliasPromise ?? "Success";
110
+ }
112
111
  processAttachMessage(message, local) {
113
- var _a, _b;
114
112
  const attachMessage = message.contents;
115
113
  this.dataStoresSinceLastGC.push(attachMessage.id);
116
114
  // The local object has already been attached
117
115
  if (local) {
118
116
  assert(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
119
- (_a = this.contexts.get(attachMessage.id)) === null || _a === void 0 ? void 0 : _a.emit("attached");
117
+ this.contexts.get(attachMessage.id)?.emit("attached");
120
118
  this.pendingAttach.delete(attachMessage.id);
121
119
  return;
122
120
  }
@@ -125,16 +123,16 @@ export class DataStores {
125
123
  // TODO: dataStoreId may require a different tag from PackageData #7488
126
124
  const error = new DataCorruptionError(
127
125
  // pre-0.58 error message: duplicateDataStoreCreatedWithExistingId
128
- "Duplicate DataStore created with existing id", Object.assign(Object.assign({}, extractSafePropertiesFromMessage(message)), { dataStoreId: {
129
- value: attachMessage.id,
130
- tag: TelemetryDataTag.PackageData,
131
- } }));
126
+ "Duplicate DataStore created with existing id", {
127
+ ...extractSafePropertiesFromMessage(message),
128
+ ...tagCodeArtifacts({ dataStoreId: attachMessage.id }),
129
+ });
132
130
  throw error;
133
131
  }
134
- const flatBlobs = new Map();
132
+ const flatAttachBlobs = new Map();
135
133
  let snapshotTree;
136
134
  if (attachMessage.snapshot) {
137
- snapshotTree = buildSnapshotTree(attachMessage.snapshot.entries, flatBlobs);
135
+ snapshotTree = buildSnapshotTree(attachMessage.snapshot.entries, flatAttachBlobs);
138
136
  }
139
137
  // Include the type of attach message which is the pkg of the store to be
140
138
  // used by RemoteFluidDataStoreContext in case it is not in the snapshot.
@@ -142,20 +140,16 @@ export class DataStores {
142
140
  const remoteFluidDataStoreContext = new RemoteFluidDataStoreContext({
143
141
  id: attachMessage.id,
144
142
  snapshotTree,
145
- // New data stores begin with empty GC details since GC hasn't run on them yet.
146
- getBaseGCDetails: async () => { return {}; },
147
143
  runtime: this.runtime,
148
- storage: new BlobCacheStorageService(this.runtime.storage, flatBlobs),
144
+ storage: new StorageServiceWithAttachBlobs(this.runtime.storage, flatAttachBlobs),
149
145
  scope: this.runtime.scope,
150
146
  createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
151
147
  type: CreateSummarizerNodeSource.FromAttach,
152
148
  sequenceNumber: message.sequenceNumber,
153
- snapshot: (_b = attachMessage.snapshot) !== null && _b !== void 0 ? _b : {
154
- entries: [createAttributesBlob(pkg, true /* isRootDataStore */, this.runtime.disableIsolatedChannels)],
149
+ snapshot: attachMessage.snapshot ?? {
150
+ entries: [createAttributesBlob(pkg, true /* isRootDataStore */)],
155
151
  },
156
152
  }),
157
- writeGCDataAtRoot: this.writeGCDataAtRoot,
158
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
159
153
  pkg,
160
154
  });
161
155
  this.contexts.addBoundOrRemoted(remoteFluidDataStoreContext);
@@ -163,7 +157,9 @@ export class DataStores {
163
157
  processAliasMessage(message, localOpMetadata, local) {
164
158
  const aliasMessage = message.contents;
165
159
  if (!isDataStoreAliasMessage(aliasMessage)) {
166
- throw new DataCorruptionError("malformedDataStoreAliasMessage", Object.assign({}, extractSafePropertiesFromMessage(message)));
160
+ throw new DataCorruptionError("malformedDataStoreAliasMessage", {
161
+ ...extractSafePropertiesFromMessage(message),
162
+ });
167
163
  }
168
164
  const resolve = localOpMetadata;
169
165
  const aliasResult = this.processAliasMessageCore(aliasMessage);
@@ -176,8 +172,13 @@ export class DataStores {
176
172
  return false;
177
173
  }
178
174
  const context = this.contexts.get(aliasMessage.internalId);
175
+ // If the data store has been deleted, log an error and ignore this message. This helps prevent document
176
+ // corruption in case a deleted data store accidentally submitted a signal.
177
+ if (this.checkAndLogIfDeleted(aliasMessage.internalId, context, "Changed", "processAliasMessageCore")) {
178
+ return false;
179
+ }
179
180
  if (context === undefined) {
180
- this.logger.sendErrorEvent({
181
+ this.mc.logger.sendErrorEvent({
181
182
  eventName: "AliasFluidDataStoreNotFound",
182
183
  fluidDataStoreId: aliasMessage.internalId,
183
184
  });
@@ -222,17 +223,17 @@ export class DataStores {
222
223
  runtime: this.runtime,
223
224
  storage: this.runtime.storage,
224
225
  scope: this.runtime.scope,
225
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, { type: CreateSummarizerNodeSource.Local }),
226
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
227
+ type: CreateSummarizerNodeSource.Local,
228
+ }),
226
229
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
227
230
  snapshotTree: undefined,
228
231
  isRootDataStore: isRoot,
229
- writeGCDataAtRoot: this.writeGCDataAtRoot,
230
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
231
232
  });
232
233
  this.contexts.addUnbound(context);
233
234
  return context;
234
235
  }
235
- _createFluidDataStoreContext(pkg, id, isRoot, props) {
236
+ _createFluidDataStoreContext(pkg, id, props) {
236
237
  assert(!id.includes("/"), 0x30d /* Id cannot contain slashes */);
237
238
  const context = new LocalFluidDataStoreContext({
238
239
  id,
@@ -240,33 +241,53 @@ export class DataStores {
240
241
  runtime: this.runtime,
241
242
  storage: this.runtime.storage,
242
243
  scope: this.runtime.scope,
243
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, { type: CreateSummarizerNodeSource.Local }),
244
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
245
+ type: CreateSummarizerNodeSource.Local,
246
+ }),
244
247
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
245
248
  snapshotTree: undefined,
246
- isRootDataStore: isRoot,
247
- writeGCDataAtRoot: this.writeGCDataAtRoot,
248
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
249
+ isRootDataStore: false,
249
250
  createProps: props,
250
251
  });
251
252
  this.contexts.addUnbound(context);
252
253
  return context;
253
254
  }
254
- get disposed() { return this.disposeOnce.evaluated; }
255
- resubmitDataStoreOp(content, localOpMetadata) {
256
- const envelope = content;
255
+ get disposed() {
256
+ return this.disposeOnce.evaluated;
257
+ }
258
+ resubmitDataStoreOp(envelope, localOpMetadata) {
257
259
  const context = this.contexts.get(envelope.address);
260
+ // If the data store has been deleted, log an error and throw an error. If there are local changes for a
261
+ // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
262
+ if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "resubmitDataStoreOp")) {
263
+ throw new DataCorruptionError("Context is deleted!", {
264
+ callSite: "resubmitDataStoreOp",
265
+ ...tagCodeArtifacts({ id: envelope.address }),
266
+ });
267
+ }
258
268
  assert(!!context, 0x160 /* "There should be a store context for the op" */);
259
269
  context.reSubmit(envelope.contents, localOpMetadata);
260
270
  }
261
- rollbackDataStoreOp(content, localOpMetadata) {
262
- const envelope = content;
271
+ rollbackDataStoreOp(envelope, localOpMetadata) {
263
272
  const context = this.contexts.get(envelope.address);
273
+ // If the data store has been deleted, log an error and throw an error. If there are local changes for a
274
+ // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
275
+ if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "rollbackDataStoreOp")) {
276
+ throw new DataCorruptionError("Context is deleted!", {
277
+ callSite: "rollbackDataStoreOp",
278
+ ...tagCodeArtifacts({ id: envelope.address }),
279
+ });
280
+ }
264
281
  assert(!!context, 0x2e8 /* "There should be a store context for the op" */);
265
282
  context.rollback(envelope.contents, localOpMetadata);
266
283
  }
267
- async applyStashedOp(content) {
268
- const envelope = content;
284
+ async applyStashedOp(envelope) {
269
285
  const context = this.contexts.get(envelope.address);
286
+ // If the data store has been deleted, log an error and ignore this message. This helps prevent document
287
+ // corruption in case the data store that stashed the op is deleted.
288
+ if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "applyStashedOp")) {
289
+ return undefined;
290
+ }
270
291
  assert(!!context, 0x161 /* "There should be a store context for the op" */);
271
292
  return context.applyStashedOp(envelope.contents);
272
293
  }
@@ -277,16 +298,27 @@ export class DataStores {
277
298
  }
278
299
  processFluidDataStoreOp(message, local, localMessageMetadata) {
279
300
  const envelope = message.contents;
280
- const transformed = Object.assign(Object.assign({}, message), { contents: envelope.contents });
301
+ const transformed = { ...message, contents: envelope.contents };
281
302
  const context = this.contexts.get(envelope.address);
303
+ // If the data store has been deleted, log an error and ignore this message. This helps prevent document
304
+ // corruption in case a deleted data store accidentally submitted an op.
305
+ if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "processFluidDataStoreOp")) {
306
+ return;
307
+ }
282
308
  assert(!!context, 0x162 /* "There should be a store context for the op" */);
283
309
  context.process(transformed, local, localMessageMetadata);
284
310
  // Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
285
311
  // being used.
286
312
  this.gcNodeUpdated(`/${envelope.address}`, message.timestamp, context.isLoaded ? context.packagePath : undefined);
287
313
  }
288
- async getDataStore(id, wait) {
289
- const context = await this.contexts.getBoundOrRemoted(id, wait);
314
+ async getDataStore(id, requestHeaderData) {
315
+ const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
316
+ if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStore", requestHeaderData)) {
317
+ // The requested data store has been deleted by gc. Create a 404 response exception.
318
+ const request = { url: id };
319
+ throw responseToException(createResponseError(404, "DataStore was deleted", request), request);
320
+ }
321
+ const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
290
322
  if (context === undefined) {
291
323
  // The requested data store does not exits. Throw a 404 response exception.
292
324
  const request = { url: id };
@@ -294,44 +326,85 @@ export class DataStores {
294
326
  }
295
327
  return context;
296
328
  }
297
- processSignal(address, message, local) {
298
- const context = this.contexts.get(address);
329
+ /**
330
+ * Returns the data store requested with the given id if available. Otherwise, returns undefined.
331
+ */
332
+ async getDataStoreIfAvailable(id, requestHeaderData) {
333
+ // If the data store has been deleted, log an error and return undefined.
334
+ if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStoreIfAvailable", requestHeaderData)) {
335
+ return undefined;
336
+ }
337
+ const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
338
+ const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
339
+ if (context === undefined) {
340
+ return undefined;
341
+ }
342
+ return context;
343
+ }
344
+ /**
345
+ * Checks if the data store has been deleted by GC. If so, log an error.
346
+ * @param id - The data store's id.
347
+ * @param context - The data store context.
348
+ * @param callSite - The function name this is called from.
349
+ * @param requestHeaderData - The request header information to log if the data store is deleted.
350
+ * @returns true if the data store is deleted. Otherwise, returns false.
351
+ */
352
+ checkAndLogIfDeleted(id, context, deletedLogSuffix, callSite, requestHeaderData) {
353
+ const dataStoreNodePath = `/${id}`;
354
+ if (!this.isDataStoreDeleted(dataStoreNodePath)) {
355
+ return false;
356
+ }
357
+ this.mc.logger.sendErrorEvent({
358
+ eventName: `GC_Deleted_DataStore_${deletedLogSuffix}`,
359
+ ...tagCodeArtifacts({ id }),
360
+ callSite,
361
+ headers: JSON.stringify(requestHeaderData),
362
+ exists: context !== undefined,
363
+ });
364
+ return true;
365
+ }
366
+ processSignal(fluidDataStoreId, message, local) {
367
+ const context = this.contexts.get(fluidDataStoreId);
368
+ // If the data store has been deleted, log an error and ignore this message. This helps prevent document
369
+ // corruption in case a deleted data store accidentally submitted a signal.
370
+ if (this.checkAndLogIfDeleted(fluidDataStoreId, context, "Changed", "processSignal")) {
371
+ return;
372
+ }
299
373
  if (!context) {
300
374
  // Attach message may not have been processed yet
301
375
  assert(!local, 0x163 /* "Missing datastore for local signal" */);
302
- this.logger.sendTelemetryEvent({
376
+ this.mc.logger.sendTelemetryEvent({
303
377
  eventName: "SignalFluidDataStoreNotFound",
304
- fluidDataStoreId: {
305
- value: address,
306
- tag: TelemetryDataTag.PackageData,
307
- },
378
+ ...tagCodeArtifacts({
379
+ fluidDataStoreId,
380
+ }),
308
381
  });
309
382
  return;
310
383
  }
311
384
  context.processSignal(message, local);
312
385
  }
313
386
  setConnectionState(connected, clientId) {
314
- for (const [fluidDataStore, context] of this.contexts) {
387
+ for (const [fluidDataStoreId, context] of this.contexts) {
315
388
  try {
316
389
  context.setConnectionState(connected, clientId);
317
390
  }
318
391
  catch (error) {
319
- this.logger.sendErrorEvent({
392
+ this.mc.logger.sendErrorEvent({
320
393
  eventName: "SetConnectionStateError",
321
394
  clientId,
322
- fluidDataStore,
395
+ ...tagCodeArtifacts({
396
+ fluidDataStoreId,
397
+ }),
398
+ details: JSON.stringify({
399
+ runtimeConnected: this.runtime.connected,
400
+ connected,
401
+ }),
323
402
  }, error);
324
403
  }
325
404
  }
326
405
  }
327
406
  setAttachState(attachState) {
328
- let eventName;
329
- if (attachState === AttachState.Attaching) {
330
- eventName = "attaching";
331
- }
332
- else {
333
- eventName = "attached";
334
- }
407
+ const eventName = attachState === AttachState.Attaching ? "attaching" : "attached";
335
408
  for (const [, context] of this.contexts) {
336
409
  // Fire only for bounded stores.
337
410
  if (!this.contexts.isNotBound(context.id)) {
@@ -347,10 +420,17 @@ export class DataStores {
347
420
  // Iterate over each store and ask it to snapshot
348
421
  await Promise.all(Array.from(this.contexts)
349
422
  .filter(([_, context]) => {
350
- // Summarizer works only with clients with no local changes!
351
- assert(context.attachState !== AttachState.Attaching, 0x165 /* "Summarizer cannot work if client has local changes" */);
423
+ // Summarizer works only with clients with no local changes. A data store in attaching
424
+ // state indicates an op was sent to attach a local data store, and the the attach op
425
+ // had not yet round tripped back to the client.
426
+ if (context.attachState === AttachState.Attaching) {
427
+ // Formerly assert 0x588
428
+ const error = DataProcessingError.create("Local data store detected in attaching state during summarize", "summarize");
429
+ throw error;
430
+ }
352
431
  return context.attachState === AttachState.Attached;
353
- }).map(async ([contextId, context]) => {
432
+ })
433
+ .map(async ([contextId, context]) => {
354
434
  const contextSummary = await context.summarize(fullTree, trackState, telemetryContext);
355
435
  summaryBuilder.addWithStats(contextId, contextSummary);
356
436
  }));
@@ -370,9 +450,9 @@ export class DataStores {
370
450
  // Take summary of bounded data stores only, make sure we haven't summarized them already
371
451
  // and no attach op has been fired for that data store because for loader versions <= 0.24
372
452
  // we set attach state as "attaching" before taking createNew summary.
373
- !(this.contexts.isNotBound(key)
374
- || builderTree[key]
375
- || this.attachOpFiredForDataStore.has(key)))
453
+ !(this.contexts.isNotBound(key) ||
454
+ builderTree[key] ||
455
+ this.attachOpFiredForDataStore.has(key)))
376
456
  .map(([key, value]) => {
377
457
  let dataStoreSummary;
378
458
  if (value.isLoaded) {
@@ -409,11 +489,15 @@ export class DataStores {
409
489
  }
410
490
  /**
411
491
  * Generates data used for garbage collection. It does the following:
492
+ *
412
493
  * 1. Calls into each child data store context to get its GC data.
494
+ *
413
495
  * 2. Prefixes the child context's id to the GC nodes in the child's GC data. This makes sure that the node can be
414
- * identified as belonging to the child.
496
+ * identified as belonging to the child.
497
+ *
415
498
  * 3. Adds a GC node for this channel to the nodes received from the children. All these nodes together represent
416
- * the GC data of this channel.
499
+ * the GC data of this channel.
500
+ *
417
501
  * @param fullGC - true to bypass optimizations and force full generation of GC data.
418
502
  */
419
503
  async getGCData(fullGC = false) {
@@ -421,10 +505,17 @@ export class DataStores {
421
505
  // Iterate over each store and get their GC data.
422
506
  await Promise.all(Array.from(this.contexts)
423
507
  .filter(([_, context]) => {
424
- // Get GC data only for attached contexts. Detached contexts are not connected in the GC reference
425
- // graph so any references they might have won't be connected as well.
508
+ // Summarizer client and hence GC works only with clients with no local changes. A data store in
509
+ // attaching state indicates an op was sent to attach a local data store, and the the attach op
510
+ // had not yet round tripped back to the client.
511
+ // Formerly assert 0x589
512
+ if (context.attachState === AttachState.Attaching) {
513
+ const error = DataProcessingError.create("Local data store detected in attaching state while running GC", "getGCData");
514
+ throw error;
515
+ }
426
516
  return context.attachState === AttachState.Attached;
427
- }).map(async ([contextId, context]) => {
517
+ })
518
+ .map(async ([contextId, context]) => {
428
519
  const contextGCData = await context.getGCData(fullGC);
429
520
  // Prefix the child's id to the ids of its GC nodes so they can be identified as belonging to the child.
430
521
  // This also gradually builds the id of each node to be a path from the root.
@@ -437,11 +528,8 @@ export class DataStores {
437
528
  /**
438
529
  * After GC has run, called to notify this Container's data stores of routes that are used in it.
439
530
  * @param usedRoutes - The routes that are used in all data stores in this Container.
440
- * @param gcTimestamp - The time when GC was run that generated these used routes. If any node node becomes
441
- * unreferenced as part of this GC run, this should be used to update the time when it happens.
442
531
  */
443
- updateUsedRoutes(usedRoutes, gcTimestamp) {
444
- var _a;
532
+ updateUsedRoutes(usedRoutes) {
445
533
  // Get a map of data store ids to routes used in it.
446
534
  const usedDataStoreRoutes = unpackChildNodesUsedRoutes(usedRoutes);
447
535
  // Verify that the used routes are correct.
@@ -450,15 +538,14 @@ export class DataStores {
450
538
  }
451
539
  // Update the used routes in each data store. Used routes is empty for unused data stores.
452
540
  for (const [contextId, context] of this.contexts) {
453
- context.updateUsedRoutes((_a = usedDataStoreRoutes.get(contextId)) !== null && _a !== void 0 ? _a : [], gcTimestamp);
541
+ context.updateUsedRoutes(usedDataStoreRoutes.get(contextId) ?? []);
454
542
  }
455
543
  }
456
544
  /**
457
- * When running GC in test mode, this is called to delete objects whose routes are unused. This enables testing
458
- * scenarios with accessing deleted content.
545
+ * This is called to update objects whose routes are unused. The unused objects are deleted.
459
546
  * @param unusedRoutes - The routes that are unused in all data stores in this Container.
460
547
  */
461
- deleteUnusedRoutes(unusedRoutes) {
548
+ updateUnusedRoutes(unusedRoutes) {
462
549
  for (const route of unusedRoutes) {
463
550
  const pathParts = route.split("/");
464
551
  // Delete data store only if its route (/datastoreId) is in unusedRoutes. We don't want to delete a data
@@ -474,6 +561,66 @@ export class DataStores {
474
561
  this.deleteChildSummarizerNodeFn(dataStoreId);
475
562
  }
476
563
  }
564
+ /**
565
+ * Delete data stores and its objects that are sweep ready.
566
+ * @param sweepReadyDataStoreRoutes - The routes of data stores and its objects that are sweep ready and should
567
+ * be deleted.
568
+ * @returns The routes of data stores and its objects that were deleted.
569
+ */
570
+ deleteSweepReadyNodes(sweepReadyDataStoreRoutes) {
571
+ // If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
572
+ if (this.mc.config.getBoolean(disableDatastoreSweepKey) === true) {
573
+ return [];
574
+ }
575
+ for (const route of sweepReadyDataStoreRoutes) {
576
+ const pathParts = route.split("/");
577
+ const dataStoreId = pathParts[1];
578
+ // Ignore sub-data store routes because a data store and its sub-routes are deleted together, so, we only
579
+ // need to delete the data store.
580
+ if (pathParts.length > 2) {
581
+ continue;
582
+ }
583
+ const dataStoreContext = this.contexts.get(dataStoreId);
584
+ if (dataStoreContext === undefined) {
585
+ this.mc.logger.sendErrorEvent({
586
+ eventName: "DeletedDataStoreNotFound",
587
+ ...tagCodeArtifacts({ id: dataStoreId }),
588
+ details: {
589
+ alreadyDeleted: this.isDataStoreDeleted(dataStoreId),
590
+ },
591
+ });
592
+ continue;
593
+ }
594
+ dataStoreContext.delete();
595
+ // Delete the contexts of sweep ready data stores.
596
+ this.contexts.delete(dataStoreId);
597
+ // Delete the summarizer node of the sweep ready data stores.
598
+ this.deleteChildSummarizerNodeFn(dataStoreId);
599
+ }
600
+ return Array.from(sweepReadyDataStoreRoutes);
601
+ }
602
+ /**
603
+ * This is called to update objects whose routes are tombstones. Tombstoned datastore contexts enable testing
604
+ * scenarios with accessing deleted content without actually deleting content from summaries.
605
+ * @param tombstonedRoutes - The routes that are tombstones in all data stores in this Container.
606
+ */
607
+ updateTombstonedRoutes(tombstonedRoutes) {
608
+ const tombstonedDataStoresSet = new Set();
609
+ for (const route of tombstonedRoutes) {
610
+ const pathParts = route.split("/");
611
+ // Tombstone data store only if its route (/datastoreId) is directly in tombstoneRoutes.
612
+ if (pathParts.length > 2) {
613
+ continue;
614
+ }
615
+ const dataStoreId = pathParts[1];
616
+ assert(this.contexts.has(dataStoreId), 0x510 /* No data store with specified id */);
617
+ tombstonedDataStoresSet.add(dataStoreId);
618
+ }
619
+ // Update the used routes in each data store. Used routes is empty for unused data stores.
620
+ for (const [contextId, context] of this.contexts) {
621
+ context.setTombstone(tombstonedDataStoresSet.has(contextId));
622
+ }
623
+ }
477
624
  /**
478
625
  * Returns the outbound routes of this channel. Only root data stores are considered referenced and their paths are
479
626
  * part of outbound routes.
@@ -492,11 +639,10 @@ export class DataStores {
492
639
  * Called by GC to retrieve the package path of a data store node with the given path.
493
640
  */
494
641
  async getDataStorePackagePath(nodePath) {
495
- var _a;
496
642
  // If the node belongs to a data store, return its package path. For DDSes, we return the package path of the
497
643
  // data store that contains it.
498
644
  const context = this.contexts.get(nodePath.split("/")[1]);
499
- return (_a = (await (context === null || context === void 0 ? void 0 : context.getInitialSnapshotDetails()))) === null || _a === void 0 ? void 0 : _a.pkg;
645
+ return (await context?.getInitialSnapshotDetails())?.pkg;
500
646
  }
501
647
  /**
502
648
  * Called by GC to determine if a node is for a data store or for an object within a data store (for e.g. DDS).
@@ -532,7 +678,10 @@ export function getSummaryForDatastores(snapshot, metadata) {
532
678
  datastoresTrees[key] = value;
533
679
  }
534
680
  }
535
- return Object.assign(Object.assign({}, snapshot), { trees: datastoresTrees });
681
+ return {
682
+ ...snapshot,
683
+ trees: datastoresTrees,
684
+ };
536
685
  }
537
686
  }
538
- //# sourceMappingURL=dataStores.js.map
687
+ //# sourceMappingURL=dataStores.mjs.map