@fluidframework/container-runtime 2.0.0-dev.2.3.0.115467 → 2.0.0-dev.4.1.0.148229

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 (563) hide show
  1. package/.eslintrc.js +21 -10
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/batchTracker.d.ts +1 -2
  5. package/dist/batchTracker.d.ts.map +1 -1
  6. package/dist/batchTracker.js +2 -1
  7. package/dist/batchTracker.js.map +1 -1
  8. package/dist/blobManager.d.ts +74 -42
  9. package/dist/blobManager.d.ts.map +1 -1
  10. package/dist/blobManager.js +321 -152
  11. package/dist/blobManager.js.map +1 -1
  12. package/dist/connectionTelemetry.d.ts.map +1 -1
  13. package/dist/connectionTelemetry.js +11 -9
  14. package/dist/connectionTelemetry.js.map +1 -1
  15. package/dist/containerHandleContext.d.ts.map +1 -1
  16. package/dist/containerHandleContext.js +3 -1
  17. package/dist/containerHandleContext.js.map +1 -1
  18. package/dist/containerRuntime.d.ts +148 -114
  19. package/dist/containerRuntime.d.ts.map +1 -1
  20. package/dist/containerRuntime.js +534 -342
  21. package/dist/containerRuntime.js.map +1 -1
  22. package/dist/dataStore.d.ts.map +1 -1
  23. package/dist/dataStore.js +11 -9
  24. package/dist/dataStore.js.map +1 -1
  25. package/dist/dataStoreContext.d.ts +40 -13
  26. package/dist/dataStoreContext.d.ts.map +1 -1
  27. package/dist/dataStoreContext.js +146 -66
  28. package/dist/dataStoreContext.js.map +1 -1
  29. package/dist/dataStoreContexts.d.ts.map +1 -1
  30. package/dist/dataStoreContexts.js +7 -3
  31. package/dist/dataStoreContexts.js.map +1 -1
  32. package/dist/dataStoreRegistry.d.ts.map +1 -1
  33. package/dist/dataStoreRegistry.js +3 -1
  34. package/dist/dataStoreRegistry.js.map +1 -1
  35. package/dist/dataStores.d.ts +39 -12
  36. package/dist/dataStores.d.ts.map +1 -1
  37. package/dist/dataStores.js +164 -76
  38. package/dist/dataStores.js.map +1 -1
  39. package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
  40. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
  41. package/dist/deltaManagerSummarizerProxy.js +40 -0
  42. package/dist/deltaManagerSummarizerProxy.js.map +1 -0
  43. package/dist/deltaScheduler.d.ts.map +1 -1
  44. package/dist/deltaScheduler.js +8 -3
  45. package/dist/deltaScheduler.js.map +1 -1
  46. package/dist/gc/garbageCollection.d.ts +204 -0
  47. package/dist/gc/garbageCollection.d.ts.map +1 -0
  48. package/dist/gc/garbageCollection.js +926 -0
  49. package/dist/gc/garbageCollection.js.map +1 -0
  50. package/dist/gc/gcConfigs.d.ts +22 -0
  51. package/dist/gc/gcConfigs.d.ts.map +1 -0
  52. package/dist/gc/gcConfigs.js +143 -0
  53. package/dist/gc/gcConfigs.js.map +1 -0
  54. package/dist/gc/gcDefinitions.d.ts +320 -0
  55. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  56. package/dist/gc/gcDefinitions.js +81 -0
  57. package/dist/gc/gcDefinitions.js.map +1 -0
  58. package/dist/gc/gcHelpers.d.ts +86 -0
  59. package/dist/gc/gcHelpers.d.ts.map +1 -0
  60. package/dist/gc/gcHelpers.js +268 -0
  61. package/dist/gc/gcHelpers.js.map +1 -0
  62. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  63. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  64. package/dist/gc/gcReferenceGraphAlgorithm.js +49 -0
  65. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  66. package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
  67. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
  68. package/dist/gc/gcSummaryDefinitions.js +7 -0
  69. package/dist/gc/gcSummaryDefinitions.js.map +1 -0
  70. package/dist/gc/gcSummaryStateTracker.d.ts +93 -0
  71. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  72. package/dist/gc/gcSummaryStateTracker.js +239 -0
  73. package/dist/gc/gcSummaryStateTracker.js.map +1 -0
  74. package/{lib → dist/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
  75. package/dist/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  76. package/dist/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
  77. package/dist/gc/gcSweepReadyUsageDetection.js.map +1 -0
  78. package/dist/gc/gcUnreferencedStateTracker.d.ts +34 -0
  79. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  80. package/dist/gc/gcUnreferencedStateTracker.js +94 -0
  81. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -0
  82. package/dist/gc/index.d.ts +13 -0
  83. package/dist/gc/index.d.ts.map +1 -0
  84. package/dist/gc/index.js +50 -0
  85. package/dist/gc/index.js.map +1 -0
  86. package/dist/index.d.ts +3 -8
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +7 -13
  89. package/dist/index.js.map +1 -1
  90. package/dist/opLifecycle/batchManager.d.ts +10 -0
  91. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  92. package/dist/opLifecycle/batchManager.js +37 -8
  93. package/dist/opLifecycle/batchManager.js.map +1 -1
  94. package/dist/opLifecycle/definitions.d.ts +29 -1
  95. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  96. package/dist/opLifecycle/definitions.js.map +1 -1
  97. package/dist/opLifecycle/index.d.ts +3 -3
  98. package/dist/opLifecycle/index.d.ts.map +1 -1
  99. package/dist/opLifecycle/index.js +3 -1
  100. package/dist/opLifecycle/index.js.map +1 -1
  101. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  102. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  103. package/dist/opLifecycle/opCompressor.js +46 -17
  104. package/dist/opLifecycle/opCompressor.js.map +1 -1
  105. package/dist/opLifecycle/opDecompressor.d.ts +6 -1
  106. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  107. package/dist/opLifecycle/opDecompressor.js +72 -18
  108. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  109. package/dist/opLifecycle/opSplitter.d.ts +46 -2
  110. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  111. package/dist/opLifecycle/opSplitter.js +142 -5
  112. package/dist/opLifecycle/opSplitter.js.map +1 -1
  113. package/dist/opLifecycle/outbox.d.ts +23 -2
  114. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  115. package/dist/opLifecycle/outbox.js +101 -51
  116. package/dist/opLifecycle/outbox.js.map +1 -1
  117. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  118. package/dist/opLifecycle/remoteMessageProcessor.js +17 -2
  119. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  120. package/dist/opProperties.d.ts.map +1 -1
  121. package/dist/opProperties.js +1 -3
  122. package/dist/opProperties.js.map +1 -1
  123. package/dist/packageVersion.d.ts +1 -1
  124. package/dist/packageVersion.js +1 -1
  125. package/dist/packageVersion.js.map +1 -1
  126. package/dist/pendingStateManager.d.ts +6 -15
  127. package/dist/pendingStateManager.d.ts.map +1 -1
  128. package/dist/pendingStateManager.js +137 -165
  129. package/dist/pendingStateManager.js.map +1 -1
  130. package/dist/scheduleManager.d.ts +0 -1
  131. package/dist/scheduleManager.d.ts.map +1 -1
  132. package/dist/scheduleManager.js +11 -21
  133. package/dist/scheduleManager.js.map +1 -1
  134. package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
  135. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
  136. package/dist/storageServiceWithAttachBlobs.js +32 -0
  137. package/dist/storageServiceWithAttachBlobs.js.map +1 -0
  138. package/dist/summary/index.d.ts +17 -0
  139. package/dist/summary/index.d.ts.map +1 -0
  140. package/dist/summary/index.js +46 -0
  141. package/dist/summary/index.js.map +1 -0
  142. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  143. package/dist/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
  144. package/dist/summary/orderedClientElection.js.map +1 -0
  145. package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +3 -2
  146. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  147. package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
  148. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -0
  149. package/{lib → dist/summary}/runningSummarizer.d.ts +19 -18
  150. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  151. package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +191 -77
  152. package/dist/summary/runningSummarizer.js.map +1 -0
  153. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
  154. package/dist/summary/summarizer.d.ts.map +1 -0
  155. package/dist/{summarizer.js → summary/summarizer.js} +32 -76
  156. package/dist/summary/summarizer.js.map +1 -0
  157. package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
  158. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  159. package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
  160. package/dist/summary/summarizerClientElection.js.map +1 -0
  161. package/dist/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
  162. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  163. package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
  164. package/dist/summary/summarizerHeuristics.js.map +1 -0
  165. package/dist/summary/summarizerNode/index.d.ts +8 -0
  166. package/dist/summary/summarizerNode/index.d.ts.map +1 -0
  167. package/dist/summary/summarizerNode/index.js +12 -0
  168. package/dist/summary/summarizerNode/index.js.map +1 -0
  169. package/dist/summary/summarizerNode/summarizerNode.d.ts +149 -0
  170. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  171. package/dist/summary/summarizerNode/summarizerNode.js +531 -0
  172. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -0
  173. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
  174. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  175. package/dist/summary/summarizerNode/summarizerNodeUtils.js +132 -0
  176. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  177. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
  178. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  179. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +423 -0
  180. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  181. package/{lib → dist/summary}/summarizerTypes.d.ts +29 -42
  182. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  183. package/dist/{summarizerTypes.js → summary/summarizerTypes.js} +0 -5
  184. package/dist/summary/summarizerTypes.js.map +1 -0
  185. package/dist/summary/summaryCollection.d.ts.map +1 -0
  186. package/dist/{summaryCollection.js → summary/summaryCollection.js} +18 -8
  187. package/dist/summary/summaryCollection.js.map +1 -0
  188. package/{lib → dist/summary}/summaryFormat.d.ts +3 -21
  189. package/dist/summary/summaryFormat.d.ts.map +1 -0
  190. package/dist/{summaryFormat.js → summary/summaryFormat.js} +19 -21
  191. package/dist/summary/summaryFormat.js.map +1 -0
  192. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  193. package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
  194. package/dist/summary/summaryGenerator.js.map +1 -0
  195. package/dist/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  196. package/dist/summary/summaryManager.d.ts.map +1 -0
  197. package/dist/{summaryManager.js → summary/summaryManager.js} +21 -9
  198. package/dist/summary/summaryManager.js.map +1 -0
  199. package/dist/throttler.d.ts +2 -2
  200. package/dist/throttler.d.ts.map +1 -1
  201. package/dist/throttler.js +4 -4
  202. package/dist/throttler.js.map +1 -1
  203. package/lib/batchTracker.d.ts +1 -2
  204. package/lib/batchTracker.d.ts.map +1 -1
  205. package/lib/batchTracker.js +2 -1
  206. package/lib/batchTracker.js.map +1 -1
  207. package/lib/blobManager.d.ts +74 -42
  208. package/lib/blobManager.d.ts.map +1 -1
  209. package/lib/blobManager.js +322 -153
  210. package/lib/blobManager.js.map +1 -1
  211. package/lib/connectionTelemetry.d.ts.map +1 -1
  212. package/lib/connectionTelemetry.js +11 -9
  213. package/lib/connectionTelemetry.js.map +1 -1
  214. package/lib/containerHandleContext.d.ts.map +1 -1
  215. package/lib/containerHandleContext.js +3 -1
  216. package/lib/containerHandleContext.js.map +1 -1
  217. package/lib/containerRuntime.d.ts +148 -114
  218. package/lib/containerRuntime.d.ts.map +1 -1
  219. package/lib/containerRuntime.js +506 -314
  220. package/lib/containerRuntime.js.map +1 -1
  221. package/lib/dataStore.d.ts.map +1 -1
  222. package/lib/dataStore.js +11 -9
  223. package/lib/dataStore.js.map +1 -1
  224. package/lib/dataStoreContext.d.ts +40 -13
  225. package/lib/dataStoreContext.d.ts.map +1 -1
  226. package/lib/dataStoreContext.js +136 -56
  227. package/lib/dataStoreContext.js.map +1 -1
  228. package/lib/dataStoreContexts.d.ts.map +1 -1
  229. package/lib/dataStoreContexts.js +7 -3
  230. package/lib/dataStoreContexts.js.map +1 -1
  231. package/lib/dataStoreRegistry.d.ts.map +1 -1
  232. package/lib/dataStoreRegistry.js +3 -1
  233. package/lib/dataStoreRegistry.js.map +1 -1
  234. package/lib/dataStores.d.ts +39 -12
  235. package/lib/dataStores.d.ts.map +1 -1
  236. package/lib/dataStores.js +162 -74
  237. package/lib/dataStores.js.map +1 -1
  238. package/lib/deltaManagerSummarizerProxy.d.ts +19 -0
  239. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  240. package/lib/deltaManagerSummarizerProxy.js +36 -0
  241. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  242. package/lib/deltaScheduler.d.ts.map +1 -1
  243. package/lib/deltaScheduler.js +9 -4
  244. package/lib/deltaScheduler.js.map +1 -1
  245. package/lib/gc/garbageCollection.d.ts +204 -0
  246. package/lib/gc/garbageCollection.d.ts.map +1 -0
  247. package/lib/gc/garbageCollection.js +922 -0
  248. package/lib/gc/garbageCollection.js.map +1 -0
  249. package/lib/gc/gcConfigs.d.ts +22 -0
  250. package/lib/gc/gcConfigs.d.ts.map +1 -0
  251. package/lib/gc/gcConfigs.js +139 -0
  252. package/lib/gc/gcConfigs.js.map +1 -0
  253. package/lib/gc/gcDefinitions.d.ts +320 -0
  254. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  255. package/lib/gc/gcDefinitions.js +78 -0
  256. package/lib/gc/gcDefinitions.js.map +1 -0
  257. package/lib/gc/gcHelpers.d.ts +86 -0
  258. package/lib/gc/gcHelpers.d.ts.map +1 -0
  259. package/lib/gc/gcHelpers.js +254 -0
  260. package/lib/gc/gcHelpers.js.map +1 -0
  261. package/lib/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  262. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  263. package/lib/gc/gcReferenceGraphAlgorithm.js +45 -0
  264. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  265. package/lib/gc/gcSummaryDefinitions.d.ts +52 -0
  266. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  267. package/lib/gc/gcSummaryDefinitions.js +6 -0
  268. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  269. package/lib/gc/gcSummaryStateTracker.d.ts +93 -0
  270. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  271. package/lib/gc/gcSummaryStateTracker.js +235 -0
  272. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  273. package/{dist → lib/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
  274. package/lib/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  275. package/lib/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
  276. package/lib/gc/gcSweepReadyUsageDetection.js.map +1 -0
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts +34 -0
  278. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  279. package/lib/gc/gcUnreferencedStateTracker.js +90 -0
  280. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  281. package/lib/gc/index.d.ts +13 -0
  282. package/lib/gc/index.d.ts.map +1 -0
  283. package/lib/gc/index.js +12 -0
  284. package/lib/gc/index.js.map +1 -0
  285. package/lib/index.d.ts +3 -8
  286. package/lib/index.d.ts.map +1 -1
  287. package/lib/index.js +2 -6
  288. package/lib/index.js.map +1 -1
  289. package/lib/opLifecycle/batchManager.d.ts +10 -0
  290. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  291. package/lib/opLifecycle/batchManager.js +35 -7
  292. package/lib/opLifecycle/batchManager.js.map +1 -1
  293. package/lib/opLifecycle/definitions.d.ts +29 -1
  294. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  295. package/lib/opLifecycle/definitions.js.map +1 -1
  296. package/lib/opLifecycle/index.d.ts +3 -3
  297. package/lib/opLifecycle/index.d.ts.map +1 -1
  298. package/lib/opLifecycle/index.js +2 -2
  299. package/lib/opLifecycle/index.js.map +1 -1
  300. package/lib/opLifecycle/opCompressor.d.ts +1 -1
  301. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  302. package/lib/opLifecycle/opCompressor.js +47 -18
  303. package/lib/opLifecycle/opCompressor.js.map +1 -1
  304. package/lib/opLifecycle/opDecompressor.d.ts +6 -1
  305. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  306. package/lib/opLifecycle/opDecompressor.js +72 -18
  307. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  308. package/lib/opLifecycle/opSplitter.d.ts +46 -2
  309. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  310. package/lib/opLifecycle/opSplitter.js +141 -5
  311. package/lib/opLifecycle/opSplitter.js.map +1 -1
  312. package/lib/opLifecycle/outbox.d.ts +23 -2
  313. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  314. package/lib/opLifecycle/outbox.js +103 -53
  315. package/lib/opLifecycle/outbox.js.map +1 -1
  316. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  317. package/lib/opLifecycle/remoteMessageProcessor.js +17 -2
  318. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  319. package/lib/opProperties.d.ts.map +1 -1
  320. package/lib/opProperties.js +1 -3
  321. package/lib/opProperties.js.map +1 -1
  322. package/lib/packageVersion.d.ts +1 -1
  323. package/lib/packageVersion.js +1 -1
  324. package/lib/packageVersion.js.map +1 -1
  325. package/lib/pendingStateManager.d.ts +6 -15
  326. package/lib/pendingStateManager.d.ts.map +1 -1
  327. package/lib/pendingStateManager.js +137 -165
  328. package/lib/pendingStateManager.js.map +1 -1
  329. package/lib/scheduleManager.d.ts +0 -1
  330. package/lib/scheduleManager.d.ts.map +1 -1
  331. package/lib/scheduleManager.js +11 -21
  332. package/lib/scheduleManager.js.map +1 -1
  333. package/lib/storageServiceWithAttachBlobs.d.ts +17 -0
  334. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  335. package/lib/storageServiceWithAttachBlobs.js +28 -0
  336. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  337. package/lib/summary/index.d.ts +17 -0
  338. package/lib/summary/index.d.ts.map +1 -0
  339. package/lib/summary/index.js +15 -0
  340. package/lib/summary/index.js.map +1 -0
  341. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  342. package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
  343. package/lib/summary/orderedClientElection.js.map +1 -0
  344. package/{dist → lib/summary}/runWhileConnectedCoordinator.d.ts +3 -2
  345. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  346. package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
  347. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  348. package/{dist → lib/summary}/runningSummarizer.d.ts +19 -18
  349. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  350. package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +193 -79
  351. package/lib/summary/runningSummarizer.js.map +1 -0
  352. package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
  353. package/lib/summary/summarizer.d.ts.map +1 -0
  354. package/lib/{summarizer.js → summary/summarizer.js} +34 -78
  355. package/lib/summary/summarizer.js.map +1 -0
  356. package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
  357. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  358. package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
  359. package/lib/summary/summarizerClientElection.js.map +1 -0
  360. package/lib/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
  361. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  362. package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
  363. package/lib/summary/summarizerHeuristics.js.map +1 -0
  364. package/lib/summary/summarizerNode/index.d.ts +8 -0
  365. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  366. package/lib/summary/summarizerNode/index.js +7 -0
  367. package/lib/summary/summarizerNode/index.js.map +1 -0
  368. package/lib/summary/summarizerNode/summarizerNode.d.ts +149 -0
  369. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  370. package/lib/summary/summarizerNode/summarizerNode.js +526 -0
  371. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  372. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
  373. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  374. package/lib/summary/summarizerNode/summarizerNodeUtils.js +125 -0
  375. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  376. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
  377. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  378. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +419 -0
  379. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  380. package/{dist → lib/summary}/summarizerTypes.d.ts +29 -42
  381. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  382. package/lib/summary/summarizerTypes.js +6 -0
  383. package/lib/summary/summarizerTypes.js.map +1 -0
  384. package/lib/summary/summaryCollection.d.ts.map +1 -0
  385. package/lib/{summaryCollection.js → summary/summaryCollection.js} +18 -8
  386. package/lib/summary/summaryCollection.js.map +1 -0
  387. package/{dist → lib/summary}/summaryFormat.d.ts +3 -21
  388. package/lib/summary/summaryFormat.d.ts.map +1 -0
  389. package/lib/{summaryFormat.js → summary/summaryFormat.js} +20 -21
  390. package/lib/summary/summaryFormat.js.map +1 -0
  391. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  392. package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
  393. package/lib/summary/summaryGenerator.js.map +1 -0
  394. package/lib/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  395. package/lib/summary/summaryManager.d.ts.map +1 -0
  396. package/lib/{summaryManager.js → summary/summaryManager.js} +21 -9
  397. package/lib/summary/summaryManager.js.map +1 -0
  398. package/lib/throttler.d.ts +2 -2
  399. package/lib/throttler.d.ts.map +1 -1
  400. package/lib/throttler.js +4 -4
  401. package/lib/throttler.js.map +1 -1
  402. package/package.json +67 -61
  403. package/prettier.config.cjs +1 -1
  404. package/src/batchTracker.ts +55 -50
  405. package/src/blobManager.ts +863 -594
  406. package/src/connectionTelemetry.ts +280 -249
  407. package/src/containerHandleContext.ts +27 -29
  408. package/src/containerRuntime.ts +3174 -2805
  409. package/src/dataStore.ts +172 -159
  410. package/src/dataStoreContext.ts +1141 -993
  411. package/src/dataStoreContexts.ts +178 -161
  412. package/src/dataStoreRegistry.ts +25 -20
  413. package/src/dataStores.ts +887 -716
  414. package/src/deltaManagerSummarizerProxy.ts +46 -0
  415. package/src/deltaScheduler.ts +158 -150
  416. package/{garbageCollection.md → src/gc/garbageCollection.md} +16 -3
  417. package/src/gc/garbageCollection.ts +1250 -0
  418. package/src/gc/gcConfigs.ts +193 -0
  419. package/src/gc/gcDefinitions.ts +387 -0
  420. package/src/gc/gcHelpers.ts +332 -0
  421. package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
  422. package/src/gc/gcSummaryDefinitions.ts +54 -0
  423. package/src/gc/gcSummaryStateTracker.ts +329 -0
  424. package/src/gc/gcSweepReadyUsageDetection.ts +145 -0
  425. package/src/gc/gcUnreferencedStateTracker.ts +114 -0
  426. package/src/gc/index.ts +65 -0
  427. package/src/index.ts +61 -75
  428. package/src/opLifecycle/README.md +157 -0
  429. package/src/opLifecycle/batchManager.ts +119 -86
  430. package/src/opLifecycle/definitions.ts +49 -19
  431. package/src/opLifecycle/index.ts +7 -6
  432. package/src/opLifecycle/opCompressor.ts +78 -40
  433. package/src/opLifecycle/opDecompressor.ts +148 -64
  434. package/src/opLifecycle/opSplitter.ts +269 -66
  435. package/src/opLifecycle/outbox.ts +268 -184
  436. package/src/opLifecycle/remoteMessageProcessor.ts +63 -47
  437. package/src/opProperties.ts +11 -9
  438. package/src/packageVersion.ts +1 -1
  439. package/src/pendingStateManager.ts +386 -381
  440. package/src/scheduleManager.ts +299 -280
  441. package/src/storageServiceWithAttachBlobs.ts +38 -0
  442. package/src/summary/index.ts +105 -0
  443. package/src/summary/orderedClientElection.ts +564 -0
  444. package/src/summary/runWhileConnectedCoordinator.ts +113 -0
  445. package/src/summary/runningSummarizer.ts +788 -0
  446. package/src/summary/summarizer.ts +372 -0
  447. package/src/summary/summarizerClientElection.ts +139 -0
  448. package/src/summary/summarizerHeuristics.ts +224 -0
  449. package/src/summary/summarizerNode/index.ts +12 -0
  450. package/src/summary/summarizerNode/summarizerNode.ts +766 -0
  451. package/src/summary/summarizerNode/summarizerNodeUtils.ts +214 -0
  452. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +644 -0
  453. package/src/summary/summarizerTypes.ts +507 -0
  454. package/src/summary/summaryCollection.ts +450 -0
  455. package/src/summary/summaryFormat.ts +228 -0
  456. package/src/summary/summaryGenerator.ts +505 -0
  457. package/src/summary/summaryManager.ts +423 -0
  458. package/src/throttler.ts +131 -122
  459. package/tsconfig.esnext.json +6 -6
  460. package/tsconfig.json +9 -13
  461. package/dist/garbageCollection.d.ts +0 -387
  462. package/dist/garbageCollection.d.ts.map +0 -1
  463. package/dist/garbageCollection.js +0 -1138
  464. package/dist/garbageCollection.js.map +0 -1
  465. package/dist/garbageCollectionConstants.d.ts +0 -19
  466. package/dist/garbageCollectionConstants.d.ts.map +0 -1
  467. package/dist/garbageCollectionConstants.js +0 -34
  468. package/dist/garbageCollectionConstants.js.map +0 -1
  469. package/dist/gcSweepReadyUsageDetection.d.ts.map +0 -1
  470. package/dist/gcSweepReadyUsageDetection.js.map +0 -1
  471. package/dist/orderedClientElection.d.ts.map +0 -1
  472. package/dist/orderedClientElection.js.map +0 -1
  473. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  474. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  475. package/dist/runningSummarizer.d.ts.map +0 -1
  476. package/dist/runningSummarizer.js.map +0 -1
  477. package/dist/serializedSnapshotStorage.d.ts +0 -58
  478. package/dist/serializedSnapshotStorage.d.ts.map +0 -1
  479. package/dist/serializedSnapshotStorage.js +0 -108
  480. package/dist/serializedSnapshotStorage.js.map +0 -1
  481. package/dist/summarizer.d.ts.map +0 -1
  482. package/dist/summarizer.js.map +0 -1
  483. package/dist/summarizerClientElection.d.ts.map +0 -1
  484. package/dist/summarizerClientElection.js.map +0 -1
  485. package/dist/summarizerHandle.d.ts +0 -12
  486. package/dist/summarizerHandle.d.ts.map +0 -1
  487. package/dist/summarizerHandle.js +0 -22
  488. package/dist/summarizerHandle.js.map +0 -1
  489. package/dist/summarizerHeuristics.d.ts.map +0 -1
  490. package/dist/summarizerHeuristics.js.map +0 -1
  491. package/dist/summarizerTypes.d.ts.map +0 -1
  492. package/dist/summarizerTypes.js.map +0 -1
  493. package/dist/summaryCollection.d.ts.map +0 -1
  494. package/dist/summaryCollection.js.map +0 -1
  495. package/dist/summaryFormat.d.ts.map +0 -1
  496. package/dist/summaryFormat.js.map +0 -1
  497. package/dist/summaryGenerator.d.ts.map +0 -1
  498. package/dist/summaryGenerator.js.map +0 -1
  499. package/dist/summaryManager.d.ts.map +0 -1
  500. package/dist/summaryManager.js.map +0 -1
  501. package/lib/garbageCollection.d.ts +0 -387
  502. package/lib/garbageCollection.d.ts.map +0 -1
  503. package/lib/garbageCollection.js +0 -1133
  504. package/lib/garbageCollection.js.map +0 -1
  505. package/lib/garbageCollectionConstants.d.ts +0 -19
  506. package/lib/garbageCollectionConstants.d.ts.map +0 -1
  507. package/lib/garbageCollectionConstants.js +0 -31
  508. package/lib/garbageCollectionConstants.js.map +0 -1
  509. package/lib/gcSweepReadyUsageDetection.d.ts.map +0 -1
  510. package/lib/gcSweepReadyUsageDetection.js.map +0 -1
  511. package/lib/orderedClientElection.d.ts.map +0 -1
  512. package/lib/orderedClientElection.js.map +0 -1
  513. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  514. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  515. package/lib/runningSummarizer.d.ts.map +0 -1
  516. package/lib/runningSummarizer.js.map +0 -1
  517. package/lib/serializedSnapshotStorage.d.ts +0 -58
  518. package/lib/serializedSnapshotStorage.d.ts.map +0 -1
  519. package/lib/serializedSnapshotStorage.js +0 -104
  520. package/lib/serializedSnapshotStorage.js.map +0 -1
  521. package/lib/summarizer.d.ts.map +0 -1
  522. package/lib/summarizer.js.map +0 -1
  523. package/lib/summarizerClientElection.d.ts.map +0 -1
  524. package/lib/summarizerClientElection.js.map +0 -1
  525. package/lib/summarizerHandle.d.ts +0 -12
  526. package/lib/summarizerHandle.d.ts.map +0 -1
  527. package/lib/summarizerHandle.js +0 -18
  528. package/lib/summarizerHandle.js.map +0 -1
  529. package/lib/summarizerHeuristics.d.ts.map +0 -1
  530. package/lib/summarizerHeuristics.js.map +0 -1
  531. package/lib/summarizerTypes.d.ts.map +0 -1
  532. package/lib/summarizerTypes.js +0 -9
  533. package/lib/summarizerTypes.js.map +0 -1
  534. package/lib/summaryCollection.d.ts.map +0 -1
  535. package/lib/summaryCollection.js.map +0 -1
  536. package/lib/summaryFormat.d.ts.map +0 -1
  537. package/lib/summaryFormat.js.map +0 -1
  538. package/lib/summaryGenerator.d.ts.map +0 -1
  539. package/lib/summaryGenerator.js.map +0 -1
  540. package/lib/summaryManager.d.ts.map +0 -1
  541. package/lib/summaryManager.js.map +0 -1
  542. package/src/garbageCollection.ts +0 -1646
  543. package/src/garbageCollectionConstants.ts +0 -35
  544. package/src/gcSweepReadyUsageDetection.ts +0 -139
  545. package/src/orderedClientElection.ts +0 -532
  546. package/src/runWhileConnectedCoordinator.ts +0 -106
  547. package/src/runningSummarizer.ts +0 -611
  548. package/src/serializedSnapshotStorage.ts +0 -146
  549. package/src/summarizer.ts +0 -421
  550. package/src/summarizerClientElection.ts +0 -161
  551. package/src/summarizerHandle.ts +0 -21
  552. package/src/summarizerHeuristics.ts +0 -222
  553. package/src/summarizerTypes.ts +0 -510
  554. package/src/summaryCollection.ts +0 -421
  555. package/src/summaryFormat.ts +0 -235
  556. package/src/summaryGenerator.ts +0 -446
  557. package/src/summaryManager.ts +0 -394
  558. /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  559. /package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  560. /package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
  561. /package/lib/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  562. /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  563. /package/lib/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
@@ -14,26 +14,26 @@ const container_definitions_1 = require("@fluidframework/container-definitions")
14
14
  const driver_utils_1 = require("@fluidframework/driver-utils");
15
15
  const common_utils_1 = require("@fluidframework/common-utils");
16
16
  const uuid_1 = require("uuid");
17
- const garbage_collector_1 = require("@fluidframework/garbage-collector");
18
17
  const dataStoreContexts_1 = require("./dataStoreContexts");
18
+ const containerRuntime_1 = require("./containerRuntime");
19
19
  const dataStoreContext_1 = require("./dataStoreContext");
20
- const summaryFormat_1 = require("./summaryFormat");
20
+ const storageServiceWithAttachBlobs_1 = require("./storageServiceWithAttachBlobs");
21
21
  const dataStore_1 = require("./dataStore");
22
- const garbageCollection_1 = require("./garbageCollection");
23
- const garbageCollectionConstants_1 = require("./garbageCollectionConstants");
24
- const summarizerClientElection_1 = require("./summarizerClientElection");
22
+ const gc_1 = require("./gc");
23
+ const summary_1 = require("./summary");
25
24
  /**
26
25
  * This class encapsulates data store handling. Currently it is only used by the container runtime,
27
26
  * but eventually could be hosted on any channel once we formalize the channel api boundary.
28
27
  */
29
28
  class DataStores {
30
- constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, getBaseGCDetails, gcNodeUpdated, aliasMap, contexts = new dataStoreContexts_1.DataStoreContexts(baseLogger)) {
29
+ constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, contexts = new dataStoreContexts_1.DataStoreContexts(baseLogger)) {
31
30
  this.baseSnapshot = baseSnapshot;
32
31
  this.runtime = runtime;
33
32
  this.submitAttachFn = submitAttachFn;
34
33
  this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
35
34
  this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
36
35
  this.gcNodeUpdated = gcNodeUpdated;
36
+ this.isDataStoreDeleted = isDataStoreDeleted;
37
37
  this.aliasMap = aliasMap;
38
38
  this.contexts = contexts;
39
39
  // Stores tracked by the Domain
@@ -48,18 +48,11 @@ class DataStores {
48
48
  this.dispose = () => this.disposeOnce.value;
49
49
  this.mc = (0, telemetry_utils_1.loggerToMonitoringContext)(telemetry_utils_1.ChildLogger.create(baseLogger));
50
50
  this.containerRuntimeHandle = new datastore_1.FluidObjectHandle(this.runtime, "/", this.runtime.IFluidHandleContext);
51
- const baseGCDetailsP = new common_utils_1.LazyPromise(async () => {
52
- return getBaseGCDetails();
53
- });
54
- // Returns the base GC details for the data store with the given id.
55
- const dataStoreBaseGCDetails = async (dataStoreId) => {
56
- const baseGCDetails = await baseGCDetailsP;
57
- return baseGCDetails.get(dataStoreId);
58
- };
59
51
  // Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
60
- this.throwOnTombstoneUsage =
61
- this.mc.config.getBoolean(garbageCollectionConstants_1.throwOnTombstoneUsageKey) === true &&
62
- this.runtime.clientDetails.type !== summarizerClientElection_1.summarizerClientType;
52
+ this.throwOnTombstoneLoad =
53
+ this.mc.config.getBoolean(gc_1.throwOnTombstoneLoadKey) === true &&
54
+ this.runtime.gcTombstoneEnforcementAllowed &&
55
+ this.runtime.clientDetails.type !== summary_1.summarizerClientType;
63
56
  // Extract stores stored inside the snapshot
64
57
  const fluidDataStores = new Map();
65
58
  if (baseSnapshot) {
@@ -80,11 +73,12 @@ class DataStores {
80
73
  dataStoreContext = new dataStoreContext_1.RemoteFluidDataStoreContext({
81
74
  id: key,
82
75
  snapshotTree: value,
83
- getBaseGCDetails: async () => dataStoreBaseGCDetails(key),
84
76
  runtime: this.runtime,
85
77
  storage: this.runtime.storage,
86
78
  scope: this.runtime.scope,
87
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, { type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary }),
79
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
80
+ type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
81
+ }),
88
82
  });
89
83
  }
90
84
  else {
@@ -98,7 +92,9 @@ class DataStores {
98
92
  runtime: this.runtime,
99
93
  storage: this.runtime.storage,
100
94
  scope: this.runtime.scope,
101
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, { type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary }),
95
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
96
+ type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
97
+ }),
102
98
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
103
99
  snapshotTree,
104
100
  isRootDataStore: undefined,
@@ -143,10 +139,10 @@ class DataStores {
143
139
  } }));
144
140
  throw error;
145
141
  }
146
- const flatBlobs = new Map();
142
+ const flatAttachBlobs = new Map();
147
143
  let snapshotTree;
148
144
  if (attachMessage.snapshot) {
149
- snapshotTree = (0, driver_utils_1.buildSnapshotTree)(attachMessage.snapshot.entries, flatBlobs);
145
+ snapshotTree = (0, driver_utils_1.buildSnapshotTree)(attachMessage.snapshot.entries, flatAttachBlobs);
150
146
  }
151
147
  // Include the type of attach message which is the pkg of the store to be
152
148
  // used by RemoteFluidDataStoreContext in case it is not in the snapshot.
@@ -154,10 +150,8 @@ class DataStores {
154
150
  const remoteFluidDataStoreContext = new dataStoreContext_1.RemoteFluidDataStoreContext({
155
151
  id: attachMessage.id,
156
152
  snapshotTree,
157
- // New data stores begin with empty GC details since GC hasn't run on them yet.
158
- getBaseGCDetails: async () => { return {}; },
159
153
  runtime: this.runtime,
160
- storage: new driver_utils_1.BlobCacheStorageService(this.runtime.storage, flatBlobs),
154
+ storage: new storageServiceWithAttachBlobs_1.StorageServiceWithAttachBlobs(this.runtime.storage, flatAttachBlobs),
161
155
  scope: this.runtime.scope,
162
156
  createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
163
157
  type: runtime_definitions_1.CreateSummarizerNodeSource.FromAttach,
@@ -232,7 +226,9 @@ class DataStores {
232
226
  runtime: this.runtime,
233
227
  storage: this.runtime.storage,
234
228
  scope: this.runtime.scope,
235
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, { type: runtime_definitions_1.CreateSummarizerNodeSource.Local }),
229
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
230
+ type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
231
+ }),
236
232
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
237
233
  snapshotTree: undefined,
238
234
  isRootDataStore: isRoot,
@@ -248,7 +244,9 @@ class DataStores {
248
244
  runtime: this.runtime,
249
245
  storage: this.runtime.storage,
250
246
  scope: this.runtime.scope,
251
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, { type: runtime_definitions_1.CreateSummarizerNodeSource.Local }),
247
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
248
+ type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
249
+ }),
252
250
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
253
251
  snapshotTree: undefined,
254
252
  isRootDataStore: false,
@@ -257,7 +255,9 @@ class DataStores {
257
255
  this.contexts.addUnbound(context);
258
256
  return context;
259
257
  }
260
- get disposed() { return this.disposeOnce.evaluated; }
258
+ get disposed() {
259
+ return this.disposeOnce.evaluated;
260
+ }
261
261
  resubmitDataStoreOp(content, localOpMetadata) {
262
262
  const envelope = content;
263
263
  const context = this.contexts.get(envelope.address);
@@ -284,6 +284,8 @@ class DataStores {
284
284
  processFluidDataStoreOp(message, local, localMessageMetadata) {
285
285
  const envelope = message.contents;
286
286
  const transformed = Object.assign(Object.assign({}, message), { contents: envelope.contents });
287
+ const request = { url: envelope.address };
288
+ this.validateNotDeleted(envelope.address, request);
287
289
  const context = this.contexts.get(envelope.address);
288
290
  (0, common_utils_1.assert)(!!context, 0x162 /* "There should be a store context for the op" */);
289
291
  context.process(transformed, local, localMessageMetadata);
@@ -291,32 +293,70 @@ class DataStores {
291
293
  // being used.
292
294
  this.gcNodeUpdated(`/${envelope.address}`, message.timestamp, context.isLoaded ? context.packagePath : undefined);
293
295
  }
294
- async getDataStore(id, wait, viaHandle) {
295
- const context = await this.contexts.getBoundOrRemoted(id, wait);
296
+ async getDataStore(id, requestHeaderData) {
297
+ const headerData = Object.assign(Object.assign({}, containerRuntime_1.defaultRuntimeHeaderData), requestHeaderData);
296
298
  const request = { url: id };
299
+ this.validateNotDeleted(id, request, headerData);
300
+ const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
297
301
  if (context === undefined) {
298
302
  // The requested data store does not exits. Throw a 404 response exception.
299
303
  throw (0, runtime_utils_1.responseToException)((0, runtime_utils_1.create404Response)(request), request);
300
304
  }
305
+ this.validateNotTombstoned(context, request, requestHeaderData);
306
+ return context;
307
+ }
308
+ /**
309
+ * Validate that the data store had not been deleted by GC.
310
+ *
311
+ * @param id - data store id
312
+ * @param request - the request information to log if the validation detects the data store has been deleted
313
+ * @param requestHeaderData - the request header information to log if the validation detects the data store has been deleted
314
+ */
315
+ validateNotDeleted(id, request, requestHeaderData) {
316
+ const dataStoreNodePath = `/${id}`;
317
+ if (this.isDataStoreDeleted(dataStoreNodePath)) {
318
+ (0, common_utils_1.assert)(!this.contexts.has(id), 0x570 /* Inconsistent state! GC says the data store is deleted, but the data store is not deleted from the runtime. */);
319
+ // The requested data store is removed by gc. Create a 404 gc response exception.
320
+ const error = (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, "DataStore was deleted", request), request);
321
+ (0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
322
+ eventName: "GC_Deleted_DataStore_Requested",
323
+ category: "error",
324
+ isSummarizerClient: this.runtime.clientDetails.type === summary_1.summarizerClientType,
325
+ headers: JSON.stringify(requestHeaderData),
326
+ gcTombstoneEnforcementAllowed: this.runtime.gcTombstoneEnforcementAllowed,
327
+ }, undefined /** packagePath */, error);
328
+ throw error;
329
+ }
330
+ }
331
+ /**
332
+ * Validates that the data store context requested has not been marked as tombstone by GC.
333
+ *
334
+ * @param context - the data store context in question
335
+ * @param request - the request information to log if the validation detects the data store has been tombstoned
336
+ * @param headerData - the request header information to log if the validation detects the data store has been tombstoned
337
+ */
338
+ validateNotTombstoned(context, request, headerData) {
301
339
  if (context.tombstoned) {
340
+ const shouldFail = this.throwOnTombstoneLoad && !headerData.allowTombstone;
302
341
  // The requested data store is removed by gc. Create a 404 gc response exception.
303
- const error = (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, "Datastore removed by gc", request), request);
304
- // Note: if a user writes a request to look like it's viaHandle, we will also send this telemetry event
305
- this.mc.logger.sendErrorEvent({
342
+ const error = (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, "DataStore was deleted", request, {
343
+ [containerRuntime_1.TombstoneResponseHeaderKey]: true,
344
+ }), request);
345
+ (0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
306
346
  eventName: "GC_Tombstone_DataStore_Requested",
307
- url: request.url,
308
- pkg: (0, runtime_utils_1.packagePathToTelemetryProperty)(context.isLoaded ? context.packagePath : undefined),
309
- viaHandle,
310
- }, error);
311
- // Always log an error when tombstoned data store is used. However, throw an error only if
312
- // throwOnTombstoneUsage is set.
313
- if (this.throwOnTombstoneUsage) {
347
+ category: shouldFail ? "error" : "generic",
348
+ isSummarizerClient: this.runtime.clientDetails.type === summary_1.summarizerClientType,
349
+ headers: JSON.stringify(headerData),
350
+ gcTombstoneEnforcementAllowed: this.runtime.gcTombstoneEnforcementAllowed,
351
+ }, context.isLoaded ? context.packagePath : undefined, error);
352
+ if (shouldFail) {
314
353
  throw error;
315
354
  }
316
355
  }
317
- return context;
318
356
  }
319
357
  processSignal(address, message, local) {
358
+ const request = { url: address };
359
+ this.validateNotDeleted(address, request);
320
360
  const context = this.contexts.get(address);
321
361
  if (!context) {
322
362
  // Attach message may not have been processed yet
@@ -342,6 +382,10 @@ class DataStores {
342
382
  eventName: "SetConnectionStateError",
343
383
  clientId,
344
384
  fluidDataStore,
385
+ details: JSON.stringify({
386
+ runtimeConnected: this.runtime.connected,
387
+ connected,
388
+ }),
345
389
  }, error);
346
390
  }
347
391
  }
@@ -363,10 +407,12 @@ class DataStores {
363
407
  // Iterate over each store and ask it to snapshot
364
408
  await Promise.all(Array.from(this.contexts)
365
409
  .filter(([_, context]) => {
366
- // Summarizer works only with clients with no local changes!
367
- (0, common_utils_1.assert)(context.attachState !== container_definitions_1.AttachState.Attaching, 0x165 /* "Summarizer cannot work if client has local changes" */);
410
+ // Summarizer works only with clients with no local changes. A data store in attaching
411
+ // state indicates an op was sent to attach a local data store.
412
+ (0, common_utils_1.assert)(context.attachState !== container_definitions_1.AttachState.Attaching, 0x588 /* Local data store detected in attaching state during summarize */);
368
413
  return context.attachState === container_definitions_1.AttachState.Attached;
369
- }).map(async ([contextId, context]) => {
414
+ })
415
+ .map(async ([contextId, context]) => {
370
416
  const contextSummary = await context.summarize(fullTree, trackState, telemetryContext);
371
417
  summaryBuilder.addWithStats(contextId, contextSummary);
372
418
  }));
@@ -386,9 +432,9 @@ class DataStores {
386
432
  // Take summary of bounded data stores only, make sure we haven't summarized them already
387
433
  // and no attach op has been fired for that data store because for loader versions <= 0.24
388
434
  // we set attach state as "attaching" before taking createNew summary.
389
- !(this.contexts.isNotBound(key)
390
- || builderTree[key]
391
- || this.attachOpFiredForDataStore.has(key)))
435
+ !(this.contexts.isNotBound(key) ||
436
+ builderTree[key] ||
437
+ this.attachOpFiredForDataStore.has(key)))
392
438
  .map(([key, value]) => {
393
439
  let dataStoreSummary;
394
440
  if (value.isLoaded) {
@@ -437,14 +483,16 @@ class DataStores {
437
483
  * @param fullGC - true to bypass optimizations and force full generation of GC data.
438
484
  */
439
485
  async getGCData(fullGC = false) {
440
- const builder = new garbage_collector_1.GCDataBuilder();
486
+ const builder = new runtime_utils_1.GCDataBuilder();
441
487
  // Iterate over each store and get their GC data.
442
488
  await Promise.all(Array.from(this.contexts)
443
489
  .filter(([_, context]) => {
444
- // Get GC data only for attached contexts. Detached contexts are not connected in the GC reference
445
- // graph so any references they might have won't be connected as well.
490
+ // Summarizer client and hence GC works only with clients with no local changes. A data store in
491
+ // attaching state indicates an op was sent to attach a local data store.
492
+ (0, common_utils_1.assert)(context.attachState !== container_definitions_1.AttachState.Attaching, 0x589 /* Local data store detected in attaching state while running GC */);
446
493
  return context.attachState === container_definitions_1.AttachState.Attached;
447
- }).map(async ([contextId, context]) => {
494
+ })
495
+ .map(async ([contextId, context]) => {
448
496
  const contextGCData = await context.getGCData(fullGC);
449
497
  // Prefix the child's id to the ids of its GC nodes so they can be identified as belonging to the child.
450
498
  // This also gradually builds the id of each node to be a path from the root.
@@ -461,14 +509,10 @@ class DataStores {
461
509
  updateUsedRoutes(usedRoutes) {
462
510
  var _a;
463
511
  // Get a map of data store ids to routes used in it.
464
- const usedDataStoreRoutes = (0, garbage_collector_1.unpackChildNodesUsedRoutes)(usedRoutes);
512
+ const usedDataStoreRoutes = (0, runtime_utils_1.unpackChildNodesUsedRoutes)(usedRoutes);
465
513
  // Verify that the used routes are correct.
466
514
  for (const [id] of usedDataStoreRoutes) {
467
515
  (0, common_utils_1.assert)(this.contexts.has(id), 0x167 /* "Used route does not belong to any known data store" */);
468
- // Revive datastores regardless of whether or not tombstone the tombstone flag is flipped
469
- const dataStore = this.contexts.get(id);
470
- (0, common_utils_1.assert)(dataStore !== undefined, 0x46e /* No data store retrieved with specified id */);
471
- dataStore.setTombstone(false /* tombstone */);
472
516
  }
473
517
  // Update the used routes in each data store. Used routes is empty for unused data stores.
474
518
  for (const [contextId, context] of this.contexts) {
@@ -476,13 +520,10 @@ class DataStores {
476
520
  }
477
521
  }
478
522
  /**
479
- * This is called to update objects whose routes are unused. The unused objects are either deleted or marked as
480
- * tombstones.
523
+ * This is called to update objects whose routes are unused. The unused objects are deleted.
481
524
  * @param unusedRoutes - The routes that are unused in all data stores in this Container.
482
- * @param tombstone - if true, the objects corresponding to unused routes are marked tombstones. Otherwise, they
483
- * are deleted.
484
525
  */
485
- updateUnusedRoutes(unusedRoutes, tombstone) {
526
+ updateUnusedRoutes(unusedRoutes) {
486
527
  for (const route of unusedRoutes) {
487
528
  const pathParts = route.split("/");
488
529
  // Delete data store only if its route (/datastoreId) is in unusedRoutes. We don't want to delete a data
@@ -492,23 +533,70 @@ class DataStores {
492
533
  }
493
534
  const dataStoreId = pathParts[1];
494
535
  (0, common_utils_1.assert)(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
495
- /**
496
- * When running GC in tombstone mode, datastore contexts are tombstoned. Tombstoned datastore contexts
497
- * enable testing scenarios with accessing deleted content without actually deleting content from
498
- * summaries.
499
- */
500
- if (tombstone) {
501
- const dataStore = this.contexts.get(dataStoreId);
502
- (0, common_utils_1.assert)(dataStore !== undefined, 0x442 /* No data store retrieved with specified id */);
503
- dataStore.setTombstone(true /* tombstone */);
504
- continue;
505
- }
506
536
  // Delete the contexts of unused data stores.
507
537
  this.contexts.delete(dataStoreId);
508
538
  // Delete the summarizer node of the unused data stores.
509
539
  this.deleteChildSummarizerNodeFn(dataStoreId);
510
540
  }
511
541
  }
542
+ /**
543
+ * Delete data stores and its objects that are sweep ready.
544
+ * @param sweepReadyDataStoreRoutes - The routes of data stores and its objects that are sweep ready and should
545
+ * be deleted.
546
+ * @returns - The routes of data stores and its objects that were deleted.
547
+ */
548
+ deleteSweepReadyNodes(sweepReadyDataStoreRoutes) {
549
+ // If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
550
+ if (this.mc.config.getBoolean(gc_1.sweepDatastoresKey) !== true) {
551
+ return [];
552
+ }
553
+ for (const route of sweepReadyDataStoreRoutes) {
554
+ const pathParts = route.split("/");
555
+ const dataStoreId = pathParts[1];
556
+ // TODO: GC:Validation - Skip any routes already deleted
557
+ // Ignore sub-data store routes because a data store and its sub-routes are deleted together, so, we only
558
+ // need to delete the data store.
559
+ if (pathParts.length > 2) {
560
+ continue;
561
+ }
562
+ if (!this.contexts.has(dataStoreId)) {
563
+ this.mc.logger.sendErrorEvent({
564
+ eventName: "DeletedDataStoreNotFound",
565
+ dataStoreId,
566
+ });
567
+ }
568
+ const dataStore = this.contexts.get(dataStoreId);
569
+ (0, common_utils_1.assert)(dataStore !== undefined, 0x571 /* Attempting to delete unknown dataStore */);
570
+ dataStore.delete();
571
+ // Delete the contexts of sweep ready data stores.
572
+ this.contexts.delete(dataStoreId);
573
+ // Delete the summarizer node of the sweep ready data stores.
574
+ this.deleteChildSummarizerNodeFn(dataStoreId);
575
+ }
576
+ return Array.from(sweepReadyDataStoreRoutes);
577
+ }
578
+ /**
579
+ * This is called to update objects whose routes are tombstones. Tombstoned datastore contexts enable testing
580
+ * scenarios with accessing deleted content without actually deleting content from summaries.
581
+ * @param tombstonedRoutes - The routes that are tombstones in all data stores in this Container.
582
+ */
583
+ updateTombstonedRoutes(tombstonedRoutes) {
584
+ const tombstonedDataStoresSet = new Set();
585
+ for (const route of tombstonedRoutes) {
586
+ const pathParts = route.split("/");
587
+ // Tombstone data store only if its route (/datastoreId) is directly in tombstoneRoutes.
588
+ if (pathParts.length > 2) {
589
+ continue;
590
+ }
591
+ const dataStoreId = pathParts[1];
592
+ (0, common_utils_1.assert)(this.contexts.has(dataStoreId), 0x510 /* No data store with specified id */);
593
+ tombstonedDataStoresSet.add(dataStoreId);
594
+ }
595
+ // Update the used routes in each data store. Used routes is empty for unused data stores.
596
+ for (const [contextId, context] of this.contexts) {
597
+ context.setTombstone(tombstonedDataStoresSet.has(contextId));
598
+ }
599
+ }
512
600
  /**
513
601
  * Returns the outbound routes of this channel. Only root data stores are considered referenced and their paths are
514
602
  * part of outbound routes.
@@ -545,9 +633,9 @@ class DataStores {
545
633
  // Data stores paths are of the format "/dataStoreId".
546
634
  // Sub data store paths are of the format "/dataStoreId/subPath/...".
547
635
  if (pathParts.length === 2) {
548
- return garbageCollection_1.GCNodeType.DataStore;
636
+ return gc_1.GCNodeType.DataStore;
549
637
  }
550
- return garbageCollection_1.GCNodeType.SubDataStore;
638
+ return gc_1.GCNodeType.SubDataStore;
551
639
  }
552
640
  }
553
641
  exports.DataStores = DataStores;
@@ -555,7 +643,7 @@ function getSummaryForDatastores(snapshot, metadata) {
555
643
  if (!snapshot) {
556
644
  return undefined;
557
645
  }
558
- if ((0, summaryFormat_1.rootHasIsolatedChannels)(metadata)) {
646
+ if ((0, summary_1.rootHasIsolatedChannels)(metadata)) {
559
647
  const datastoresSnapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
560
648
  (0, common_utils_1.assert)(!!datastoresSnapshot, 0x168 /* Expected tree in snapshot not found */);
561
649
  return datastoresSnapshot;
@@ -564,7 +652,7 @@ function getSummaryForDatastores(snapshot, metadata) {
564
652
  // back-compat: strip out all non-datastore paths before giving to DataStores object.
565
653
  const datastoresTrees = {};
566
654
  for (const [key, value] of Object.entries(snapshot.trees)) {
567
- if (!summaryFormat_1.nonDataStorePaths.includes(key)) {
655
+ if (!summary_1.nonDataStorePaths.includes(key)) {
568
656
  datastoresTrees[key] = value;
569
657
  }
570
658
  }